{
"schemaVersion": "2.2",
"description": "Enforce IMDSv2 on EC2 instances",
"mainSteps": [
{
"action": "aws:runShellScript",
"name": "enforceIMDSv2",
"inputs": {
"runCommand": [
"#!/bin/bash",
"INSTANCE_ID=$(curl -s <http://169.254.169.254/latest/meta-data/instance-id>)",
"HTTP_TOKENS=$(aws ec2 describe-instances --instance-ids $INSTANCE_ID --query 'Reservations[0].Instances[0].MetadataOptions.HttpTokens' --region ap-northeast-2 --output text)",
"echo \\"Current HttpTokens: $HTTP_TOKENS\\"",
"if [ \\"$HTTP_TOKENS\\" = \\"optional\\" ]; then",
" echo 'IMDSv1 detected, switching to IMDSv2'",
" aws ec2 modify-instance-metadata-options --instance-id $INSTANCE_ID --http-tokens required --http-endpoint enabled --region ap-northeast-2",
"else",
" echo 'IMDSv2 already in use or not applicable'",
"fi"
]
}
}
]
}
aws ssm create-document \\
--name "EnforceIMDSv2" \\
--content file://enforce-imdsv2.json \\
--document-type "Command"
aws ssm delete-document --name EnforceIMDSv2 --region ap-northeast-2