こんにちは。shootaceanです。
AWSアカウント内に存在している全てのEC2インスタンスの
利用可能インスタンスメタデータサービスバージョン ( IMDSv1 / IMDSv2 )
を確認する必要があったので、Pythonスクリプトを書いてみました。
コード
import boto3
profileName = "your-profile-name"
def getTargetInstances(ec2Session):
    """EC2インスタンス情報を取得する"""
    instances = ec2Session.describe_instances()
    targetInstances = []
    for r in instances['Reservations']:
        for i in r['Instances']:
            targetInstances.append({
                'App': getTagValueByName(i['Tags'], 'App'),
                'InstanceId': i["InstanceId"],
                'HttpTokens': i['MetadataOptions']['HttpTokens'],
            })
    return targetInstances
def getTagValueByName(tags: list, name: str) -> str:
    """AWSリソースのタグ配列から指定したタグ名の値を取得する"""
    for t in tags:
        if t['Key'] == name:
            return t['Value']
    return ""
if __name__ == "__main__":
    session = boto3.session.Session(profile_name=profileName)
    ec2 = session.client('ec2')
    targetInstances = getTargetInstances(ec2)
    for i in targetInstances:
        print("{}\t{}".format(i['InstanceId'], i['HttpTokens']))
IMDSの利用可能バージョン判断
boto3で取得できるEC2データ内のMetadataOptions.HttpTokensで判断できます。
optionalの場合は、IMDSv1とIMDSv2の両方利用可能で、
requiredの場合は、IMDSv2のみが利用可能となります。
インスタンスメタデータサービスの設定 - Amazon Elastic Compute Cloud
IMDSv2 の使用を必須にするには
既存インスタンスに対して、インスタンスメタデータのリクエスト時に IMDSv2 の使用を必須にするようにオプトインできます。 modify-instance-metadata-options CLI コマンドを使って、http-tokensパラメータをrequiredに設定できます。http-tokensの値を指定するときに、http-endpointをenabledに設定する必要もあります。