AWS_Amplifyの環境変数をパラメータストアで管理する #456
Amplifyではアプリケーション単位で環境変数を設定することが可能ですが、ここにアプリケーションで使用する外部の認証情報をハードコードしてしまうと、Amplifyへアクセス可能な人は誰でもそれを見れてしまいます。
認証情報はできるだけまとめて管理して、かつアクセスできる人を限定した方が良いのは周知の通りなので、今回はパラメータストアで管理して使用する方法についてです。
大きな流れは以下です。
パラメータストアに認証情報を格納する
Amplifyの環境変数でパラメータストアでのパスを持つ
ビルド時に実行するコマンドを定義する「amplify.yml」で、パラメータストアから認証情報を読み込むよう設定する
それぞれ見ていきます。
パラメータストアに認証情報を格納する
AWS Systems Managerの機能の1つであるパラメータストアにアクセスし、「パラメータを作成」をクリックします。
すると以下のような画面になるので、パラメータ名と値を記載して保存するだけです。
![](https://assets.st-note.com/img/1711227907868-hJqlS03Tw7.png?width=1200)
パラメータストアは自体は、スタンダードであれば無料で利用できます。
Amplifyの環境変数を設定する
この作業は必須ではありません。後ほどのamplify.yml内だけで完結することも可能です。ただ、あえて環境変数を持っておくことで、認証情報として何を使っているのか一目で分かりやすくなります。
黒塗りしていますが、例えば以下のように設定します。
![](https://assets.st-note.com/img/1711228756827-P70yiSkSSP.png?width=1200)
1つ留意点として、「すべてのブランチ」と「release/production」と「release/development」には全て同じ値が入っています。
なぜ同じ値をわざわざ分けて持たないといけないかと言うと、使用する値そのものを「値」にハードコードしない場合、ブランチを直接指定しなければうまくいかなかった(パラメータストアから値を引っ張れなかった)ためです。
本来、全ブランチで共通の環境変数であれば「すべてのブランチ」で指定するだけで良いはずですが、、これは後述するamplify.ymlのクセのようなものらしく、理由はよく分かりません。
amplify.ymlでビルド時に認証情報を読み込む設定をする
ビルド時に実行するコマンドをamplify.ymlに定義することが可能です。ここではpreBuildとBuildがあり、認証情報の読み込みはpreBuildで行います。
![](https://assets.st-note.com/img/1711229621458-3lIdHdmBVE.png?width=1200)
preBuildのcommandsでパラメータストアにアクセスしているので、この部分を解説します。
aws ssm get-parameter コマンド
AWS Systems Manager Parameter Storeから特定のパラメータを取得するコマンドです
--with-decryption オプション
保存されているパラメータが暗号化されている可能性があるため、取得時に復号化するオプションです
--query 'Parameter.Value' オプション
取得したパラメータの中から値を抽出するオプションです
--output text オプション
取得した値をテキスト形式で出力するオプションです
このようにすることで、認証情報をよりセキュアに扱うことが可能です。
ここまでお読みいただきありがとうございました!