EC2 Instance Connect で AWS EC2 への ssh 管理を IAM User or Group で簡単に♪
概要
2019-06-28 に EC2 Instance Conncet が発表されました!
これによって、セキュリティグループと IAM 権限で ssh アクセス許可が可能になります。
例えば、
会社の IP からのみ、特定の IAM User Group に所属している IAM User に ssh アクセス権限を付与、
別のプロジェクトへ異動した、退職した場合は、その IAM User Group から削除で ssh アクセス権限を剥奪できます。
試験環境
macOS 10.14.3 で試しました。
事前準備
$ pip install -U awscli $ aws s3api get-object --bucket ec2-instance-connect --key cli/ec2instanceconnectcli-latest.tar.gz ec2instanceconnectcli-latest.tar.gz $ sudo pip install ec2instanceconnectcli-latest.tar.gz
発行した IAM User のパーミッション権限に以下を追加
{ "Version": "2012-10-17", "Statement": [ { "Sid": "EC2InstanceConnect", "Action": [ "ec2:DescribeInstances", "ec2-instance-connect:SendSSHPublicKey" ], "Effect": "Allow", "Resource": "*" } ] }
この辺りは terraform 管理案件ですね。
EC2 Instance Conncect 対応 OS
- Ubuntu>=16.04
- AmazonLinux2>=2.0.20190618
ssh ログインする EC2 側の設定
Ubuntu>=16.04
ec2-instance-connect をインストールしておく必要があります。
$ sudo apt-get update && sudo apt-get install ec2-instance-connect
$ dpkg -l | grep ec2-instance-connect ii ec2-instance-connect 1.1.9-0ubuntu3~18.04.1 all Configures ssh daemon to accept EC2 Instance Connect ssh keys
AmazonLinux2>=2.0.20190618
ec2-instance-connect は設定済みです。
セキュリティグループ
ssh ログイン先となる EC2 インスタンスのセキュリティグループはアクセス元から ssh (22 port) を開けておく必要があります。
ssh ログインしてみる
local%$ mssh ubuntu@i-0f123456abcdefg --profile <profile> --region ap-northeast-1
一見、誰しもが ubuntu でログインしていて監査が不安になりますが、 CloudTrail はちゃんと誰がログインしたか見ています。
CloudTrail
以下イベントでログが残っています。
- SendSSHPublicKey
- DescribeInstances
SendSSHPublicKey の「イベントの表示」ボタンクリックで JSON が表示されますが、その中で、アクセス元 IP, IAM User Arn、アクセス先 インスタンスIDがわかります。
{ "eventVersion": "1.05", "userIdentity": { "type": "IAMUser", "principalId": "ABCDEFGHIJK....", "arn": "arn:aws:iam::123456789012:user/hogehoge", "accountId": "123456789012", "accessKeyId": "AKIxxxxxxxxxxxxxxxx", "userName": "hogehoge", "sessionContext": { "attributes": { "mfaAuthenticated": "false", "creationDate": "2019-06-28T06:18:50Z" } } }, "eventTime": "2019-06-28T06:18:51Z", "eventSource": "ec2-instance-connect.amazonaws.com", "eventName": "SendSSHPublicKey", "awsRegion": "ap-northeast-1", "sourceIPAddress": "xx.xxx.xxx.xxx", "userAgent": "aws-ec2-instance-connect-cli/1.0.0 Python/2.7.16 Darwin/18.2.0 Botocore/1.12.179", "requestParameters": { "instanceId": "i-0f.......", "osUser": "ubuntu", "SSHKey": { "publicKey": "ssh-rsa AAAAB....rHb" } }, "responseElements": null, "requestID": "01234567-890a-1234-5b6d-......", "eventID": "f51...", "eventType": "AwsApiCall", "recipientAccountId": "123456789012" }
こちらで EC2 インスタンスのアクセス履歴等はわかります。
まとめ
これまで ssh アカウント管理は手間でしたが、IAM 権限での管理によって非常に楽になりました♪
CloudTrail で監査もバッチリ!
EC2 Instance Connect で AWS EC2 への ssh 管理を IAM User or Group で簡単に♪