在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 없이 접근하는 방식이 더 선호된다.
发表回复