Amplify アプリのアクセストークンの露出

Amplify アプリのアクセストークンをテンプレートに直接記述すると、認証情報がデプロイ用コードや履歴に残ります。

説明

CloudFormation の AWS::Amplify::App の AccessToken は、GitHub リポジトリとの接続を許可する個人用アクセストークンです。値を直接記述したり、パラメータの Default に設定したりすると、認証情報がテンプレートやリポジトリの履歴に残ります。

想定される影響

テンプレートを閲覧できる人がトークンを取得すると、そのトークンの権限で GitHub のリソースにアクセスできるおそれがあります。

対処方法

GitHub が発行したトークンを Secrets Manager に保存し、動的参照で渡してください。パラメータの既定値には含めないでください。露出したトークンは GitHub で失効させ、新しいトークンに置き換えてください。

例

RepositoryUrl に GitHub リポジトリの URL を指定します。変更後は、実際のトークンを token キーに保存した既存の Secrets Manager シークレットの名前または ARN も指定します。以下のトークンは例示用です。ランダムに生成したパスワードは GitHub トークンの代わりにはなりません。

変更前

yaml
AWSTemplateFormatVersion: '2010-09-09'
Parameters:
  RepositoryUrl:
    Type: String
Resources:
  NewAmpApp:
    Type: AWS::Amplify::App
    Properties:
      Name: NewAmpApp
      Repository: !Ref RepositoryUrl
      AccessToken: ghp_EXAMPLE_NOT_A_REAL_GITHUB_TOKEN

変更後

yaml
AWSTemplateFormatVersion: '2010-09-09'
Parameters:
  RepositoryUrl:
    Type: String
  MyAmpAppSecretManagerRotater:
    Type: String
Resources:
  NewAmpApp:
    Type: AWS::Amplify::App
    Properties:
      Name: NewAmpApp
      Repository: !Ref RepositoryUrl
      AccessToken: !Sub '{{resolve:secretsmanager:${MyAmpAppSecretManagerRotater}:SecretString:token}}'

参考資料