평문 비밀번호가 포함된 DMS 엔드포인트

DMS 엔드포인트 비밀번호를 템플릿이나 파라미터 기본값에 저장하지 마세요.

설명

CloudFormation의 AWS::DMS::Endpoint에서 Password를 직접 쓰거나 파라미터의 Default에 넣으면 원본 또는 대상 데이터 저장소의 접속 비밀번호가 코드와 이력에 남습니다.

잠재적 영향

노출된 계정 정보와 데이터베이스 연결 경로가 있으면, 해당 계정의 권한 범위에서 데이터에 비인가 접근이 발생할 수 있습니다.

해결 방법

비밀번호를 템플릿 밖에서 안전하게 전달하세요. 파라미터를 사용하면 기본값을 두지 않고 NoEcho: true를 설정하며, 값을 로그·출력에 남기지 마세요. 지원되는 엔드포인트에서는 Secrets Manager 연동도 사용할 수 있습니다. 비밀번호가 노출됐다면 데이터베이스 계정과 DMS 연결 정보를 함께 갱신하고 연결을 확인하세요.

예시

PostgreSQL 원본 엔드포인트 예시입니다. 서버, 데이터베이스 이름, 사용자 이름을 실제 환경에 맞게 입력하세요. 변경 후에는 기존 계정의 비밀번호를 ParentMasterPassword로 안전하게 전달합니다. 예시 비밀번호를 실제 환경에서 사용하지 마세요.

변경 전

yaml
AWSTemplateFormatVersion: '2010-09-09'
Parameters:
  DatabaseServer:
    Type: String
  DatabaseName:
    Type: String
  ParentMasterUsername:
    Type: String
Resources:
  DMSEndpoint1:
    Type: AWS::DMS::Endpoint
    Properties:
      EndpointType: source
      EngineName: postgres
      DatabaseName: !Ref DatabaseName
      Password: "asDjskjs73!!"
      Port: 5432
      ServerName: !Ref DatabaseServer
      Username: !Ref ParentMasterUsername
      SslMode: require

변경 후

yaml
AWSTemplateFormatVersion: '2010-09-09'
Parameters:
  ParentMasterPassword:
    Type: String
    NoEcho: true
  DatabaseServer:
    Type: String
  DatabaseName:
    Type: String
  ParentMasterUsername:
    Type: String
Resources:
  DMSEndpoint1:
    Type: AWS::DMS::Endpoint
    Properties:
      EndpointType: source
      EngineName: postgres
      DatabaseName: !Ref DatabaseName
      Password: !Ref ParentMasterPassword
      Port: 5432
      ServerName: !Ref DatabaseServer
      Username: !Ref ParentMasterUsername
      SslMode: require

참조