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