설명
CloudFormation 템플릿에 액세스 키의 비밀값이나 비밀번호를 직접 넣으면 템플릿과 저장소 이력의 접근자가 값을 확인할 수 있습니다. 유출된 값은 해당 자격 증명에 허용된 AWS 또는 외부 서비스 작업에 악용될 수 있습니다.
S3 파일을 가져오는 cfn-init 인증에는 인스턴스 프로파일에 포함된 역할을 roleName으로 지정할 수 있습니다. 비밀값을 NoEcho 입력으로 바꾸더라도 Metadata나 Outputs에 노출하면 보호되지 않습니다.
잠재적 영향
- 비밀값 유출로 허용된 리소스에 대한 무단 작업이 발생할 수 있습니다.
- 여러 환경에서 값을 재사용하면 교체와 영향 범위 확인이 어려워질 수 있습니다.
해결 방법
S3 접근에는 최소 권한의 인스턴스 역할과 roleName을 사용하세요. 다른 비밀값은 해당 속성에서 지원되는 참조나 실행 시 조회 방식으로 전달하고 로그·메타데이터 노출을 막으세요. 실제 유출이 확인된 자격 증명은 폐기·교체하고 사용 이력을 조사하세요.
예시
인증 설정의 발췌입니다. AMI 등 인스턴스 속성과 cfn-init 실행·파일 설정은 별도로 구성하세요. WebServerRole은 WebServerInstanceProfile에 포함된 실제 역할이며 필요한 S3 권한을 가져야 합니다.
변경 전
yaml
Resources:
WebServer:
Type: AWS::EC2::Instance
Metadata:
AWS::CloudFormation::Authentication:
S3AccessCreds:
type: S3
accessKeyId: AKIAIOSFODNN7EXAMPLE
secretKey: very-secret-value
예시 액세스 키와 비밀 키가 메타데이터에 직접 들어 있습니다. 운영 자격 증명을 이런 방식으로 저장하지 마세요.
변경 후
yaml
Resources:
WebServer:
Type: AWS::EC2::Instance
Metadata:
AWS::CloudFormation::Authentication:
S3AccessCreds:
type: S3
roleName: !Ref WebServerRole
Properties:
IamInstanceProfile: !Ref WebServerInstanceProfile
인스턴스 프로파일의 역할을 S3 인증에 사용합니다. cfn-init의 파일이나 원본 설정에서 이 인증 구성을 연결하고 정적 키 없이 접근되는지 확인하세요.