パスワードや API のキー情報などを保存するときに利用することが多い AWS Systems Manager パラメータストア 。ここには、改行を含む複数行の文字列も保存することもできます。今回、SSH の秘密鍵をパラメータストアに保存して、EC2 の起動時にユーザデータから取り出す機会がありましたので、設定方法を残しておきます。
目次
パラメータストアに SSH の鍵を保存する
パラメータストアに SSH の鍵を登録します。以下は AWS マネジメントコンソールから登録しているところです。タイプは「文字列」を選択し、SSH の秘密鍵の情報をコピーして貼り付けます。文字列を暗号化して保存したい場合はタイプを「安全な文字列」KMS キー ID を「alias/aws/ssm」を選択して KMS で暗号化します。
AWS CLI から登録する場合は以下のようなコマンドで。
PRIVATE_KEY=$(cat ~/.ssh/id_rsa)
aws ssm put-parameter --name my_ssh_private_key --value "$PRIVATE_KEY"
KMS で暗号化する場合は --type SecureString
オプションをつけます
PRIVATE_KEY=$(cat ~/.ssh/id_rsa)
aws ssm put-parameter --name my_ssh_private_key --value "$PRIVATE_KEY" --type SecureString
IAM ポリシーを作成する
このあと EC2 インスタンスの中で aws ssm get-parameter
コマンドを使って SSH の鍵を取り出すので、IAM ポリシーを使用して Systems Manager パラメータへのアクセスを制限する - AWS Systems Manager を参考に IAM ポリシーを作成して EC2 用のロールにアタッチします。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssm:GetParameter"
],
"Resource": "arn:aws:ssm:<region>:<account-id>:parameter/my_ssh_private_key"
}
]
}
EC2 インスタンスの中でパラメータストアから SSH の鍵を取り出す
上記ポリシーがアタッチされた IAM ロールを指定して EC2 を起動し、以下のコマンドでパラメータストアから秘密鍵を取り出します。
aws ssm get-parameter --name my_ssh_private_key --query Parameter.Value --output text
KMS で暗号化している場合は --with-decryption
オプションを使います。
aws ssm get-parameter --name my_ssh_private_key --query Parameter.Value --with-decryption --output text
ファイルに保存する場合はこんな感じで。
aws ssm get-parameter --name my_ssh_private_key --query Parameter.Value --output text > /root/.ssh/id_rsa
chmod 600 /root/.ssh/id_rsa
おわりに
AWS Systems Manager のパラメータストアに SSH の秘密鍵を保存して、EC2 で取り出す例を紹介しました。パラメータストアの情報は IAM ポリシーによってアクセスを制限することもできるので、安全に情報の受け渡しができるストレージとして利用することができます。うまく使ってみてください。