AWS EC2 Instance Connect(EIC) 是一种基于 IAM 的 EC2 登录机制,通过临时注入 SSH 公钥的方式实现对实例的安全访问,避免了长期维护 SSH Key 带来的安全与运维成本。

与传统 SSH 相比,EC2 Instance Connect 的核心优势在于:

  • 不在实例上长期保存公钥
  • 登录权限完全由 IAM 控制,可审计、可回收
  • 公钥短时有效(约 60 秒),符合 Just‑In‑Time Access 模型

本文将从 安全组 → IAM → 实例 → 本地终端 四个层面,系统性讲解 EC2 Instance Connect 的完整配置过程,并明确区分每一步的操作边界。

示例环境说明

本文示例环境如下(仅用于演示):

  • EC2 实例 IDi-0392cee4f942f23a9
  • 区域ap-northeast-1(东京)
  • 公网 IP3.112.83.160
  • 公网 DNSec2-3-112-83-160.ap-northeast-1.compute.amazonaws.com
Clipboard_Screenshot_1770084443

一、配置总览

EC2 Instance Connect 的配置涉及三个方面:

  1. AWS 平台配置
    • 安全组(Security Group)
    • IAM 策略与身份
  2. EC2 实例配置
    • Instance Connect 软件包
    • SSH 服务配置
  3. 本地终端配置
    • AWS CLI
    • SSH / Instance Connect CLI

二、AWS 平台配置

2.1 安全组端口配置(必需)

EC2 Instance Connect 并不会绕过 SSH,本质仍然是 SSH over TCP 22

控制台操作步骤

  1. 登录 AWS 管理控制台 → EC2
  2. 左侧选择 安全组(Security Groups)
  3. 找到与实例 i-0392cee4f942f23a9 关联的安全组
  4. 编辑 入站规则(Inbound rules)

推荐入站规则(ap‑northeast‑1)

配置项
类型SSH
协议TCP
端口22
来源com.amazonaws.ap-northeast-1.ec2-instance-connect
描述EC2 Instance Connect

该前缀列表(Prefix List)由 AWS 官方维护,推荐优先使用。

备选方案(手动 IP)

如无法使用 Prefix List,可使用官方 IP 段(示例):

  • 13.112.70.0/29
  • 15.168.105.160/29

⚠️ 不建议使用 0.0.0.0/0,生产环境应结合 VPN / Bastion 使用。

Clipboard_Screenshot_1770084602


2.2 IAM 策略配置(核心)

EC2 Instance Connect 的安全性 完全依赖 IAM 策略设计,这是整个方案的核心。

2.2.1 创建自定义 IAM 策略

在 IAM 控制台:策略 → 创建策略 → JSON,填入:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "ec2-instance-connect:SendSSHPublicKey",
      "Resource": "arn:aws:ec2:ap-northeast-1:*:instance/i-0392cee4f942f23a9",
      "Condition": {
        "StringEquals": {
          "ec2:osuser": ["ec2-user", "ubuntu", "admin"]
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": ["ec2:DescribeInstances", "ec2:DescribeVpcs"],
      "Resource": "*"
    }
  ]
}

策略名称示例:

1
EC2InstanceConnectPolicy-i-0392cee4f942f23a9

Clipboard_Screenshot_1770084855

2.2.2 策略设计说明

ec2-instance-connect:SendSSHPublicKey

  • 用途:向指定 EC2 实例注入临时 SSH 公钥
  • Resource:精确到实例 ID,符合最小权限原则
  • Condition:限制可登录的 OS 用户,防止横向滥用

ec2:DescribeInstances

  • 控制台 / CLI 连接时的必要只读权限
  • 不支持资源级限制,只能使用 *

ec2:DescribeVpcs

  • IPv6 / 控制台连接场景所需

Clipboard_Screenshot_1770084938


2.2.3 生产环境最小权限示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "ec2-instance-connect:SendSSHPublicKey",
      "Resource": "arn:aws:ec2:ap-northeast-1:123456789012:instance/i-0392cee4f942f23a9",
      "Condition": {
        "StringEquals": { "ec2:osuser": "ec2-user" },
        "IpAddress": { "aws:SourceIp": "203.0.113.0/24" }
      }
    },
    {
      "Effect": "Allow",
      "Action": "ec2:DescribeInstances",
      "Resource": "*"
    }
  ]
}

2.3 绑定 IAM 身份

将策略附加到:

  • IAM User(仅限测试)
  • IAM Role + IAM Identity Center(生产推荐)

Clipboard_Screenshot_1770085077

Clipboard_Screenshot_1770085157


三、EC2 实例配置

官方 EC2 Instance Connect 所需的 SSH 配置默认已经完成,通常不需要任何手动修改

这包括:

  • ec2-instance-connect 已作为系统组件预装或自动启用
  • sshd 已配置 AuthorizedKeysCommand 指向 EIC

只有在以下情况下,才需要人工检查或调整 SSH 配置:

  • 使用了 自定义 AMI
  • 手动修改过 /etc/ssh/sshd_config
  • 关闭或移除了 AuthorizedKeysCommand

💡 换句话说:“默认支持 EIC” 才是正常状态,手动改 SSH 反而是例外情况。

3.1 手动安装 ec2-instance-connect

首次仍需通过传统 SSH 或者使用控制台串口等方式登录实例:

1
ssh -i your-key.pem ec2-user@3.112.83.160

Amazon Linux 2 / 2023

1
sudo yum install -y ec2-instance-connect

Ubuntu

1
2
sudo apt update
sudo apt install -y ec2-instance-connect

3.2 手动校验服务状态

1
sudo systemctl status ec2-instance-connect-harvest-hostkeys.service

如未运行:

1
2
sudo systemctl enable ec2-instance-connect-harvest-hostkeys.service
sudo systemctl start ec2-instance-connect-harvest-hostkeys.service

3.3 手动进行 SSH 配置检查

1
sudo grep -E "AuthorizedKeysCommand|Port|PubkeyAuthentication" /etc/ssh/sshd_config

期望看到:

1
2
3
4
Port 22
PubkeyAuthentication yes
AuthorizedKeysCommand /opt/aws/bin/eic_run_authorized_keys %u %f
AuthorizedKeysCommandUser ec2-instance-connect

Clipboard_Screenshot_1770085490


四、本地终端配置

4.1 安装 AWS CLI(v2)

1
aws --version

确保版本 ≥ v2

image-20260203102546831


4.2 配置凭证

1
aws configure

或使用 SSO:

1
aws configure sso

五、连接方式

5.1 一条命令直接登录(CLI 高阶封装,强烈推荐)

1
2
3
aws ec2-instance-connect ssh \
--instance-id i-0392cee4f942f23a9 \
--os-user ubuntu

实际发生了什么?

这条命令是 AWS CLI v2 帮你自动完成了完整的 Instance Connect 流程

  1. 在本地临时生成一对 SSH Key(不会写入 ~/.ssh
  2. 调用 **ec2-instance-connect:SendSSHPublicKey** API,将公钥注入实例(约 60 秒有效)
  3. 立即使用该私钥发起 SSH 连接

上述三个步骤被封装成了一个原子操作,对用户透明。

本质上,这是把“SSH 登录”升级成了一次 IAM 授权的 API 调用

image-20260203103223084


5.2 手动 CLI 方式

注入临时公钥

1
2
3
4
5
aws ec2-instance-connect send-ssh-public-key \
  --instance-id i-0392cee4f942f23a9 \
  --instance-os-user ec2-user \
  --ssh-public-key file://~/.ssh/id_rsa.pub \
  --region ap-northeast-1

image-20260203103306481

立即登录

1
ssh ec2-user@3.112.83.160

image-20260203103432840

5.3 日志审计

QQ_1772005684836

QQ_1772005787655


六、总结

EC2 Instance Connect 的本质是:

用 IAM 控制机器登录,用临时信任替代长期密钥。

它非常适合:

  • Zero Trust 架构
  • 合规与审计场景
  • 多人协作的云主机运维

如果你已经在使用 KMS、STS、SSO,那么 EC2 Instance Connect 是一个非常自然的延伸。