シークレット
シークレットは、OAuth トークン、シークレットキー、API キーなどの機密情報です。これらの情報はアプリケーションコードでは必要ですが、 ソースコードにコミットするべきではありません。AWS Copilot CLI では、シークレットは環境変数として渡されますが、その機密性のため扱いが異なります (詳細は環境変数を使った開発を参照して下さい) 。
シークレットの追加方法
シークレットを追加するには、シークレットを AWS Systems Manager パラメータストア (SSM) 、 または AWS Secrets Manager に保存する必要があります。そして、SSM パラメータへの参照を Manifest に追加します。
copilot secret init
コマンドを利用することで、SSM に簡単に SecureString
としてシークレットを作成できます!
Attention
Request-Driven Web Service はシークレットの利用をサポートしていません。
Copilot の外部で作成したシークレットの取り込み
SSM の場合
Copilot の外部で作成したシークレットを持ち込みたい場合、そのシークレットに次の2つのタグを設定することを忘れないようにしてください。
Key | Value |
---|---|
copilot-application |
このシークレットを利用したい Copilot Application 名 |
copilot-environment |
このシークレットを利用したい Copilot Environment 名 |
上記の copilot-application
と copilot-environment
タグは、Copilot が持ち込みシークレットへのアクセスを適切に制御するために必要となります。
GH_WEBHOOK_SECRET
という名前で値に secretvalue1234
を持つ(適切にタグが設定された)SSM パラメータがあると仮定しましょう。このシークレットを Manifest ファイルから参照するには、次のような内容を Manifest に記述することになります。
secrets:
GITHUB_WEBHOOK_SECRET: GH_WEBHOOK_SECRET
更新された Manifest をデプロイすると、Service や Job は環境変数 GITHUB_WEBHOOK_SECRET
にアクセスできるようになります。この環境変数には、SSM パラメータ GH_WEBHOOK_SECRET
の値である secretvalue1234
が格納されます。
これが機能するのは、ECS エージェントがタスクの開始時に SSM パラメータを解決し、環境変数を設定してくれるためです。
Secrets Manager の場合
SSM と同様に、最初に Secrets Manager のシークレットに、copilot-application
と copilot-environment
のタグがあることを確認します。
次の構成の Secrets Manager のシークレットがあるとします。
Field | Value |
---|---|
Name | mysql |
ARN | arn:aws:secretsmanager:us-west-2:111122223333:secret:demo/test/mysql-Yi6mvL |
Value | {"engine": "mysql","username": "user1","password": "i29wwX!%9wFV","host": "my-database-endpoint.us-east-1.rds.amazonaws.com","dbname": "myDatabase","port": "3306" } |
Tags | copilot-application=demo , copilot-environment=test |
Manifest を次の様に変更します。
secrets:
# (推奨) オプション 1. 名前を使ってシークレットを参照します。
DB:
secretsmanager: 'mysql'
# JSON blob 内の特定のキーを参照できます。
DB_PASSWORD:
secretsmanager: 'mysql:password::'
# 事前に定義された環境変数を利用して、Manifest を簡潔に保つ事ができます。
DB_PASSWORD:
secretsmanager: 'mysql:password::'
# オプション 2. 別の方法として、ARN によってシークレットを指定することができます。
DB: "'arn:aws:secretsmanager:us-west-2:111122223333:secret:demo/test/mysql-Yi6mvL'"