AWS_Amplifyの環境変数をパラメータストアで管理する #456

Amplifyではアプリケーション単位で環境変数を設定することが可能ですが、ここにアプリケーションで使用する外部の認証情報をハードコードしてしまうと、Amplifyへアクセス可能な人は誰でもそれを見れてしまいます。

認証情報はできるだけまとめて管理して、かつアクセスできる人を限定した方が良いのは周知の通りなので、今回はパラメータストアで管理して使用する方法についてです。

大きな流れは以下です。

  1. パラメータストアに認証情報を格納する

  2. Amplifyの環境変数でパラメータストアでのパスを持つ

  3. ビルド時に実行するコマンドを定義する「amplify.yml」で、パラメータストアから認証情報を読み込むよう設定する

それぞれ見ていきます。

パラメータストアに認証情報を格納する

AWS Systems Managerの機能の1つであるパラメータストアにアクセスし、「パラメータを作成」をクリックします。

すると以下のような画面になるので、パラメータ名と値を記載して保存するだけです。

パラメータストアは自体は、スタンダードであれば無料で利用できます。

Amplifyの環境変数を設定する

この作業は必須ではありません。後ほどのamplify.yml内だけで完結することも可能です。ただ、あえて環境変数を持っておくことで、認証情報として何を使っているのか一目で分かりやすくなります。

黒塗りしていますが、例えば以下のように設定します。

1つ留意点として、「すべてのブランチ」と「release/production」と「release/development」には全て同じ値が入っています。

なぜ同じ値をわざわざ分けて持たないといけないかと言うと、使用する値そのものを「値」にハードコードしない場合、ブランチを直接指定しなければうまくいかなかった(パラメータストアから値を引っ張れなかった)ためです。

本来、全ブランチで共通の環境変数であれば「すべてのブランチ」で指定するだけで良いはずですが、、これは後述するamplify.ymlのクセのようなものらしく、理由はよく分かりません。

amplify.ymlでビルド時に認証情報を読み込む設定をする

ビルド時に実行するコマンドをamplify.ymlに定義することが可能です。ここではpreBuildとBuildがあり、認証情報の読み込みはpreBuildで行います。

preBuildのcommandsでパラメータストアにアクセスしているので、この部分を解説します。

aws ssm get-parameter コマンド

AWS Systems Manager Parameter Storeから特定のパラメータを取得するコマンドです

--with-decryption オプション

保存されているパラメータが暗号化されている可能性があるため、取得時に復号化するオプションです

--query 'Parameter.Value' オプション

取得したパラメータの中から値を抽出するオプションです

--output text オプション

取得した値をテキスト形式で出力するオプションです


このようにすることで、認証情報をよりセキュアに扱うことが可能です。
ここまでお読みいただきありがとうございました!

参考


この記事が気に入ったらサポートをしてみませんか?