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

参考資料