AWSアカウント内の全EC2インスタンスの利用可能IMDSバージョンを確認するためのPythonスクリプト
こんにちは。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
に設定する必要もあります。