概要
Amplify override authで認証情報を設定する際、ソースコードに認証情報を書くわけにはいかず、Gitに含めるわけにもいかず、環境ごとに自動で値が設定されるようにしたいということがあります。その場合、Secrets Managerを使用することができます。
Amplify override authでSecrets Managerを参照させる方法
こちらの記事に詳しく書かれていたため、こちらを参照ください。
下記のように書くことになるかと思います。
import { AmplifyAuthCognitoStackTemplate, getProjectInfo } from '@aws-amplify/cli-extensibility-helper'
export function override(resources: AmplifyAuthCognitoStackTemplate) {
const serviceName = 'abc' // サービスの名前(お好きに)
const providerName = 'xyz' // プロバイダの名前(お好きに)
const { envName, projectName } = getProjectInfo()
const secretName = `${serviceName}/${envName}/${providerName}` // お好きに
resources.addCfnResource(
{
// 中略
properties: {
// 中略
ProviderDetails: {
client_id: `{{resolve:secretsmanager:${secretName}:SecretString:PROVIDER_CLIENT_ID}}`,
client_secret: `{{resolve:secretsmanager:${secretName}:SecretString:PROVIDER_CLIENT_SECRET}}`,
// 中略
},
// 中略
},
},
// 中略
)
}
Secrets Managerに認証情報をセットする方法
こちらが本題ですが、Secrets Managerに認証情報をセットするためのコマンドです。
ENV="<環境名>"
PROFILE="<AWSプロファイル名>"
SERVICE_NAME="abc"
PROVIDER_NAME="xyz"
echo '{"PROVIDER_CLIENT_ID": "<CLIENT ID>","PROVIDER_CLIENT_SECRET": "<CLIENT SECRET>"}' > secret.json
SECRET_NAME="$SERVICE_NAME/$ENV/$PROVIDER_NAME"
aws secretsmanager create-secret --name "$SECRET_NAME" --description "$SERVICE_NAME $ENV $PROVIDER_NAME SECRET" --secret-string file://secret.json --profile "$PROFILE"
新しい環境を作成するたびにこちらを事前に実行する必要があります。
参考
Amplify override authでSecrets Managerの値を取得する
AWS CloudFormation リソースの AWS Secrets Manager シークレットを取得する
バージョン情報
% amplify -v
12.10.1