説明
UserData に秘密鍵を Base64 でエンコードして保存しても、簡単に元の値へ戻せます。エンコードは暗号化ではなく、テンプレートやインスタンスのユーザーデータを閲覧できる人に秘密情報が露出するおそれがあります。
想定される影響
露出した鍵が認証に使われている場合、その鍵のアクセス権限を悪用されるおそれがあります。
対処方法
UserData から秘密鍵を削除し、露出した鍵は失効させて置き換えてください。シークレットが必要な場合は、必要最小限の権限を持つインスタンスロールで専用ストアから実行時に取得し、ログやデプロイ成果物に残さないでください。
例
サポートされている起動テンプレートを使う例です。ImageId と互換性のある InstanceType を指定します。変更前の Base64 値は秘密鍵のヘッダーを模した例示用の値で、実際の鍵ではありません。変更後は Fn::Base64 を使い、秘密情報を含まない起動スクリプトをエンコードします。
変更前
json
{
"Parameters": {
"ImageId": {
"Type": "AWS::EC2::Image::Id"
},
"InstanceType": {
"Type": "String"
}
},
"Resources": {
"myLaunchConfig3": {
"Type": "AWS::EC2::LaunchTemplate",
"Properties": {
"LaunchTemplateData": {
"ImageId": {
"Ref": "ImageId"
},
"InstanceType": {
"Ref": "InstanceType"
},
"UserData": "LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpzb21lS2V5"
}
}
}
}
}
変更後
json
{
"Parameters": {
"ImageId": {
"Type": "AWS::EC2::Image::Id"
},
"InstanceType": {
"Type": "String"
}
},
"Resources": {
"myLaunchConfig3": {
"Type": "AWS::EC2::LaunchTemplate",
"Properties": {
"LaunchTemplateData": {
"ImageId": {
"Ref": "ImageId"
},
"InstanceType": {
"Ref": "InstanceType"
},
"UserData": {
"Fn::Base64": "#!/bin/sh\necho bootstrap only\n"
}
}
}
}
}
}