EC2インスタンスを作成したりできるIAMユーザーでEC2 Instance Connectを使用したssh接続をする場合は、権限など特に気にしませんでしたが、特定のインスタンスだけに接続できるユーザーを作りたい場合もあると思います。
IAMの設定
ポリシーの作成
EC2 Instance Connectを使ってssh接続するための権限を設定した以下のようなポリシーを作ります。
ec2-instance-connect:OpenTunnelのResourceには、目的のEC2インスタンスに接続できるEC2 Instance ConnectエンドポイントのARNを入れ、ec2-instance-connect:privateIpAddressには、目的のEC2インスタンスのプライベートIPv4アドレスが含まれるものを入れてください。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"ec2:DescribeInstances",
"ec2:DescribeInstanceConnectEndpoints"
],
"Resource": "*"
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": "ec2-instance-connect:OpenTunnel",
"Resource": "arn:aws:ec2:ap-northeast-1:XXXXXX:instance-connect-endpoint/eice-XXXXXX",
"Condition": {
"IpAddress": {
"ec2-instance-connect:privateIpAddress": "192.168.XXX.0/27"
},
"NumericEquals": {
"ec2-instance-connect:remotePort": "22"
}
}
},
{
"Sid": "VisualEditor2",
"Effect": "Allow",
"Action": "ec2-instance-connect:SendSSHPublicKey",
"Resource": "*",
"Condition": {
"StringEquals": {
"ec2:osuser": "ec2-user"
}
}
}
]
}
ユーザーの作成
新しくユーザーを作成し、先程作ったポリシーをアタッチします。
『セキュリティ認証情報』タブでアクセスキーを作成し、このアクセスキーでawsコマンドを実行します。
(おまけ)aws-cliのプロファイル追加
test-userという名前のプロファイルを追加して、先程作ったアクセスキーとシークレットキーを設定します。
aws configure --profile test-user
ssh接続
ec2-instance-connect ssh
aws ec2-instance-connect ssh --instance-id i-XXXXXX --profile test-user
open-tunnelを使ってsshする
EC2インスタンスを作成した時のキーペアを使用する場合
ssh -i ~/.ssh/鍵ファイル -o ProxyCommand='aws ec2-instance-connect open-tunnel --instance-id i-XXXXXX --profile test-user' ec2-user@i-XXXXXX
独自の鍵を作って使用する場合
鍵を作成(my_key)
ssh-keygen -t rsa -f my_key -N ""
(パスワードを設定する場合は、-N ""
を削除して実行してください。)
パブリックキーをインスタンスにプッシュする(send-ssh-public-key)
aws ec2-instance-connect send-ssh-public-key --instance-id i-XXXXXX --instance-os-user ec2-user --ssh-public-key file://my_key.pub --profile test-user
ssh接続(send-ssh-public-keyを実行して60秒以内に接続する)
ssh -i my_key -o ProxyCommand='aws ec2-instance-connect open-tunnel --instance-id i-XXXXXX --profile test-user' ec2-user@i-XXXXXX