之前有提到我們將連線 EKS 的方式改成 Jump 機 + SSM,從此開啟一條比喝玫瑰花茶還要順暢的連線道路。但我們有沒有辦法連 jump 機都不要了呢?
先複習一下我們之前的做法,我們之前在 private EKS 的 VPC 環境內設定了 public subnet,並且將 jump 機放在這個 subnet 裡面。這最大的缺點就是額外的 instance 費用。
另一個作法是直接新增 VPC endpoint 直接連線到 private subnet
但不愧是我大 AWS,提供了全新的功能 EC2 Instance Connect Private Endpoint,她允許我通過 CLI 使用 SSH 直接連線到 instance。方法是為相關子網添加特定的實例連接端點
https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-with-ec2-instance-connect-endpoint.html
先前往 AWS service 找到 endpoints,點擊 create endpoint
找到 create endpoint,並選擇相對應的 VPC 跟 subnet
{
"Version": "2012-10-17",
"Statement": [{
"Sid": "EC2InstanceConnect",
"Action": "ec2-instance-connect:OpenTunnel",
"Effect": "Allow",
"Resource": "arn:aws:ec2:region:account-id:instance-connect-endpoint/eice-123456789abcdef",
"Condition": {
"NumericEquals": {
"ec2-instance-connect:remotePort": "22"
},
"IpAddress": {
"ec2-instance-connect:privateIpAddress": "10.0.1.0/31"
},
"NumericLessThanEquals": {
"ec2-instance-connect:maxTunnelDuration": "3600"
}
}
},
{
"Sid": "SSHPublicKey",
"Effect": "Allow",
"Action": "ec2-instance-connect:SendSSHPublicKey",
"Resource": "*",
"Condition": {
"StringEquals": {
"ec2:osuser": "ami-username"
}
}
},
{
"Sid": "Describe",
"Action": [
"ec2:DescribeInstances",
"ec2:DescribeInstanceConnectEndpoints"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
ref: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/eice-security-groups.html
inbound, outbound 都要加入 rule
然後回到其中一台 EKS 內部的 Instance,點擊 connect,選擇 connect using ec2 instance connect endpoint 並選擇你剛剛建立的 endpoint 即可連線
在 local 端使用 aws ec2-instance-connect 即可連進 private instance 囉
aws ec2-instance-connect ssh --instance-id i-1234567890example --connection-type eice