はじめる前に
- 必須AWS アカウントを持っていること
- 必須マネジメントコンソールにサインインできること
- あると良い「設定値」と「機密情報(パスワードなど)」は扱い方を分けたほうがよい、という感覚
※ コマンドラインや SSH などの操作は一切ありません。すべてブラウザのコンソール上で完結します。
参照する公式ドキュメント
手順に迷ったときや、用語の意味を確かめたいときに開きましょう。
※ リンク切れの場合は、ページタイトルで検索してください。
背景・シナリオ
プログラムの中に「設定値」——環境名、表示する文言、接続先の URL など——を直接書き込んでしまうと、値を変更したいだけなのに、そのたびにコードを直して、デプロイし直す必要が出てきます。本来は「値」が変わっただけなのに、「コード」まで触らなければならないのは、少し窮屈な状態です。
パラメータストアを使うと、こうした設定値をコードの外側に置いて、後から値だけを変更できるようになります。さらに、パスワードのような見せたくない値は、SecureString という形式で暗号化して保存できます。「ふつうの設定値」と「機密情報」を、保存の仕方からきちんと分けて扱える、という体験が今回のテーマです。
Secrets Manager と何が違うの?
用途は近いですが、パラメータストアは主に「設定値の一元管理」に向いた軽量なサービスで、標準利用なら無料です。Secrets Manager は自動ローテーションなどシークレット運用に特化した機能が豊富ですが有料です。今回はコストを抑えつつ「コードから値を外に出す」という考え方を体感するのに向いています。
String と SecureString の違いは?
String はそのまま保存・表示される文字列です。SecureString は鍵管理サービス(KMS)で暗号化されて保存され、取得時に復号して表示するかどうかを選べます。パスワードなど見せたくない値は SecureString を使います。
パラメータストアに String 型のパラメータと SecureString 型のパラメータを 1 つずつ作成し、それぞれをコンソールから取得して、表示のされ方の違いを確認できる状態にする。
つくる構成
今回はネットワークのような構成図は必要ありません。代わりに、2 つ目に作る SecureString 型パラメータで「タイプ」を選ぶ画面のイメージを示します。実際の画面でも、同じように選択肢の中から目的に合うものを選びます。
タイプ
↳機密性の高い値なので Secure String を選びます
このタイプ選択は、構築の進め方のステップ 3 で実際に操作します。
要件
以下の要件を満たし、2 種類のパラメータを作成して、その違いを確認してください。
| No | 要件 |
|---|---|
| 1 | リージョンは「東京(ap-northeast-1)」を使用する。 |
| 2 | String 型のパラメータを 1 つ作成する(名前自由、例:/myapp/environment、値自由、例:dev)。 |
| 3 | SecureString 型のパラメータを 1 つ作成する(名前自由、例:/myapp/db-password、値自由)。 |
| 4 | 両方のパラメータを「パラメータの詳細」から取得し、SecureString は「値の表示」の切り替えで違いを確認する。 |
構築の進め方
「String を作る → SecureString を作る → それぞれの値を確認する」という順番で進みます。
-
マネジメントコンソールにサインインし、リージョンを東京に合わせる
ブラウザで AWS マネジメントコンソールにサインインし、画面右上のリージョンが「アジアパシフィック(東京)ap-northeast-1」になっていることを確認します。
-
String 型パラメータを 1 つ作成する
画面上部の検索バーに
Systems Managerと入力して開き、左メニューの「パラメータストア」から「パラメータの作成」を選びます。名前と値を自由に決め(例:名前/myapp/environment、値dev)、タイプは「文字列(String)」のまま作成します。名前は名前空間のように使えるパラメータ名に「/」を入れると、後から見たときに整理しやすくなります。詳しくはステップ 3 のあとの補足や、つまずきポイントで触れます。
-
SecureString 型パラメータを 1 つ作成する
同じく「パラメータの作成」から、名前と値を自由に決め(例:名前
/myapp/db-password)、タイプ選択の画面で「Secure String」を選びます。鍵(KMS キー)はデフォルトのままで構いません。タイプ
文字列(String)そのまま保存・表示される、ふつうの文字列文字列リスト(StringList)カンマ区切りで複数の値を 1 つにまとめて保存するSecure String鍵管理サービスで暗号化して保存する↳機密性の高い値なので Secure String を選びます
値は架空のもので十分本物のパスワードを入力する必要はありません。学習用の架空の文字列で構いません。
-
String 型パラメータの詳細を開いて、値を確認する
パラメータストアの一覧から、ステップ 2 で作成したパラメータをクリックし、「値」がステップ 2 で入力したとおりに、そのまま表示されることを確認します。
-
SecureString 型パラメータの詳細を開いて、表示の切り替えを確認する
ステップ 3 で作成したパラメータの詳細を開きます。最初は値がマスクされた状態か、暗号化されたままの表示になっています。「値の表示」のチェックを入れると、復号された元の値が表示されます。チェックを外すと、再びマスクされた表示に戻ることも確認しましょう。
復号には権限が使われている「値の表示」を行うと、裏側では鍵管理サービスを使って値が復号されています。誰でも自由に復号できるわけではなく、パラメータストアと鍵管理サービスへのアクセス権限を持つ人だけが、この操作を行えます。
つまずきポイント
初学者がよく引っかかる箇所を先回りでまとめました。答えそのものは載せていませんが、「どこを見直せばよいか」の手がかりとして使ってください。
「復号された値がどうしても表示されない」
SecureString の値は、最初は暗号化された状態のまま表示されます。詳細画面のどの操作をすると、復号された値に切り替わるかを、もう一度確認してみましょう。チェックボックスのような切り替え要素を探してみてください。
「フォルダのような実体が、どこかに作られているはず」
パラメータ名に含まれる「/」は、フォルダやディレクトリのような実体を作るものではありません。あくまで名前の中の区切り文字であり、パラメータを探しやすく整理するための名前空間としての表記です。一覧の表示や検索のされ方を見比べながら、この違いを確かめてみましょう。
完了チェック
要件の再確認ではなく、画面のどこを見れば達成を確認できるかをまとめました。パラメータストアのコンソールを開いて、次を順に確かめましょう。
- パラメータストアの一覧に、自分が作成した 2 つのパラメータが表示されている。
- 一覧の「タイプ」の列が、それぞれ
StringとSecureStringになっている。 - String 型パラメータの詳細を開くと、値が入力したとおりにそのまま表示されている。
- SecureString 型パラメータの詳細で「値の表示」を切り替えると、復号された値が確認できる。
考えてみよう
手を動かすことに加えて、次の問いに自分の言葉で答えられるようにしておくと、理解がより深まります。
- SecureString を使っても、パラメータストアへのアクセス権限(IAM)が誰にでも開いていたら、それは安全といえるでしょうか。
ヒント
暗号化されていることと、誰がその値にアクセスできるかは、別の話です。値が暗号化されていても、復号する権限を持つ人が多すぎれば、結果として多くの人がパスワードを見られる状態になります。「暗号化」と「アクセス制御」は、それぞれ別の対策として考える必要があります。 - 環境(開発用・本番用など)ごとに、同じような設定値を別の値として持たせたい場合、パラメータ名をどのように工夫できそうでしょうか。
ヒント
「/」で区切った名前空間を使い、/myapp/dev/db-passwordと/myapp/prod/db-passwordのように、環境名を名前の一部に含めることで、同じ役割のパラメータを環境ごとに分けて管理できます。 - アプリのコードを一切変更せずに、設定値だけを切り替えたい場合、パラメータストアはどのように役立つでしょうか。
ヒント
アプリ側は「どのパラメータ名の値を読みに行くか」だけをコードに書いておき、値そのものはパラメータストア側で持つようにすれば、値を変更するだけでアプリの挙動を変えられます。コードを直してデプロイし直す必要がない、という点が利点です。
後片づけ
確認が終わったら、作成した 2 つのパラメータを削除して片づけましょう。
- String 型パラメータを削除する:パラメータストアの一覧から、手順 2 で作成したパラメータ(例:
/myapp/environment)を選び、削除する。 - SecureString 型パラメータを削除する:パラメータストアの一覧から、手順 3 で作成したパラメータ(例:
/myapp/db-password)を選び、削除する。
削除するのは、このハンズオンで自分が作ったものだけ
パラメータストアの一覧には、すでに別の用途で使われているパラメータが並んでいることもあります。間違えて削除しないよう、このハンズオンのために付けた名前のものだけを選んで削除してください。
コストに関する注意: パラメータストアの標準パラメータ・標準スループットでの利用は無料です(高度なパラメータや高頻度の API 呼び出しには料金がかかります)。今回作成した 2 つのパラメータは、いずれも標準パラメータ・標準スループットの範囲内であり、このハンズオンの範囲では課金されることはありません。