설명
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"
}
}
}
}
}
}