🌊

AWS Secrets Manager に複数行の文字列を登録する方法

2024/03/13に公開

はじめに

AWS では機密情報を管理するのに AWS Secrets Manager を利用できます。
https://aws.amazon.com/jp/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 に格納する手順を示します。

target.txt
1. お腹空いた
2. 眠たい
3. お金欲しい
  1. 対象の文字列に改行コードを付与する
    CLI 経由で JSON を用いて登録するため、まずは文字列に改行コードを付与します。

    awk '{printf "%s\\n", $0}' target.txt
    

    このコマンドを実行すると以下のように改行コードが付与された文字列を取得することができます。

    1. お腹空いた\n2. 眠たい\n3. お金欲しい\n
    
  2. Secrets Manager に登録する key/value 形式の JSON を作成する
    今回は key = body 、 value = 1. お腹空いた\n2. 眠たい\n3. お金欲しい\n の形式で登録したいので、以下の JSON を作成します。

    target.json
    {
        "body": "1. お腹空いた\n2. 眠たい\n3. お金欲しい\n"
    }
    
  3. 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"
        ]
    }
    
  4. 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 側で改行コードをパースし、複数行の文字列として扱うことができます。

参考リンク

https://dev.classmethod.jp/articles/manage-binary-secrets-with-aws-secrets-manager/
https://blog.serverworks.co.jp/cli-invalid-base64

Discussion