🔏

AWS ECS/Batch など環境変数経由で機密情報を取得する際は改行に要注意

2022/12/05に公開

問題

AWS Systems Manager Parameter Store に格納した機密情報は、事前に設定をしておくと ECS や Batch から環境変数としてアクセスできます。手軽で便利ですね。

しかし、機密情報(の文字列)に改行が含まれていると取り出した時に値が変わってしまい、期待する利用ができません。

具体的な例としては SSH の認証鍵があります。

原因

Parameter Store の値を環境変数を経由して取得すると、改行が半角スペースに変換されているためです。

AWS CLI での取得やマネージドコンソールの表示ではきちんと改行が含まれて表示されているのですが、テスト用の鍵(の内容の文字列)を登録し、出力して分かりました。

Secret Manager でも同じ現象が発生するかもしれません。

対応

機密情報の文字列を BASE64 でエンコードして Parameter Store に格納し、取り出してから利用する前にデコードします。

次は base64 コマンドで鍵ファイル /path/to/file をエンコードする例です。この出力結果を Parameter Store に格納します。

% base64 /path/to/file

次は格納した機密情報を環境変数 SSH_KEY_BASE64_ENCODED として取得した場合に、/path/to/file に保存している例です。格納時と実行時では環境が違うはずなので、同じファイルパスにしています。

% echo $SSH_KEY_BASE64_ENCODED | base64 -d > /path/to/file

あるいは、環境変数を経由せずに AWS CLI から取得すれば格納時のエンコードも不要です。ただし、手軽さは失われます。

Discussion