こんにちは。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
に設定する必要もあります。