🎉

【検証】AWS EC2 Instance ConnectでSSHユーザー情報をIAMと紐付けて管理する

2023/05/08に公開

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/Connect-using-EC2-Instance-Connect.html

AWS EC2環境において、SSHアカウント管理に関して色々考えてたところ
これを使えば、IAMベースでSSH接続を管理できそう!ということで、試してみる。
今回は個別SSH鍵を登録して利用するパターンで検証です!

結論

ドキュメント通りやればできる!

作業的なログ

  1. EC2インスタンス建てる(セットアップ)
    https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2-instance-connect-set-up.html
    テスト環境なのでAmazonLinux2を採用。最小限なのでt2.microで
    ネットワークもインターネットへのアクセスができるように配置する
sudo yum install ec2-instance-connect

実行したら既に入ってた!のでそのままスキップ
あとで使うので、Tagに eci:true を追加しておく

  1. ログインが必要なIAMユーザーを作成
    AWS ConsoleからテストIAMユーザー(s.otani.iam)を作成し、ポリシーをアタッチ
    EC2のタグでアクセス管理(eci:trueのインスタンス & IAMのusernameでのみログイン)ができるようにしてます。
{ 
   "Version":"2012-10-17",
   "Statement":[ 
      { 
         "Effect":"Allow",
         "Action":"ec2-instance-connect:SendSSHPublicKey",
         "Resource": "arn:aws:ec2:ap-northeast-1:[account-id]:instance/*",
         "Condition":{ 
            "StringEquals":{ 
               "aws:ResourceTag/eic":true,
	       "ec2:osuser": "${aws:username}"
            }
         }
      },
      {
        "Effect": "Allow",
        "Action": "ec2:DescribeInstances",
        "Resource": "*"
      }
   ]
}
  1. SSH鍵を作成してパブリッシュしてみる

てきとーに鍵作成

ssh-keygen -t rsa -f my_key

公開鍵をSend

s.otani@ ~ % aws ec2-instance-connect send-ssh-public-key \
    --region ap-northeast-1 \
    --instance-id i-EXAMPLE_INSTANCE \
    --instance-os-user s.otani.iam \ # IAMのユーザー名
    --ssh-public-key file://my_key.pub # 作成した公開鍵    
{
    "RequestId": "idididididididididididididididid",
    "Success": true
}
  1. sshでアクセス
    OK! ログイン完了!
s.otani@ ~ % ssh -o "IdentitiesOnly=yes" -i my_key s.otani.iam@xx.xx.xx.xx
Enter passphrase for key 'my_key':
Last login: Mon May  8 10:25:44 2023 from hogehogehogehoge.net

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/
5 package(s) needed for security, out of 17 available
Run "sudo yum update" to apply all updates.
[s.otani.iam@ip-xxx-xx-x-xx ~]$

おつかれさまでした!!

もちろん。Linuxユーザーが存在していないと鍵を送ってもSSH段階ではじかれます

s.otani@ ~ % ssh -o "IdentitiesOnly=yes" -i my_key s.otani.iam2@xx.xx.xx.xx
s.otani.iam2@xx.xx.xx.xx: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

Discussion