평문 마스터 비밀번호가 포함된 DocumentDB 클러스터

DocumentDB 마스터 비밀번호를 템플릿과 파라미터 기본값에서 분리하세요.

설명

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

참조