AWSでEC2インスタンスを運用していると、「インスタンスメタデータ」という言葉を耳にしたことがあると思います。このメタデータは、インスタンス自身に関する情報(AMI ID、インスタンスタイプ、IAMロールのクレデンシャルなど)を取得するために使われます。
しかし、この便利な仕組みにはセキュリティリスクが潜んでいます。そこで登場したのが IMDSv2(Instance Metadata Service version 2) です。本記事では、IMDSとは何か、そしてなぜIMDSv2を使うべきかについて解説します。
IMDSとは?
IMDS(Instance Metadata Service) は、EC2インスタンス内部からHTTP経由でアクセス可能なメタデータ取得エンドポイントのことです。
- エンドポイントURL:
http://169.254.169.254/latest/meta-data/
- 取得できる情報: インスタンスタイプ、ホスト名、セキュリティグループ、IAMロールの一時的な認証情報(クレデンシャル)など。
IMDSv1の問題点
IMDSv1はシンプルにGETリクエストを送るだけで情報が取得できるため、利便性は高いがセキュリティに弱いという特徴がありました。特に、SSRF(Server Side Request Forgery)攻撃に弱いという問題が知られていました。
IMDSv2とは?
IMDSv2はAWSがセキュリティ強化のために導入した新しいバージョンです。以下のような変更が加えられました:
主な変更点
- セッションベースの認証トークンを使用
- メタデータ取得にはまずPUTリクエストでトークンを取得し、そのトークンを使ってGETリクエストを送る必要があります。
- HTTPヘッダーでの制限により、簡単にアクセスできないように設計されています。
なぜIMDSv2を使うべきか?
1. SSRF攻撃を防げる
IMDSv2は、アプリケーション内で意図せず外部からIMDSへリクエストされること(SSRF)を防ぎます。攻撃者がEC2内部のクレデンシャルを抜き取るリスクが大幅に減ります。
2. セキュリティベストプラクティスに準拠
AWS自体がIMDSv2を推奨しており、今後IMDSv1は非推奨になる可能性もあります。セキュリティ監査やガイドライン準拠の観点でもv2が望ましいです。
3. IMDSv2専用モードの利用が可能
EC2インスタンスを起動する際に、IMDSv1を無効にしてIMDSv2のみを有効にする設定(IMDSv2専用モード)を行うことで、より強固なセキュリティ体制を構築できます。
IMDSv2の使い方(例)
# トークン取得(有効期限6時間)
TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" \
-H "X-aws-ec2-metadata-token-ttl-seconds: 21600")
# トークンを使ってメタデータ取得
curl -H "X-aws-ec2-metadata-token: $TOKEN" \
http://169.254.169.254/latest/meta-data/
まとめ
比較項目 | IMDSv1 | IMDSv2 |
---|---|---|
認証トークン | 不要 | 必要 |
SSRF耐性 | 低い | 高い |
AWS推奨 | × | ◎ |
廃止の可能性 | 高い | 低い(標準になる) |
IMDSv2を使うことで、EC2インスタンスのセキュリティをワンランク上に引き上げることができます。今後のAWSのベストプラクティスに対応するためにも、IMDSv2の導入は今すぐにでも検討すべき事項です。
AWSを安全に使いこなすには、小さな設定の見直しが大きな差を生みます。IMDSv2はその代表例と言えるでしょう。