説明
メタデータエンドポイントが有効で metadata_options.http_tokens が optional の場合、IMDSv1 と IMDSv2 の両方の要求が許可されます。IMDSv2 はセッショントークンを要求し、一部の SSRF 経路などによるメタデータの漏えいリスクを減らします。すべての SSRF やインスタンス侵害を防ぐものではありません。
想定される影響
- 脆弱なアプリケーションを通じて、メタデータやインスタンスロールの一時認証情報が漏えいするおそれがあります。
- 互換性を確認せずに IMDSv2 を強制すると、古いクライアントがメタデータを取得できなくなる場合があります。
対処方法
- メタデータが必要な場合は http_tokens: required を設定し、SDK、エージェント、コンテナーの動作を確認してください。不要な場合は http_endpoint: disabled を検討してください。
- 実際のインスタンス設定と新規インスタンスの起動設定を確認してください。インスタンスロールの最小権限と SSRF 対策も別途維持してください。
例
ec2_subnet_id と ec2_image_id には、対象リージョンで使用する実際のサブネットと AMI ID を指定してください。メタデータが必要なインスタンスの比較です。
変更前
yaml
- name: EC2 インスタンスを作成する
amazon.aws.ec2_instance:
name: public-metadataoptions-instance
vpc_subnet_id: "{{ ec2_subnet_id }}"
instance_type: t3.small
image_id: "{{ ec2_image_id }}"
metadata_options:
http_tokens: optional
変更後
yaml
- name: EC2 インスタンスを作成する
amazon.aws.ec2_instance:
name: public-metadataoptions-instance
vpc_subnet_id: "{{ ec2_subnet_id }}"
instance_type: t3.small
image_id: "{{ ec2_image_id }}"
metadata_options:
http_endpoint: enabled
http_tokens: required
補足:
- 変更前: 有効なエンドポイントで optional を使うと、トークンなしの IMDSv1 要求も許可されます。
- 変更後: エンドポイントを有効にし、required で IMDSv2 トークンを要求します。