亚马逊AWS官方博客

推出 VPC 加密控制:在区域内和跨 VPC 传输时强制执行加密

今日,我们宣布推出虚拟私有云(VPC)加密控制功能,这是 Amazon Virtual Private Cloud(Amazon VPC)的一项新功能,可帮助您对某区域中所有 VPC 内部及跨 VPC 传输的数据流量进行审核和强制加密。

金融服务、医疗保健、政府及零售等领域的组织在维护其云基础设施的加密合规性方面面临着巨大的运营复杂性。传统方法需要整合多种解决方案并管理复杂的公钥基础设施(PKI),同时通过电子表格手动追踪不同网络路径上的加密操作,这一流程易受人为错误的影响,随着基础设施规模扩大将变得日益棘手。

尽管基于 AWS Nitro 的实例能在硬件层自动加密流量,同时不影响性能,但组织仍需简易机制将这些功能扩展至整个 VPC 基础设施。这对于证明符合监管标准尤为重要,例如《健康保险流通与责任法案》(HIPAA)、支付卡行业数据安全标准(PCI DSS)以及联邦风险与授权管理计划(FedRAMP),这些标准均要求提供跨环境端到端加密的证明。组织需要对其加密状态实现集中化可视化管理与控制,无需在性能权衡或复杂密钥管理系统之间进行取舍。

VPC 加密策略提供两种操作模式以应对这些挑战:监控模式和强制执行模式。在监控模式下,您可以审核流量的加密状态,并识别允许纯文本流量的资源。该功能向 VPC 流量日志添加加密状态字段,让您能够查看流量是使用 Nitro 硬件加密,还是应用层加密(TLS),亦或两者加密兼用。

确定需修改的资源后,即可采取措施实施加密。AWS 服务(例如网络负载均衡器应用程序负载均衡器AWS Fargate 任务)将自动且透明地将底层基础设施迁移至 Nitro 硬件,无需采取任何操作,也不会造成服务中断。对于其他资源,例如上一代 Amazon Elastic Compute Cloud(Amazon EC2)实例,需切换至基于现代 Nitro 架构实例类型,或在应用程序层级配置 TLS 加密。

所有资源迁移至符合加密规范的基础设施后,即可切换至强制执行模式。这种向符合加密规范的硬件和通信协议的迁移,是启用强制执行模式的前提条件。您可以为互联网网关NAT 网关等资源配置特定排除项,这些资源不支持加密(因为流量流经 VPC 或 AWS 网络之外)。

其他资源必须符合加密要求,且不可排除在外。激活强制执行模式后,所有后续资源仅在兼容的 Nitro 实例上创建,当检测到错误协议或端口时,未加密流量将被丢弃。

下面我将演示如何开始使用

在本次演示中,我启动了三个 EC2 实例。我使用其中一个实例作为 Web 服务器,在端口 80 上安装了 Nginx,提供纯文本的 HTML 页面。另外两个实例则持续向服务器发送 HTTP GET 请求。这会在我的 VPC 中生成纯文本流量。我将 m7g.medium 实例类型用于 Web 服务器和两个客户端其中之一。此实例类型使用底层 Nitro System 硬件,自动加密实例间的传输流量。我将 t4g.medium 实例用于另一个 Web 服务器。该实例的网络流量未在硬件层进行加密。

首先,我在监视模式下启用加密控制。在 AWS 管理控制台中,选择左侧导航窗格中的您的 VPC,然后切换到 VPC 加密控制选项卡。选择创建加密控制,然后选择要为其创建控制的 VPC。

每个 VPC 只能关联一个 VPC 加密控制,以便在 VPC ID 与 VPC 加密控制 ID 之间建立一对一的关系。创建 VPC 加密控制时,您可以添加标签以协助资源的组织与管理。您还可以在创建新 VPC 时激活 VPC 加密控制。

VPC 加密控制 - 创建 EC 1

输入此控制的名称。选择要控制的 VPC。对于现有的 VPC,必须先以监控模式启动,在确认不存在未加密流量后,才开启强制执行模式。对于新的 VPC,可在创建时强制执行加密。

或者,可在为现有 VPC 创建加密控制时定义标签。然而,在创建 VPC 期间启用加密控制时,无法为 VPC 加密控制创建独立标签,因为这些加密控制会自动继承与 VPC 相同的标签。准备就绪后,选择创建加密控制

VPC 加密控制 - 创建 EC 2另外,可使用 AWS 命令行界面(AWS CLI)

aws ec2 create-vpc-encryption-control --vpc-id vpc-123456789

接下来,使用控制台、命令行或流量日志审核 VPC 的加密状态:

aws ec2 create-flow-logs \
  --resource-type VPC \
  --resource-ids vpc-123456789 \
  --traffic-type ALL \
  --log-destination-type s3 \
  --log-destination arn:aws:s3:::vpc-flow-logs-012345678901/vpc-flow-logs/ \
  --log-format '${flow-direction} ${traffic-path} ${srcaddr} ${dstaddr} ${srcport} ${dstport} ${encryption-status}'
{
    "ClientToken": "F7xmLqTHgt9krTcFMBHrwHmAZHByyDXmA1J94PsxWiU=",
    "FlowLogIds": [
        "fl-0667848f2d19786ca"
    ],
    "Unsuccessful": []
}

几分钟后,可在日志中看到以下流量:

flow-direction traffic-path srcaddr dstaddr srcport dstport encryption-status
ingress - 10.0.133.8 10.0.128.55 43236 80 1 # <-- HTTP between web client and server.Encrypted at hardware-level
egress 1 10.0.128.55 10.0.133.8 80 43236 1
ingress - 10.0.133.8 10.0.128.55 36902 80 1
egress 1 10.0.128.55 10.0.133.8 80 36902 1
ingress - 10.0.130.104 10.0.128.55 55016 80 0 # <-- HTTP between web client and server.Not encrypted at hardware-level
egress 1 10.0.128.55 10.0.130.104 80 55016 0
ingress - 10.0.130.104 10.0.128.55 60276 80 0
egress 1 10.0.128.55 10.0.130.104 80 60276 0
  • 10.0.128.55 是使用硬件加密的 Web 服务器,在应用程序层提供明文流量。
  • 10.0.133.8 是使用硬件加密流量的 Web 客户端。
  • 10.0.130.104 是未在硬件层进行加密的 Web 客户端。

加密状态字段告知源地址与目标地址之间流量加密的状态:

  • 0 表示流量以明文形式传输
  • 1 表示流量在网络层(第 3 层)由 Nitro 系统进行加密
  • 2 表示流量在应用层(第 7 层,TCP 端口 443 及 TLS/SSL)进行加密
  • 3 表示流量在应用层(TLS)和网络层(Nitro)同时进行加密
  • “-”表示 VPC 加密控制未启用,或 AWS 流量日志中缺少状态信息。

来自非基于 Nitro 的实例(10.0.130.104)上 Web 客户端的流量标记为 0。来自基于 Nitro 的实例(10.0.133.8)上 Web 客户端的流量标记为 1

也可使用控制台识别需修改的资源。这会报告两个未加密的资源:互联网网关和非基于 Nitro 的实例的弹性网络接口(ENI)

VPC 加密控制 - 排除项列表还可以使用 CLI 检查未加密的资源:

aws ec2 get-vpc-resources-blocking-encryption-enforcement --vpc-id vpc-123456789

更新资源以支持加密后,可通过控制台或 CLI 切换至强制执行模式。

在控制台中,选择 VPC 加密控制。然后选择操作切换模式

VPC 加密控制 - 切换模式或选择等效的 CLI:

aws ec2 modify-vpc-encryption-control --vpc-id vpc-123456789 --mode enforce

如何修改标识为非加密的资源?

所有 VPC 资源必须支持流量加密,无论是硬件层还是应用程序层。对于大多数资源,无需采取任何操作。

通过 AWS PrivateLink网关端点访问的 AWS 服务会自动在应用程序层强制执行加密。这些服务仅接受 TLS 加密的流量。AWS 将自动丢弃任何未在应用程序层加密的流量。

启用监控模式后,我们会自动逐步将您的网络负载均衡器、应用程序负载均衡器、AWS Fargate 集群以及 Amazon Elastic Kubernetes Service(Amazon EKS)集群迁移至内置加密功能的硬件设备。此次迁移过程完全透明,无需您采取任何操作。

某些 VPC 资源要求选择支持现代 Nitro 硬件层加密的底层实例。其中包括 EC2 实例、自动扩缩组Amazon Relational Database Service(Amazon RDS)数据库(包括 Amazon DocumentDB)、Amazon ElastiCache 基于节点的集群Amazon Redshift 预置集群EKS 集群具有 EC2 容量的 ECS预置 MSKAmazon OpenSearch Service 以及 Amazon EMR。要迁移 Redshift 集群,必须从快照创建新的集群或命名空间。

如果使用新一代实例,则可能已具备符合加密要求的基础设施,因为所有最新的实例类型均支持加密功能。对于不支持传输中加密的旧一代实例,需升级至支持该功能的实例类型。

使用 AWS Transit Gateway 时的需知事项

通过启用 VPC 加密的 AWS CloudFormation 创建 Transit Gateway 时,需要额外两项 AWS Identity and Access Management(IAM)权限:ec2:ModifyTransitGatewayec2:ModifyTransitGatewayOptions。这些是必需权限,因为 CloudFormation 使用两步流程创建 Transit Gateway。首先使用基本配置创建 Transit Gateway,然后调用 ModifyTransitGateway 以启用加密支持。如果缺少这些权限,尝试应用加密配置时,CloudFormation 堆栈会在创建过程中出现失败,即使您只是在执行看似创建的操作。

定价和可用性

您可以在以下 AWS 区域启用 VPC 加密控制:美国东部(俄亥俄州、弗吉尼亚州北部)、美国西部(加利福尼亚州北部、俄勒冈州)、非洲(开普敦)、亚太地区(香港、海得拉巴、雅加达、墨尔本、孟买、大阪、新加坡、悉尼、东京)、加拿大(中部)、加拿大西部(卡尔加里)、欧洲(法兰克福、爱尔兰、伦敦、米兰、巴黎、斯德哥尔摩、苏黎世)、中东(巴林、阿联酋)以及南美洲(圣保罗)。

VPC 加密控制将免费提供至 2026 年 3 月 1 日。VPC 定价页面将在临近该日期时更新详细信息。

要了解更多信息,请访问 VPC 加密控制文档或在您的 AWS 账户中试用。我期待了解您如何使用此功能以增强安全态势,并帮助您满足合规性标准。

— seb

AWS 架构师中心: 云端创新的引领者

探索 AWS 架构师中心,获取经实战验证的最佳实践与架构指南,助您高效构建安全、可靠的云上应用