はじめに
AWS CDKを使用する時、ARNなどをコードにベタ書きすると、セキュリティ面がいまいちなので、Systems Managerのパラメータストアにセキュアにしたい値を入れて使いたいなと思いました。
もともとはパラメータストアのスタックもCDKのデプロイ時にcontextとかから、渡して作成したいなと思っていたのですが、現状それはできなさそうです。
じゃあどうすればいいのか?
それはAWSのドキュメントに書いてありました。
https://docs.aws.amazon.com/cdk/latest/guide/get_ssm_value.html#ssm_write
どうやらSystems Managerへのパラメータの登録はAWS CLIからのようです。つまりCDKからは厳しそうですね。
パラメータ登録用のスクリプト
CDKでは「必要なパラメータのリストを一覧して、多くのパラメータを一気に登録する」ということができなさそうだったので、登録用のスクリプトを作成しました。
create_parameters.sh
#!/bin/bash
#
# パラメータキーの一覧表示
#
key=("PARA1" "PARA2")
declare -a value
echo "登録が必要なパラメータキー一覧です"
echo
for ((i=0;i<${#key[@]};i++))
do
echo "${key[i]}"
done
#
# パラメータキーの正誤確認
#
while :
do
echo
read -p "パラメータキー一覧は正しいですか?(y/n): " PARAM_CHECK
case "$PARAM_CHECK" in
[yY])
echo
echo "パラメータの値を入力してください"
break
;;
[nN])
echo "パラメータキー一覧の編集をしてください"
exit
;;
*)
echo "yかnのみ入力してください"
esac
done
#
# パラメータ値の入力
#
for ((i=0;i<${#key[@]};i++))
do
read -p "${key[i]}: " VALUE
value[i]=$VALUE
done
echo
echo "入力した値の一覧です"
echo
for ((i=0;i<${#key[@]};i++))
do
echo "${key[i]}: ${value[i]}"
done
#
# パラメータ値の入力内容確認
#
while :
do
echo
read -p "入力した値は正しいですか?(y/n): " VALUE_CHECK
case "$VALUE_CHECK" in
[yY])
echo
read -p "パラメータを登録するAWSプロファイル名を入力してください: " PROFILE
break
;;
[nN])
echo "パラメータの値を入力し直してください"
exit
;;
*)
echo "yかnのみ入力してください"
esac
done
#
# パラメータの登録
#
echo
echo " パラメータを登録しています"
for ((i=0;i<${#key[@]};i++))
do
aws ssm put-parameter --overwrite --name "${key[i]}" --type "SecureString" --value "${value[i]}" --profile $PROFILE
done
echo " 登録が完了しました。"
このshファイル内のkey
リストのところに登録したいパラメータキーを予め入力しておいて
$ sh create_parameters.sh
を実行し、表示された案内に沿って値を入力していけば、パラメータストアに値を登録することができます。(すでに登録されている場合は上書きされます。)