44316
▼ 環境  
・EC2は4台あり、OSはAmazon Linux2である。

▼ したいこと  
・IAMで作成したユーザでEC2にログインしたい。  
・EC2のサーバごとにユーザを作成したりするのがすごく手間だし、  
個別で管理するのが難しいため、IAM上で全てのEC2ユーザを管理できれば便利だと思ったため。

▼ 試したこと  
・IAMでユーザ作成し、EC2 FullAccessのロールをアタッチ（インスタンスにもアタッチ）  
・AWS CodeCommitのSSHキーを登録し、IAMのユーザ名と公開鍵で接続を試すも接続不可

▼ 質問内容  
・EC2の複数台サーバのユーザーをIAMで一元管理することは可能でしょうか。  
・また、こちらはAWS内だけで完結できますでしょうか。

「このサービス使うとできますよ」的なアドバイスを頂けると嬉しいです。  
できないならできないで、皆様はどのようにユーザ管理されているかなども教えて欲しいです。
CC BY-SA 3.0
2018-04-19T03:01:13.517
43370
2018-05-28T04:19:43.433
20868
question
aws amazon-ec2
AWS EC2のユーザをIAMで一元管理したい
IAMユーザにアップロードしたssh公開鍵をaws cliで参照して$HOME/.sshに設定する方法はどうでしょうか。

IAMユーザにSSH公開鍵は登録済みということですので、下記の一連のコマンドで登録済みのSSH公開鍵が取得できます。  
この例では、`iam-user1`というIAMユーザのSSH公開鍵を取得します。

```

    $ IAMUSER=iam-user1
    $ KEYID=$(aws iam list-ssh-public-keys --user-name $IAMUSER --query 'SSHPublicKeys[].SSHPublicKeyId' --output text)
    $ aws iam get-ssh-public-key --encoding SSH --user-name $IAMUSER --ssh-public-key-id $KEYID --query 'SSHPublicKey.SSHPublicKeyBody' --output text
    ssh-rsa AAAA...
    $
    
```

これを$HOME/.ssh/authorized_keysに登録します。
CC BY-SA 3.0
2018-04-19T08:45:02.240
43381
2018-04-19T10:36:22.527
2018-04-19T10:36:22.527
5285
5285
43370
answer
@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
の実行権限を与える。
CC BY-SA 4.0
2018-05-28T04:19:43.433
44316
2018-05-28T04:19:43.433
754
43370
answer