質問: ▼ 環境 ・EC2は4台あり、OSはAmazon Linux2である。 ▼ したいこと ・IAMで作成したユーザでEC2にログインしたい。 ・EC2のサーバごとにユーザを作成したりするのがすごく手間だし、 個別で管理するのが難しいため、IAM上で全てのEC2ユーザを管理できれば便利だと思ったため。 ▼ 試したこと ・IAMでユーザ作成し、EC2 FullAccessのロールをアタッチ(インスタンスにもアタッチ) ・AWS CodeCommitのSSHキーを登録し、IAMのユーザ名と公開鍵で接続を試すも接続不可 ▼ 質問内容 ・EC2の複数台サーバのユーザーをIAMで一元管理することは可能でしょうか。 ・また、こちらはAWS内だけで完結できますでしょうか。 「このサービス使うとできますよ」的なアドバイスを頂けると嬉しいです。 できないならできないで、皆様はどのようにユーザ管理されているかなども教えて欲しいです。
回答: @hinaloe さんのコメントや、 ksaito さんの回答を参考に、以下の方針で可能そうです。 ### 方針 * AuthorizedKeysCommand を利用する。 * authorized_keys_command から実行されるプログラムの中で aws コマンドで iam から pubkey を読み込む AuthorizedKeysCommand とは何かというと、 authorized_keys を file に記述するのではなく、プログラムの標準出力でもって指定できる sshd の設定オプションです。 また、 IAM ユーザーは、 ssh の public key をひもづけることができます。これは、主に CodeCommit で用いられますが、今回はこれを上手く利用できるので、これを活用します。 手元では検証できていないですが、これをやることで、各ユーザーが、それぞれの IAM ユーザー名で ssh すると、その IAM ユーザーにひもづいた ssh の公開鍵でもって認証が行われるようになるはずだ、と思っています。 ### やりかた(未検証) /etc/ssh/ssh_config に以下を記述する ``` AuthorizedKeysCommand /etc/ssh/iam-key-finder AuthorizedKeysCommandUser nobody ``` /etc/ssh/iam-key-finder を作成する。 root:root で、 755 で作成しておく。 ``` for key_id in $(aws iam list-ssh-public-keys --user-name "$1" --query 'SSHPublicKeys[].SSHPublicKeyId' --output text) do aws iam get-ssh-public-key --encoding SSH --user-name "$1" --ssh-public-key-id $key_id --query 'SSHPublicKey.SSHPublicKeyBody' --output text done ``` ログインしたいユーザーたちを、対象 ec2 ホスト上で作成しておく。 対象 ec2 に instance profile を指定し、 iam list-ssh-public-keys と get-ssh-public-key の実行権限を与える。