説明
CloudFormation の AWS::Amplify::App で BasicAuthConfig.Password を直接記述したり、パラメータの Default に設定したりすると、アプリを保護するパスワードがコードや履歴に残ります。
想定される影響
露出したユーザー名とパスワードで、Basic Auth が適用されたサイトにアクセスされるおそれがあります。同じパスワードを使い回している環境も影響を受ける可能性があります。
対処方法
パスワードは Secrets Manager から参照し、パラメータの既定値には保存しないでください。露出したパスワードは変更してください。シークレットの値を変えるだけでは Amplify の設定は更新されないため、対象リソースも更新して新しい値を反映してください。
例
RepositoryUrl は GitHub リポジトリの URL、GitHubTokenSecretId は実際の GitHub トークンを token キーに保存したシークレットです。変更後は、Basic Auth 用のパスワードを別途生成します。変更前のパスワードは例示用です。
変更前
yaml
AWSTemplateFormatVersion: '2010-09-09'
Parameters:
RepositoryUrl:
Type: String
GitHubTokenSecretId:
Type: String
Resources:
NewAmpApp1:
Type: AWS::Amplify::App
Properties:
Name: NewAmpApp
Repository: !Ref RepositoryUrl
AccessToken: !Sub '{{resolve:secretsmanager:${GitHubTokenSecretId}:SecretString:token}}'
BasicAuthConfig:
EnableBasicAuth: true
Password: "@skdsjdk0234!AB"
Username: admin
変更後
yaml
AWSTemplateFormatVersion: '2010-09-09'
Parameters:
RepositoryUrl:
Type: String
GitHubTokenSecretId:
Type: String
Resources:
NewAmpApp1:
Type: AWS::Amplify::App
Properties:
Name: NewAmpApp
Repository: !Ref RepositoryUrl
AccessToken: !Sub '{{resolve:secretsmanager:${GitHubTokenSecretId}:SecretString:token}}'
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