설명
CloudFormation의 AWS::DocDB::DBCluster에서 MasterUserPassword를 직접 쓰거나 파라미터의 Default에 저장하면 마스터 계정 비밀번호가 템플릿과 저장소 이력에 남습니다.
잠재적 영향
클러스터에 연결할 수 있는 사람이 비밀번호를 얻으면 마스터 계정 권한으로 데이터를 조회·변경·삭제할 수 있습니다.
해결 방법
비밀번호를 기본값 없이 안전하게 전달하거나 DocumentDB의 Secrets Manager 기반 비밀번호 관리를 사용하세요. 파라미터에는 NoEcho: true를 설정하고 값을 출력·로그에 남기지 마세요. 노출된 비밀번호는 클러스터에서 교체하고 애플리케이션의 접속 정보도 갱신하세요.
예시
신규 클러스터의 자격 증명 전달 방식을 비교합니다. 기존 서브넷 그룹과 지원되는 엔진 버전을 입력하며, DB 인스턴스와 접근 제어는 별도로 구성합니다. 변경 후 비밀번호는 8~100자의 출력 가능한 ASCII 문자로 입력하되 /, ", @는 사용할 수 없습니다. 변경 전 비밀번호는 예시입니다.
변경 전
yaml
AWSTemplateFormatVersion: '2010-09-09'
Parameters:
DBSubnetGroupName:
Type: String
EngineVersion:
Type: String
Resources:
NewAmpApp:
Type: AWS::DocDB::DBCluster
Properties:
BackupRetentionPeriod: 8
DBClusterIdentifier: sample-cluster
DBSubnetGroupName: !Ref DBSubnetGroupName
EngineVersion: !Ref EngineVersion
DeletionProtection: true
MasterUsername: docdbadmin
MasterUserPassword: "asDjskjs73!!"
Port: 27017
PreferredBackupWindow: 07:34-08:04
PreferredMaintenanceWindow: sat:04:51-sat:05:21
StorageEncrypted: true
변경 후
yaml
AWSTemplateFormatVersion: '2010-09-09'
Parameters:
ParentMasterPassword:
Type: String
NoEcho: true
MinLength: 8
MaxLength: 100
DBSubnetGroupName:
Type: String
EngineVersion:
Type: String
Resources:
NewAmpApp:
Type: AWS::DocDB::DBCluster
Properties:
BackupRetentionPeriod: 8
DBClusterIdentifier: sample-cluster
DBSubnetGroupName: !Ref DBSubnetGroupName
EngineVersion: !Ref EngineVersion
DeletionProtection: true
MasterUsername: docdbadmin
MasterUserPassword: !Ref ParentMasterPassword
Port: 27017
PreferredBackupWindow: 07:34-08:04
PreferredMaintenanceWindow: sat:04:51-sat:05:21
StorageEncrypted: true