AWS EC2インスタンスにSSH可能なユーザーを、IAMユーザーで管理したいということがあると思います。
このエントリでは、EC2へのSSHをIAMユーザーで擬似的に管理する方法を紹介します。
できるだけシンプルに実現するために次のような仕組みを構築します。
- 公開鍵をIAMに登録する
- 公開鍵の取得をEC2に許可するポリシーを作成する
- 公開鍵を取得するシェルスクリプトを作成する
- sshd configのAuthorizedKeysCommandにスクリプトを指定する
以下、それぞれの項目を説明します。
セキュリティの考慮漏れなどあるかもしれないので、使用は自己責任でお願いします。
AWSマネジメントコンソールを開き、IAM > ユーザー > 認証情報 > AWS CodeCommit の SSH キー > SSH パブリックキーのアップロードからユーザーごとに公開鍵をアップロードします。
iam:ListUsers
, iam:ListSSHPublicKeys
, GetSSHPublicKey
を許可するポリシーを作成しEC2にアタッチします。
下記はポリシーの例です。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Action": [
"iam:ListSSHPublicKeys",
"iam:ListUsers",
"iam:GetSSHPublicKey"
],
"Resource": "*"
}
]
}
全てのIAMユーザーの公開鍵を標準出力に列挙します。
ユーザーや鍵が増えるにつれて遅くなる点に注意してください。
また、BOTユーザーなどがいて除外したい場合は、ユーザーにグループを付与して list-users の代わりに get-group を使用します。
その場合はポリシーでiam:GetGroup
も許可します。
#!/bin/sh
for user_name in $(aws iam list-users --query 'Users[].UserName' --output text)
do
for key_id in $(aws iam list-ssh-public-keys --user-name $user_name --query 'SSHPublicKeys[].SSHPublicKeyId' --output text)
do
aws iam get-ssh-public-key --encoding SSH --user-name $user_name --ssh-public-key-id $key_id --query 'SSHPublicKey.SSHPublicKeyBody' --output text
done
done
ファイルはroot:root 755
で作成し/etc/ssh/iam-key-finder
などに配置します。
/etc/ssh/sshd_config
で AuthorizedKeysCommand
, AuthorizedKeysCommandUser
を設定し、sshd を再起動します。
AuthorizedKeysCommand /etc/ssh/iam-key-finder
AuthorizedKeysCommandUser nobody
iam-key-finder での鍵の取得に少し時間がかかりますが、SSHログインできれば成功です。
以上です。
このエントリでは、EC2へのSSHをIAMユーザーで擬似的に管理する方法を紹介しました。
コメントを送る
コメントはブログオーナーのみ閲覧できます