EC2 から使用できる IMDS のバージョンを確認する方法を教えてください

EC2 インスタンスが使用できる IMDS のバージョンは、AWS CLI で確認できます
2022.08.17

困っていた内容

Security Hub で IMDSv2 の利用に関する内容が検知されました。
EC2 インスタンスに設定されている IMDS のバージョンを確認したいのですが、どこから確認できるのでしょうか。確認方法を教えてください。

AWS Foundational Security Best Practices コントロール - AWS Security Hub

[EC2.8] EC2 インスタンスは IMDSv2 を使用する必要があります

このコントロールは、EC2 インスタンスメタデータバージョンが、インスタンスメタデータサービスバージョン 2 (IMDSv2) で設定されているかどうかをチェックします。

どう対応すればいいの?

AWS CLI のdescribe-instancesを実行してください。

IMDS に関する設定は、describe-instancesの実行結果に含まれるMetadataOptionsから確認ができます。

  • HttpTokensoptionalの場合、IMDSv1 と IMDSv2 が使用可能
  • HttpTokensrequiredの場合、IMDSv2 が使用可能

なお、describe-instancesの実行結果には、EC2 インスタンスに関わるさまざまな設定が含まるため、IMDS に関する情報だけを確認したい場合は、queryによるフィルタをご活用ください。

IMDSのバージョン1とバージョン2が使用可能

$ aws ec2 describe-instances --instance-id 【インスタンス ID】 --query "Reservations[*].Instances[*].MetadataOptions"
[
    [
        {
            "State": "applied",
            "HttpTokens": "optional",
            "HttpPutResponseHopLimit": 1,
            "HttpEndpoint": "enabled",
            "HttpProtocolIpv6": "disabled",
            "InstanceMetadataTags": "disabled"
        }
    ]
]

IMDSのバージョン2が使用可能

$ aws ec2 describe-instances --instance-id 【インスタンス ID】 --query "Reservations[*].Instances[*].MetadataOptions"
[
    [
        {
            "State": "applied",
            "HttpTokens": "required",
            "HttpPutResponseHopLimit": 1,
            "HttpEndpoint": "enabled",
            "HttpProtocolIpv6": "disabled",
            "InstanceMetadataTags": "disabled"
        }
    ]
]

マネジメントコンソールからは確認できないの?

2022年8月時点の挙動として、マネジメントコンソールからは確認ができないようです。

IMDS(インスタンスメタデータ)に関する設定変更も、EC2 インスタンス作成時を除き、マネジメントコンソール(EC2 コンソール)からはできないため、この機会に AWS CLI の利用もご検討ください。

インスタンスメタデータオプションの設定 - Amazon Elastic Compute Cloud

現在、既存のインスタンスでのインスタンスメタデータオプションの変更は、AWS SDK もしくは AWS CLI のみでサポートされます。Amazon EC2 コンソールを使用して、インスタンスメタデータオプションを変更することはできません。

なお、AWS ではマネジメントコンソールから AWS CLI などのコマンドが実行できるブラウザーベースのシェル環境が用意されています。

参考資料