技術ブログ

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

2020年7月23日

AWS Parameter Store

AWS Systems Manager パラメータストア、便利ですよね。ご存知の方も多いと思います。パラメータストアにはパスワードや API のキー情報などの保存することが多いと思いますが、改行を含む複数行の文字列も保存することもできます。今回、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 ポリシーによってアクセスを制限することもできるので、安全に情報の受け渡しができるストレージとして利用することができます。うまく使ってみてください。

-技術ブログ
-

© 2020 karakaram-blog