AWS Secrets Manager に複数行の文字列を登録する方法
はじめに
AWS では機密情報を管理するのに AWS Secrets Manager を利用できます。
アクセスキーなどの単一行の情報は GUI や CLI で登録し、 GUI 上で値の確認ができます。
しかし、各種鍵情報などの複数行に渡る文字列データは GUI では登録 / 確認することができません。
このドキュメントでは複数行に渡る文字列データを Secrets Manager に登録し、データの確認をする方法を検証します。
前提
aws
CLI はバージョン 2 系を利用します。
バージョン 1 系では不要だった --cli-binary-format raw-in-base64-out
オプションを追加で設定する必要があります。
▶ aws --version
aws-cli/2.15.28 Python/3.11.8 Darwin/23.2.0 source/arm64 prompt/off
手順
以下の複数行で構成された文字列データを Secrets Manager に格納する手順を示します。
1. お腹空いた
2. 眠たい
3. お金欲しい
-
対象の文字列に改行コードを付与する
CLI 経由で JSON を用いて登録するため、まずは文字列に改行コードを付与します。awk '{printf "%s\\n", $0}' target.txt
このコマンドを実行すると以下のように改行コードが付与された文字列を取得することができます。
1. お腹空いた\n2. 眠たい\n3. お金欲しい\n
-
Secrets Manager に登録する key/value 形式の JSON を作成する
今回は key =body
、 value =1. お腹空いた\n2. 眠たい\n3. お金欲しい\n
の形式で登録したいので、以下の JSON を作成します。target.json{ "body": "1. お腹空いた\n2. 眠たい\n3. お金欲しい\n" }
-
aws
CLI で Secrets Manager に登録する
aws secretsmanager put-secret-value
コマンドで Secrets Manager に値を登録します。あらかじめ
multiline-sample
という名前で Secrets Manager の Secret を作成しておきます。その Secret に対して以下のコマンドで値を登録します。
aws secretsmanager put-secret-value --cli-binary-format raw-in-base64-out --secret-id multiline-sample --secret-binary file://target.json
以下のような結果が返ってきたら正常です。
{ "ARN": "arn:aws:secretsmanager:ap-northeast-1:***:secret:multiline-sample-SxTUYv", "Name": "multiline-sample", "VersionId": "***", "VersionStages": [ "AWSCURRENT" ] }
-
Secrets Manager の値を確認する
上記コマンドを実行後、 GUI で
Retrieve secret value
で値を確認しようとしても以下のようなメッセージが表示されるだけで、登録されている値を確認することはできません。登録されている値を確認するには CLI を利用する必要があります。
以下の CLI を利用することで値を確認することができます。aws secretsmanager get-secret-value --secret-id multiline-sample | jq -r .SecretBinary | base64 -D
登録時に設定した JSON の形式で値を確認することができました。
{ "body": "1. お腹空いた\n2. 眠たい\n3. お金欲しい\n" }
JSON 上では改行コードが残ったままですが、 AWS SDK を利用している場合は SDK 側で改行コードをパースし、複数行の文字列として扱うことができます。
参考リンク
Discussion