AWS Systems Manager(SSM)のパラメータストアに登録したパラメータをECSの環境変数にセットする!

今回はこのような質問をいただきました。

環境変数に登録されているパスワード系をマスクしたいな…
パスワード系はECSのタスク定義の環境変数にセットしておけばある程度は安全ですが、最近だとSSMのパラメータストアに設定することも多いですよね。
そこで今回はこちらの質問について解説していきます!
SSMのパラメータストアにパラメータを登録する!
まずはAWS Systems Manager(SSM)のパラメータストアにパスワードを登録してみましょう!
SSMのパラメータストアへと進み、「パラメータの作成」をクリック。

以下のように設定して作成します。

- 名前:任意(/案件名/環境/項目名 みたいな感じだとわかりやすいと思います)
- 利用枠:標準
- タイプ:安全な文字列
- KMSキーソース:現在のアカウント
- 値:格納する値(データベースのパスワード等)
環境変数にパラメータのARNを登録する!
作成したパラメータのARNをECSのタスク定義で環境変数にセットします。
パラメータのARNは以下のようになっています。
arn:aws:ssm:[リージョン]:[アカウントID]:parameter[パラメータ名]
以下の条件で作成した場合は次のようなARNとなります。
- リージョン:東京(ap-northeast-1)
- アカウントID:123456789
- パラメータ名:/sample/stg/database_password
arn:aws:ssm:ap-northeast-1:123456789:parameter/sample/stg/database_password
登録するときの注意点としてはValueFromで登録すること!
Valueで登録するとARNがそのままパスワードになっていしまいます。
ECSのタスク実行ロールにSSMへのアクセス権限を追加する!
最後にタスク実行ロールにSSMへのアクセス権限を付与します。
面倒くさければAmazonSSMReadOnlyAccessでも良いと思いますが、必要なパラメータのみアクセスできるようにするのが望ましいですね。

動作確認!
あとは普通にタスクを起動するだけで勝手にARNからパラメータへ変換してくれます!
うまく取得できない場合は環境変数をValueFromで登録しているか、SSMへのアクセス権限は正しいかを確認してみてください。
あとがき
アプリケーション側からSSMのパラメータを呼び出すことはやったことがあったのですが、環境変数に直接セットするのは初めてでした。
今回のような場合は変換処理入れなくてもよいのは楽で良いですね。
せっかく簡単に使えるのでパスワードだけでもSSMに登録しておきたいですね!