説明
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