亚马逊AWS官方博客

使用 Amazon VPC Lattice 简化服务间的连接、安全和监控 – 现已正式推出



AWS re:Invent 2022 中,我们介绍了 Amazon VPC Lattice 预览版,这是 Amazon Virtual Private Cloud(Amazon VPC)的一项新功能,可让您以一致的方式连接、保护和监控服务之间的通信。借助 VPC Lattice,您可以定义网络访问、流量管理和监控策略,以在实例、容器和无服务器应用程序之间连接计算服务。

今天,我很高兴地宣布 VPC Lattice 现已正式推出。与预览版相比,您可以使用如下新功能:

  • 除了 VPC Lattice 自动生成的域名外,服务还可以使用自定义域名。使用 HTTPS 时,您可以配置与自定义域名匹配的 SSL/TLS 证书。
  • 可以部署开源 AWS Gateway API 控制器,使用带有 Kubernetes 原生体验的 VPC Lattice。该工具使用 Kubernetes Gateway API 来连接多个 Kubernetes 集群的服务以及在 EC2 实例、容器和无服务器函数上运行的服务。
  • 可以使用应用程序负载均衡器(ALB)网络负载均衡器(NLB)作为服务的目标。
  • IP 地址目标类型现在支持 IPv6 连接。

让我们看看其中一些新功能的实际使用。

使用 Amazon VPC Lattice 实现服务间的连接
我之前介绍 VPC Lattice 的文章中,我展示了如何创建服务网络、关联多个 VPC 和服务,以及如何为 EC2 实例和 Lambda 函数配置目标组。在此文章中,我还展示了如何根据请求特征路由流量,以及如何使用加权路由。对于蓝/绿和金丝雀式部署或从一个计算平台迁移到另一个计算平台,加权路由均非常方便。

现在,让我们看看如何使用 VPC Lattice 实现电子商务应用程序服务的相互通信。为简单起见,我只考虑四种服务:

首先,我创建一个服务网络。订单服务需要致电库存服务(检查商品是否可供购买)、配送服务(组织商品配送)和付款服务(转账)。下图从服务网络的角度显示服务间的通信。

描述电子商务服务的服务网络视图的图表。

这些服务在不同的 AWS 账户和多个 VPC 中运行。VPC Lattice 可以处理跨越 VPC 边界设置连接和跨账户权限的复杂性,因此服务间的通信就像 HTTP/HTTPS 调用一样简单。

下图从实现的角度显示如何进行通信。

描述电子商务服务的实现视图的图表。

订单服务在连接到 VPC 的 Lambda 函数中运行。由于图表中的所有 VPC 都与服务网络相关联,因此订单服务能够调用其他服务(库存配送付款),即使这些服务部署在不同的 AWS 账户和 IP 地址重叠的 VPC 中亦是如此。

使用网络负载均衡器(NLB)作为目标
库存服务在双堆栈 VPC 中运行。它作为带有 NLB 的 ECS 服务部署,用于向服务中的任务分配流量。为了获取 NLB 的 IPv6 地址,我在 EC2 控制台中查找 NLB 使用的网络接口。

控制台屏幕截图。

库存服务创建目标组时,在基本配置下,我选择 IP 地址作为目标类型。然后,我选择 IPv6 作为 IP 地址类型

控制台屏幕截图。

在下一步中,我输入 NLB 的 IPv6 地址作为目标。创建目标组后,运行状况检查会测试目标以查看其响应是否符合预期。

控制台屏幕截图。

使用应用程序负载均衡器(ALB)作为目标
使用 ALB 作为目标甚至更容易操作。为配送服务创建目标组时,在基本配置下,我选择新的应用程序负载均衡器目标类型。

控制台屏幕截图。

我选择要在其中查找 ALB 的 VPC 并选择协议版本

控制台屏幕截图。

在下一步中,我选择立即注册,然后从下拉列表中选择 ALB。我使用目标组使用的默认端口。VPC Lattice 不为 ALB 提供额外的运行状况检查。但是,负载均衡器已经配置自己的运行状况检查。

控制台屏幕截图。

为服务使用自定义域名
要调用这些服务,我使用自定义域名。例如,在 VPC 控制台中创建付款服务时,我选择指定自定义域配置,输入自定义域名,然后为 HTTPS 侦听器选择 SSL/TLS 证书。自定义 SSL/TLS 证书下拉列表显示来自 AWS Certificate Manager(ACM)的可用证书。

控制台屏幕截图。

保护服务间通信
现在已经创建目标组,让我们看看如何保护服务间的通信。为了实现零信任身份验证和授权,我使用 AWS Identity and Access Management(IAM)。创建服务时,我选择 AWS IAM 作为身份验证类型

我选择仅允许经过身份验证的访问策略模板,因此服务请求需要使用签名版本 4 进行签名,这与 AWS API 使用的签名协议相同。通过这种方式,服务之间的请求由其 IAM 证书进行身份验证,并且我不必管理密钥来保护它们的通信。

控制台屏幕截图。

或者,我可以更精确地使用身份验证策略,该策略仅提供对某些服务或服务特定 URL 路径的访问权限。例如,我可以将以下身份验证策略应用于订单服务,为 Lambda 函数提供这些权限:

  • 库存服务 /stock URL 路径的只读访问权限(GET 方法)。
  • 配送服务 /delivery URL 路径的完全访问权限(任何 HTTP 方法)。
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "<Order Service Lambda Function IAM Role ARN>"
            },
            "Action": "vpc-lattice-svcs:Invoke",
            "Resource": "<Inventory Service ARN>/stock",
            "Condition": {
                "StringEquals": {
                    "vpc-lattice-svcs:RequestMethod": "GET"
                }
            }
        },
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "<Order Service Lambda Function IAM Role ARN>"
            },
            "Action": "vpc-lattice-svcs:Invoke",
            "Resource": "<Delivery Service ARN>/delivery"
        }
    ]
}

使用 VPC Lattice,我快速配置电子商务应用程序服务之间的通信,包括安全和监控。现在,我可以专注于业务逻辑,而不是管理服务之间的通信方式。

可用性和定价
Amazon VPC Lattice 现已在以下 AWS 区域推出:美国东部(俄亥俄州)、美国东部(弗吉尼亚州北部)、美国西部(俄勒冈州)、亚太地区(新加坡)、亚太地区(悉尼)、亚太地区(东京)和欧洲地区(爱尔兰)。

使用 VPC Lattice,您需要为服务预置时间、通过每项服务传输的数据量和请求数量付费。每小时前 300,000 个请求不收费,您只需为超过此阈值的请求付费。有关更多信息,请参阅 VPC Lattice 定价

我们设计 VPC Lattice 的目的是允许随着时间的推移逐步加入更多团队。您组织中的每个团队都可以选择是否以及何时使用 VPC Lattice。其他应用程序可以使用 HTTP 和 HTTPS 等标准协议连接到 VPC Lattice 服务。通过使用 VPC Lattice,您可以专注于应用程序逻辑,通过对实例、容器和无服务器计算的一致支持来提高生产力和部署灵活性。

使用 VPC Lattice 简化连接、保护和监控服务的方式。

Danilo