🔏
AWS ECS/Batch など環境変数経由で機密情報を取得する際は改行に要注意
問題
AWS Systems Manager Parameter Store に格納した機密情報は、事前に設定をしておくと ECS や Batch から環境変数としてアクセスできます。手軽で便利ですね。
- AWS Launches Secrets Support for Amazon Elastic Container Service
- ECSでごっつ簡単に機密情報を環境変数に展開できるようになりました! | DevelopersIO
- Systems Manager Parameter Store を使用して機密データを指定する - AWS 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