无需堡垒机连接EC2:AWS Session Manager与EC2 Instance Connect Endpoint

在AWS中连接私有子网的EC2时,以前通常会配置堡垒机(Bastion Host)或跳板机(Jump Server)。管理员首先通过SSH/RDP连接到公共子网的堡垒EC2,然后再连接到私有子网的服务器。然而,在最近的AWS环境中,为了简单的管理连接,相比于单独运行堡垒机,更倾向于使用AWS Systems Manager Session Manager或EC2 Instance Connect Endpoint。AWS官方文档也解释说,Session Manager可以在不开放入站端口、不维护堡垒机、不管理SSH密钥的情况下访问EC2等受管节点。 (AWS Documentation)

为何要减少堡垒机?

堡垒机充当进入私有子网中服务器的门户。虽然其结构本身简单且熟悉,但最终它是一种额外运行一台可从互联网访问的EC2实例的方式。这台服务器将成为安全补丁、访问控制、SSH密钥管理、日志收集、故障响应和成本管理的对象。

传统结构如下:

관리자 PC
  -> Public Subnet Bastion Host
      -> Private Subnet EC2

问题在于,如果堡垒机被攻破,通往内部服务器的路径可能会被打开。因此,尽管可以通过安全组仅允许公司IP,并附加MFA、访问批准、会话记录等措施,但运营负担依然存在。

AWS博客也解释说,用Systems Manager替代堡垒机可以减少攻击面,并提高对主机上执行命令的可见性。 (Amazon Web Services, Inc.) 2024年的AWS博客进一步指出,堡垒机方式存在部署、加固、维护、监控负担以及EC2运行成本,而使用Session Manager有助于改善安全和审计态势,并减少管理负担。 (Amazon Web Services, Inc.)

核心替代方案1:AWS Systems Manager Session Manager

Session Manager是AWS Systems Manager的功能之一,它允许您通过控制台或AWS CLI连接到服务器Shell,而无需直接在EC2上开放SSH端口。根据AWS文档,Session Manager支持基于浏览器的Shell和AWS CLI连接,并且可以通过IAM策略控制哪些用户可以连接到哪些实例。 (AWS Documentation)

结构如下:

관리자 PC
  -> AWS Systems Manager Session Manager
      -> SSM Agent
          -> Private EC2

这种方式的核心是EC2内部的SSM Agent与AWS Systems Manager服务通信,而不是向EC2开放入站SSH。因此,安全组中无需向互联网开放22号SSH或3389号RDP端口。

使用Session Manager通常需要以下条件:

WRIMO-MD-TABLE-0

EC2实例通常会附加包含AmazonSSMManagedInstanceCore策略的IAM角色。AWS文档也指导了在配置单个实例配置文件时选择此策略的步骤。 (AWS Documentation)

aws ssm start-session 
  --target i-xxxxxxxxxxxxxxxxx 
  --region us-east-1 
  --profile my-sso

如果希望在私有子网中创建完全封闭的架构而无需NAT Gateway,可以使用VPC Endpoint。配置Systems Manager的VPC Endpoint后,受管实例可以通过AWS PrivateLink与Systems Manager通信,而无需互联网网关或NAT设备。AWS文档也解释说,使用PrivateLink时,受管实例与Systems Manager、EC2之间的流量在Amazon网络内部处理,无需互联网访问。 (AWS Documentation)

通常需要的端点如下:

com.amazonaws.<region>.ssm
com.amazonaws.<region>.ssmmessages
com.amazonaws.<region>.ec2messages

根据AWS文档,受管节点必须能够通过HTTPS 443出站通信到ssm、ssmmessages和ec2messages端点。在使用VPC Endpoint的情况下,ssmmessages端点对于Session Manager的安全数据通道通信是必需的。 (AWS Documentation) (AWS Documentation)

核心替代方案2:EC2 Instance Connect Endpoint

如果说Session Manager更接近“无需SSH连接的方式”,那么EC2 Instance Connect Endpoint则更接近“在没有堡垒机的情况下保持SSH/RDP可用性”的方式。

EC2 Instance Connect Endpoint允许从互联网安全地连接到私有IP实例,并且可以在没有堡垒机或VPC直接互联网连接的情况下使用。AWS文档将此功能描述为“身份感知TCP代理”,解释说它使用IAM凭证在用户PC到端点之间创建私有隧道,并且流量在到达VPC之前进行认证和授权。 (AWS Documentation)

结构如下:

관리자 PC
  -> EC2 Instance Connect Endpoint
      -> Private EC2

这种方法适用于需要维护现有SSH客户端、SSH密钥和操作工具的组织。但是,EC2 Instance Connect Endpoint用于管理流量,不适用于大容量数据传输。AWS文档也指出,大容量数据传输可能会受到限制,并且每个端点的并发连接数和连接持续时间都有限制。 (AWS Documentation)

堡垒机、Session Manager和EC2 Instance Connect Endpoint比较

项目 堡垒机 Session Manager EC2 Instance Connect Endpoint
是否需要公有IP 堡垒机需要 不需要 目标EC2不需要
是否开放SSH 22端口 堡垒机需要 不需要 目标安全组允许端点路径
SSH密钥管理 需要 基本连接不需要 根据使用方式可能需要
访问控制 以OS账户、SSH密钥、SG为中心 以IAM为中心 IAM + 网络控制
运营负担
可用性 熟悉 基于控制台/CLI 与现有SSH方式类似
推荐场景 传统、特殊环境 一般运营连接 需要保持SSH可用性

实务推荐

对于一般的EC2运营连接,优先考虑Session Manager是更好的选择。因为它可以从安全组中移除SSH/RDP入站规则,并实现基于IAM的统一访问控制。AWS文档也阐述了Session Manager的优点,例如集中式IAM访问控制、消除入站端口、无需堡垒机和SSH密钥管理、通过控制台/CLI一键访问以及会话活动日志记录等。 (AWS Documentation)

然而,Session Manager并非适用于所有情况。如果现有运营自动化与SSH紧密绑定,或者与scp、SSH隧道和现有管理工具的兼容性至关重要,那么EC2 Instance Connect Endpoint可能更自然。AWS文档也指出,虽然可以通过Session Manager进行SSH连接和SCP使用,但SSH或端口转发方式的会话存在限制:由于SSH对数据进行加密,Session Manager无法记录会话内容。 (AWS Documentation)

结论

在AWS中仍然可以使用堡垒机。但是,如果仅仅是为了连接私有EC2实例,那么现在优先考虑Session Manager或EC2 Instance Connect Endpoint,而不是新建堡垒机,是一种更现代的设计。

特别是考虑到运营连接、安全审计、最小化密钥管理和以私有子网为中心的设计,Session Manager是最简洁的选择。反之,如果希望在保持现有SSH可用性的同时移除堡垒EC2,EC2 Instance Connect Endpoint是一个很好的替代方案。

一句话总结如下:

과거에는 Private EC2 접속을 위해 Bastion Host를 두는 구성이 일반적이었지만,
최근 AWS 환경에서는 Session Manager나 EC2 Instance Connect Endpoint를 사용해
Bastion Host 없이 접근하는 방식이 더 선호된다.

Comments

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注