亚马逊AWS官方博客

从公共到私有的安全连接:EC2 实例连接端点简介

想象一下,尝试通过互联网连接到 Amazon Virtual Private Cloud(Amazon VPC)内的 Amazon Elastic Compute Cloud(Amazon EC2)实例。通常,您首先必须使用管理员通过 VPC 中的互联网网关(IGW)设置的公共 IP 地址连接到堡垒主机,然后使用端口转发到达目的地。

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

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

EIC 端点产品概述

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

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

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

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

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

安全功能和控件

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

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

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

图 2.SSH 数据面板连接的部分 CloudTrail 条目

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

EIC 端点通过将基于身份的身份验证和授权与传统网络边界控制相结合来增强安全性,同时提供细粒度的访问控制、日志记录、监控和更多深度防御。此外,它无需在 VPC 中使用支持互联网的基础设施即可完成这一切,从而最大限度地减少了意外访问私有 VPC 资源的可能性。

开始使用

创建您的 EIC 端点

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

AMAZON CLI 或管理控制台可用于创建 EIC 端点,我们将在下文中演示 AMAZON CLI。要使用控制台创建 EIC 端点,请参阅文档

使用 AMAZON CLI 创建 EIC 端点

要使用 AMAZON CLI 创建 EIC 端点,请运行以下命令,将 [SUBNET] 替换为您的子网 ID,将 [SG-ID] 替换为您的安全组 ID:

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

使用 AMAZON CLI 或管理控制台创建 EIC 端点并向用户 IAM 授予创建隧道的权限后,即可建立连接。现在我们将讨论如何使用 SSH 连接到 Linux 实例。但请注意,您也可以使用 OpenTunnel API 通过 RDP 连接到实例。

使用 SSH 连接到 Linux 实例

在 VPC 子网中设置 EIC 端点后,即可使用 SSH 进行连接。传统上,使用 SSH 对 EC2 实例的访问是通过密钥对和网络访问控件来控制的。借助 EIC 端点,可以通过 IAM policy 启用额外的控制层,从而增强远程访问的安全性。我们在下面描述了两种通过 SSH 进行连接的方法。

一键命令

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

配置完成后,您可以使用新的 AMAZON CLI 命令进行连接,如下图所示:

图 3.成功 SSH 连接到您的实例后的 AMAZON CLI 视图

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

Amazon Web Services  ec2-instance-connect ssh --instance-id [INSTANCE]

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

开放隧道命令

您也可以使用 SSH 与标准工具进行连接,或者使用代理命令进行连接。要建立通往实例的私有隧道(TCP 代理),您必须运行一个 AMAZON CLI 命令,如下图所示:

图 4.运行新的 SSH 开放隧道命令后的 AMAZON CLI 视图,将创建连接我们的 EC2 实例的私有隧道

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

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

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

结论

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