AWSパラメータストアにSSHの鍵を保存する

2020年7月23日

AWS Parameter Store

パスワードや API のキー情報などを保存するときに利用することが多い AWS Systems Manager パラメータストア 。ここには、改行を含む複数行の文字列も保存することもできます。今回、SSH の秘密鍵をパラメータストアに保存して、EC2 の起動時にユーザデータから取り出す機会がありましたので、設定方法を残しておきます。

目次

  1. パラメータストアに SSH の鍵を保存する
  2. IAM ポリシーを作成する
  3. EC2 インスタンスの中でパラメータストアから SSH の鍵を取り出す

パラメータストアに SSH の鍵を保存する

パラメータストアに SSH の鍵を登録します。以下は AWS マネジメントコンソールから登録しているところです。タイプは「文字列」を選択し、SSH の秘密鍵の情報をコピーして貼り付けます。文字列を暗号化して保存したい場合はタイプを「安全な文字列」KMS キー ID を「alias/aws/ssm」を選択して KMS で暗号化します。

パラメータストアにSSHの鍵を登録

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 ポリシーによってアクセスを制限することもできるので、安全に情報の受け渡しができるストレージとして利用することができます。うまく使ってみてください。

-技術ブログ
-,