从公有到私有的安全连接:介绍 EC2 实例连接终端节点

作者: 希拉·布瑟 | 2023 年 6 月

这篇博文由解决方案架构师 Ariana Rahgozar 和 亚马逊云科技 高级技术客户经理 Kenneth Kitts 撰写。

想象一下,尝试通过互联网连接到您的 亚马逊虚拟私有云(Amazon VPC 中的 亚马逊弹性计算云(Amazon EC2 实例。通常,您必须首先使用管理员在您的 VPC 中通过 Internet Gateway (IGW) 设置的公有 IP 地址连接到堡垒主机,然后使用端口转发到达目的地。

今天,我们推出了 Amazon EC2 实例连接 (EIC) 终端节点 这是 一项新功能,允许您从互联网安全地连接到您的实例。使用 EIC Endpoint,您不再需要 VPC 中的 IGW、资源上的公有 IP 地址、堡垒主机或任何代理来连接到您的资源。EIC Endpoint 结合了基于身份和基于网络的访问控制,提供了满足组织安全要求所需的隔离、控制和日志记录。作为奖励,您的组织管理员还可以免除维护和修补堡垒主机以实现连接的运营开销。EIC Endpoint 可与 亚马逊云科技 管理控制台 亚马逊云科技 命令行接口 (亚马逊云科技 CLI) 配合使用。 此外,它还使您可以灵活地继续使用自己喜欢的工具,例如 PuTTY 和 OpenSSH。

在这篇文章中,我们概述了 EIC 端点的工作原理及其安全控制,指导您完成首次创建 EIC 端点,并演示如何通过 EIC 端点从 Internet 通过 SSH 连接到实例。

EIC 终端产品概述

EIC 端点是一个身份感知型 TCP 代理。它有两种模式:首先,使用 亚马逊云科技 CLI 客户端使用您的 亚马逊云科技 身份和访问管理 (IAM) 证书创建从您的工作站到终端节点的安全的 WebSock et 隧道。建立隧道后,将首选客户端指向您的环回地址( 127.0.0.1 localhost ),然后照常连接。其次,在不使用 亚马逊云科技 CLI 时,控制台可让您安全、无缝地访问 VPC 内的资源。在流量到达 VPC 之前评估身份验证和授权。下图显示了用户通过 EIC 端点进行连接的示例:

Figure 1 shows a user connecting to private EC2 instances within a VPC through an EIC Endpoint

图 1。用户通过 EIC 终端节点连接到私有 EC2 实例

EIC 端点提供了高度的灵活性。首先,它们不要求您的 VPC 使用 IGW 或 NAT 网关直接连接互联网。其次,在您想要连接的资源上不需要代理,这样可以轻松地远程管理可能不支持代理的资源,例如第三方设备。第三,它们保留了现有的工作流程,使您能够继续在本地工作站上使用首选的客户端软件来连接和管理资源。最后,IAM 和 安全组 可以用来控制访问权限,我们将在下一节中对此进行更详细的讨论。

在推出 EIC 终端节点之前,亚马逊云科技 提供了两项关键服务,以帮助更谨慎地管理从公有地址空间向 VPC 的访问。首先是 EC2 Instance Connect ,它提供了一种使用 IAM 证书将临时 SSH 密钥推送到实例的机制,从而无需使用长期密钥。但是,到目前为止,EC2 Instance Connect 在通过互联网进行连接时需要在您的实例上使用公有 IP 地址。此次发布后,您可以将 EC2 实例连接与 EIC 终端节点结合使用,将这两种功能结合起来,在不暴露于公共互联网的情况下为您的实例提供基于临时密钥的 SSH。作为 EC2 实例连接和基于 EIC 端点的连接的替代方案,亚马逊云科技 还提供 系统管理器会话管理器 (SSM) ,它为实例提供基于代理的连接。SSM 使用 IAM 进行身份验证和授权,非常适合可以配置代理运行的环境。

鉴于 EIC Endpoint 允许从公共 IP 空间访问私有资源,因此在讨论创建您的第一个 EIC 端点之前,让我们更详细地回顾一下安全控制和功能。

安全功能和控制

许多 亚马逊云科技 客户通过互联网远程管理其 VPC 内的资源仍然使用相关资源上的公有 IP 地址,或者充其量使用堡垒主机方法结合使用寿命长 SSH 密钥。使用 IGW 路由和/或安全组可以稍微锁定使用公共 IP。但是,在动态环境中,这些控件可能很难管理。因此,谨慎管理长期使用的 SSH 密钥仍然是唯一的防御层,这并不好,因为我们都知道这些控制有时会失败,因此深度防御很重要。尽管堡垒主机可以提供帮助,但它们大大增加了管理、修补和维护基础架构的运营开销。

创建 EIC 端点以及通过端点的安全隧道技术建立连接都需要 IAM 授权。除了基于身份的访问控制来控制用户可以连接谁、如何、何时和多长时间外,还可以使用更传统的网络访问控制,例如安全组。与您的 VPC 资源关联的安全组可用于授予/拒绝访问权限。无论是 IAM 策略还是安全组,默认行为都是拒绝流量,除非明确允许。

EIC Endpoint 在控制平面和数据平面权限分离方面符合重要的安全要求。拥有完整 EC2 IAM 权限的管理员可以创建和控制 EIC 终端节点(控制平面)。但是,如果没有拥有 EC2 实例连接 IAM 权限(数据平面),他们就无法使用这些终端节点。相反,可能需要使用 EIC Endpoint 来隧道进入 VPC 资源的 DevOps 工程师不需要控制平面权限即可这样做。在所有情况下,使用 EIC 终端节点的 IAM 委托人必须是同一 亚马逊云科技 账户的一部分(直接或通过跨账户角色假设)。安全管理员和审计员可以集中查看端点活动,因为所有通过 EIC 端点 API 进行配置和连接的 API 调用都记录在 亚马逊云科技 CloudTrail 中。数据层面连接的记录包括发出请求的 IAM 委托人、其源 IP 地址、请求的目标 IP 地址和目标端口。有关 CloudTrail 条目的示例,请参阅下图。

Figure 2 shows a sample cloud trail entry for SSH data-plane connection for an IAMUser. Specific entry: 图 2。SSH 数据平面连接的部分 CloudTrail 条目

EIC Endpoint 支持可选使用客户端 IP 保存(又名源 IP 保存),这是某些组织的重要安全考虑因素。例如,假设您要连接的资源具有限于您的特定公有 IP 地址的网络访问控制,或者您的实例访问日志必须包含客户端的 “真实” IP 地址。尽管在创建端点时可以选择启用此功能,但默认设置为 关闭 。禁用时,通过端点代理的连接使用网络数据包的源 IP 字段中端点的私有 IP 地址。这种默认行为允许通过端点代理的连接到达路由表允许的范围。请记住,无论您如何配置此设置,CloudTrail 都会记录客户端的真实 IP 地址。

EIC Endpoints 通过将基于身份的身份验证和授权与传统的网络边界控制相结合来增强安全性,并提供精细的访问控制、记录、监控和更深入的防御。此外,它无需在您的 VPC 中安装支持 Internet 的基础架构即可完成所有这些操作,从而最大限度地减少了意外访问私有 VPC 资源的可能性。

入门

创建您的 EIC 端点

每个 VPC 只需要一个终端节点。要创建或修改终端节点并连接到资源,用户必须拥有所需的 IAM 权限,并且与您的 VPC 资源关联的任何安全组都必须有允许连接的规则。有关 配置安全组 和示例 IAM 权限 的更多详细信息,请参阅以下资源 。

亚马逊云科技 CLI 或控制台可用于创建 EIC 终端节点,我们在下文中演示 亚马逊云科技 CLI。要使用控制台创建 EIC 端点,请参阅 文档

使用 亚马逊云科技 CLI 创建 EIC 终端节点

要使用 亚马逊云科技 CLI 创建 EIC 终端节点,请运行以下命令,将 [子网] 替换为您的子网 ID,将 [SG-ID] 替换为您的安全组 ID:

aws ec2 create-instance-connect-endpoint \
    --subnet-id [SUBNET] \
    --security-group-id [SG-ID]

使用 亚马逊云科技 CLI 或控制台创建 EIC 端点并向用户 IAM 授予创建隧道的权限后,即可建立连接。现在我们讨论如何使用 SSH 连接到 Linux 实例。但是,请注意,您也可以使用 OpenTunnel API 通过 RD P 连接到实例。

使用 SSH 连接到您的 Linux 实例

在 VPC 子网中设置 EIC 终端节点后,您可以使用 SSH 进行连接。传统上,使用 SSH 访问 EC2 实例由密钥对和网络访问控制控制。使用 EIC Endpoint,可通过 IAM 策略启用额外的控制层,从而增强远程访问的安全状况。我们在下文中描述了两种通过 SSH 进行连接的方法。

一键命令

为了进一步减少创建和轮换 SSH 密钥的操作负担,您可以使用来自 亚马逊云科技 CLI 的新 ec2-instance-connect ssh 命令。使用这个 新命令 ,我们会生成临时密钥供您连接到您的实例。请注意,此命令需要使用 OpenSSH 客户端和最新版本的 亚马逊云科技 CLI。要使用此命令进行连接,您需要此 详述的 IAM 权限 。

配置完成后,您可以使用新的 亚马逊云科技 CLI 命令进行连接,如下图所示:
Figure 3 shows the AWS CLI view if successfully connecting to your instance using the one-click command. When running the command, you are prompted to connect and can access your instance.

图 3。成功通过 SSH 连接到您的实例后的 亚马逊云科技 CLI 视图

要测试从 亚马逊云科技 CLI 连接到您的实例,您可以运行以下命令,其中 [INSTANCE] 是您的 EC2 实例的实例 ID:

aws ec2-instance-connect ssh --instance-id [INSTANCE]

请注意,如果您必须维护现有的工作流程,您仍然可以使用有效期长的 SSH 证书进行连接,我们将在下文中对此进行介绍。但是,请注意,动态的、经常轮换的证书通常更安全。

开放隧道命令

您也可以使用 SSH 与标准工具或使用代理命令进行连接。要为实例建立私有隧道(TCP 代理),您必须运行一个 亚马逊云科技 CLI 命令,如下图所示:

Figure 4 shows the AWS CLI view after running the aws ec2-instance-connect open-tunnel command and connecting to your instance. 图 4。运行新的 SSH 开放隧道命令后的 亚马逊云科技 CLI 视图,创建了连接我们的 EC2 实例的私有隧道

您可以运行以下命令来测试连接,其中 [实例] 是您的 EC2 实例的实例 ID, [SSH-KEY] 是您的 SSH 密钥 的位置和名称。有关使用 SSH 密钥的指南,请参阅我们关于 Amazon EC2 密钥对和 Linux 实例 的文档 。

ssh ec2-user@[INSTANCE] \
    -i [SSH-KEY] \
    -o ProxyCommand='aws ec2-instance-connect open-tunnel \
    --instance-id %h'

配置好我们的 EIC 端点后,我们就可以使用 亚马逊云科技 CLI 在没有公有 IP 或 IGW 的情况下通过 SSH 连接到 EC2 实例。

结论

EIC Endpoint 提供了一种安全的解决方案,可在没有 IGW、公有 IP、代理和堡垒主机的私有子网中通过 SSH 或 RDP 连接到您的实例。通过为您的 VPC 配置 EIC 终端节点,您可以使用现有的客户端工具或控制台/亚马逊云科技 CLI 进行安全连接。要了解更多信息,请访问 EIC 端点文档


*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。