EC2 Instance Connect
AWSのサービスで、EC2へのssh接続をIAMで管理する仕組み。
2020/07/28時点
AWS公式ドキュメント
EC2のSSHアクセスをIAMで制御できるEC2 Instance Connectが発表されました | Developers.IO
この仕組みを使うと、管理下にある任意の(daemon設定済みの)EC2インスタンスに事前のssh鍵登録なしで接続できます。
例えば、インフラチームでEC2インスタンスを作成して、複数の開発チームにインスタンスを渡している場合などで、急にsshアクセスする必要がでた時などに使えます。
あと、インスタンスをキーペア無しで起動してもEC2InstanceConnectで接続できるので、鍵の管理とか考えなくてよくて楽。
EC2のSSHアクセスをIAMで制御できるEC2 Instance Connectが発表されました | Developers.IO
全体の概要は以下のような流れでログインします。ユーザーは自分のローカルマシンからログインできますし、Management Consoleからもログイン可能です。
1.クライアントで公開鍵/秘密鍵のペアを生成する。
2. EC2 Instance ConnectのAPI (SendSSHPublicKey) で公開鍵を登録する。
3. EC2 Instance Connectが対象EC2のInstance Metadataに公開鍵を60秒間保存する。
4. EC2上のEC2 Instance ConnectのエージェントがInstance Metadataから公開鍵を取得してsshdに登録する。
5. クライアントから秘密鍵でEC2に対してSSHでログインする。
https://cdn-ssl-devio-img.classmethod.jp/wp-content/uploads/2019/06/Untitled-35.png
上記記事にも手順がありますが、2020/07/28に自分でやってみた手順も以下にメモします。
1. IAMに権限を付ける
ユーザーにアクセス権を設定する
https://gyazo.com/7b99c45a973bc0abc4e165494fba155b
既存のポリシーを直接アタッチ
EC2InstanceConnect を設定する
AdministratorAccess だと全権限を許可する(怖い)ので EC2InstanceConnect も許可される
https://gyazo.com/3395b36fac667c3a4ea54c29ac95d9e7
【重要】この設定では、全インスタンスにssh接続できるようになるので、カスタマイズしたい場合はポリシーのjsonを編集する。
https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-connect-set-up.html
インスタンスごとやタグ指定で接続許可設定する例がある
2. EC2インスタンスを立てる
【重要】Amazon Linux or Ubuntu 16以降なら、daemonが設定済みなのでそれを選びます(実験のため無料枠を使用)
ステップ1: AMI選択
https://gyazo.com/e625579bce88cc5ec0f10f701f47af25
ステップ2: インスタンスタイプの設定
https://gyazo.com/ad5b5a7d5f168682dbb1ba6ac7a099e8
ステップ3: インスタンス詳細の設定、4ストレージ、5タグ、はデフォルトのままでOKなので、省略
ステップ6: セキュリティグループの設定
【重要】 sshをインターネットからアクセス許可
https://gyazo.com/0b3de169f4e9746fc37a94e8e64ed3a5
ステップ7: 確認(省略)
起動
キーペア無しで起動してOK
Webコンソールから入れる -> OK
msshでssh接続できる -> OK
https://gyazo.com/01115ff34ff5bdc84490e9144960a232
3. ブラウザからInstanceConnectでSSH接続
https://gyazo.com/0c3e9ca82fa4af9b25c66fde6b6ae11b
https://gyazo.com/b3c7b532a14bec4d6a4eecbaf061a5c5
3. msshのインストール
pip install ec2instanceconnectcli で mssh コマンドがインストールされます
code:bash
$ python3 -m venv venv
$ source venv/bin/activate
(venv) $ pip install ec2instanceconnectcli
(venv) $ mssh -h
Missing target
usage:
mssh -t instance_id -u profile -z availability_zone -r region supported ssh flags target command
target => user@instance_id | user@hostname
supported ssh flags => -l login_name -p port
optional arguments:
-h, --help show this help message and exit
-r , --region AWS region
-z , --zone Availability zone
-u , --profile AWS Config Profile
-t , --instance_id EC2 Instance ID. Required if target is hostname
-d, --debug Turn on debug logging
4. 接続
.aws/credentials にAWSのKEYを設定し、 mssh で接続
code:bash
$ mssh ubuntu@i-040b7e6180b84544b
https://gyazo.com/ebcbc335fc257803924a79911a22f7ec