Amplify ブランチの Basic Auth パスワードの露出

Amplify ブランチの Basic Auth パスワードをテンプレートに直接記述すると、ブランチを保護する認証情報がコードに残ります。

説明

CloudFormation の AWS::Amplify::Branch で BasicAuthConfig.Password を直接記述したり、パラメータの Default に設定したりすると、ブランチを保護するパスワードがテンプレートや履歴に残ります。

想定される影響

ユーザー名とパスワードが露出すると、保護されたブランチのサイトに不正アクセスされるおそれがあります。同じパスワードを使い回している他のブランチも影響を受ける可能性があります。

対処方法

パスワードは Secrets Manager から参照し、パラメータの既定値には保存しないでください。露出したパスワードは変更し、Amplify ブランチのリソースも更新して新しい値を反映してください。シークレットの値を変えるだけでは、ブランチの設定は更新されません。

例

AmplifyAppId に既存アプリの ID、BranchName に対象ブランチ名を指定します。変更前のパスワードは例示用です。変更後は Basic Auth 用のパスワードを別途生成し、参照します。

変更前

yaml
AWSTemplateFormatVersion: '2010-09-09'
Parameters:
  AmplifyAppId:
    Type: String
  BranchName:
    Type: String
Resources:
  NewAmpApp1:
    Type: AWS::Amplify::Branch
    Properties:
      AppId: !Ref AmplifyAppId
      BranchName: !Ref BranchName
      EnableAutoBuild: false
      EnablePerformanceMode: false
      EnablePullRequestPreview: false
      BasicAuthConfig:
        EnableBasicAuth: true
        Password: "@skdsjdk0234!AB"
        Username: admin

変更後

yaml
AWSTemplateFormatVersion: '2010-09-09'
Parameters:
  AmplifyAppId:
    Type: String
  BranchName:
    Type: String
Resources:
  NewAmpApp1:
    Type: AWS::Amplify::Branch
    Properties:
      AppId: !Ref AmplifyAppId
      BranchName: !Ref BranchName
      EnableAutoBuild: false
      EnablePerformanceMode: false
      EnablePullRequestPreview: false
      BasicAuthConfig:
        EnableBasicAuth: true
        Password: !Sub '{{resolve:secretsmanager:${MyAmpAppSecretManagerRotater}:SecretString:password}}'
        Username: !Sub '{{resolve:secretsmanager:${MyAmpAppSecretManagerRotater}:SecretString:username}}'
  MyAmpAppSecretManagerRotater:
    Type: AWS::SecretsManager::Secret
    Properties:
      GenerateSecretString:
        SecretStringTemplate: '{"username": "admin"}'
        GenerateStringKey: password
        PasswordLength: 16

参考資料