CloudFormation 템플릿에 자격 증명 직접 포함

CloudFormation 템플릿의 비밀값을 제거하고 용도에 맞는 역할·비밀 관리 방식을 사용하세요.

설명

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의 파일이나 원본 설정에서 이 인증 구성을 연결하고 정적 키 없이 접근되는지 확인하세요.

참조