【Tips】Run CommandでParameter StoreのSecure String(暗号化した文字列)を参照する

アイキャッチ AWS EC2

森永です。

Run Command使っていますでしょうか。
SSHやRDPしないでコマンドを実行できる最高のサービスです。

AWSでは「Parameter Store」というパラメータをAWS上で保管しておくサービスも提供しており、こちらで保管したパラメータをRun Commandで呼び出すことが可能です。
パラメータはKMSキーを使用して暗号化することも可能で、パスワードやアクセスキーのような情報もSecure Stringとして保管できます。

Secure StringをRun Commandで使用するには少しコツが必要ですのでTipsとして残しておきます。

問題

暗号化していないパラメータの場合、以下のようにパラメータとしてRun Command内で呼び出し可能です。

echo {{ssm:String}} → 実行可
echo {{ssm:SecureString}} → 実行不可

ただし、Secure Stringの場合呼び出す事ができません。
こちらは現在(2017/6/5)Run CommandでSecure Stringの参照がサポートされていないためです。

参考)Systems Manager パラメータの使用 - Amazon EC2 Systems Manager

解決策

CLIでパラメータを取得することは可能ですので、CLIで復号化したパラメータを取得し使用することで解決します。

secureString=`aws ssm get-parameters --names SecureString --with-decryption --region ap-northeast-1 --query Parameters[].Value --output text`
echo $secureString

ポイントとしてはオプション--with-decryptionを付与することです。
これをつけないと暗号化された文字列をそのまま取得することになります。
また、Run Commandを実行するインスタンスには復号化するための権限を付与しておく必要があります。

参考)Systems Manager パラメータへのアクセスの設定 - Amazon EC2 Systems Manager

最後に

Parameter StoreとRun Commandの組み合わせ最高です!
ぜひお試しください!!