Amazon VPC Lattice 配置
安全地与您的 Amazon VPC 上的子图进行通信
云专用 预览,如果您想申请访问或有任何问题或反馈,请不要犹豫。
云 专用 使用 Amazon VPC Lattice 将流量发送到运行在 Amazon VPC 中的 子图 而不将其暴露在互联网上。
本指南展示了如何创建 Lattice 服务并与 GraphOS 共享。这种配置允许您的 GraphOS 云路由器安全地与您的 私有子图 进行通信。
ⓘ 注意
使用 Amazon VPC Lattice 产生的成本不包括在您的 GraphOS 专用支出之内。Lattice 计费页面 了解更多信息。
GraphOS 如何通过 Lattice 确保子图安全
当您第一次将 Lattice 服务与 GraphOS 共享时,它会扫描 Lattice 服务以检索其 ARN 和域名。然后,当您将一个 私有子图 添加到云 超级图,GraphOS 会检查子图的域名是否与您 GraphOS 组织关联的 Lattice 服务的域名之一匹配。
作为第二道防线,超级图 使用 AWS IAM 权限和 SigV4 仅允许流量访问同一 GraphOS 组织的子图。
配置概述
要允许 GraphOS 云路由器向 Amazon VPC 中的私有子图发送流量,您必须:
- 为您的 Amazon VPC 中托管的每个 子图 创建一个 Lattice 目标组。
- 为 GraphOS 中的每个 图 变体创建一个 Lattice 服务。
- 通过资源共享,将您的Lattice服务与Apollo AWS组织共享。
- 在GraphOS Studio中链接资源共享。
本指南提供了每个步骤的说明。
您还可以使用Apollo Terraform模块来部署Lattice目标组、服务和资源共享。该模块完成了本配置指南的第1至3步。设置完成后,您可以跳到第4步——链接在GraphOS Studio中部署的资源分享。有关更多信息,请参阅模块的README。
ⓘ 注意
- 您可以使用Amazon VPC Lattice在组织中用于除将GraphOS流量路由到子图之外的用途。Lattice服务可以关联多个服务网络,并且GraphOS将您的Lattice服务与其自己的服务网络关联。
- 您只能使用与您的云路由器在同一个AWS区域中的Lattice进行子图的查询。如果您需要在不同的AWS区域运行子图或需要在Dedicated尚未支持的区域运行负载,请联系销售。
步骤1:创建目标组
VPC Lattice的目标组是运行您的应用程序或服务的目标(或计算资源)的集合。在GraphOS的上下文中,目标组映射到子图。如果您有多个子图,请为每个子图重复这些步骤。
- 在您选择的区域中,进入AWS控制台中的VPC服务页面
在左侧导航中,向下滚动并打开VPC Lattice > 目标组。
点击右上角的创建目标组。
在 基本配置 部分,设置与您的 子图 资源匹配的属性。
(可选)如果您使用了带有健康检查的目标类型,请确保您已配置您的健康检查。否则,Lattice 无法将流量发送到您的 子图。
根据您的选择的目标类型注册目标。例如,如果您选择 IP 地址 作为目标类型,则添加每个 IP 地址。
检查您的目标,确保所有信息都正确。
在页面右下角点击 创建目标组。
恭喜!您已成功创建了 Amazon VPC Lattice 目标组。对所有您想与 GraphOS 分享的子图重复此过程。
第 2 步:创建 Lattice 服务
在 Lattice 中,服务 表示一个独立的软件模块。VPC Lattice 服务有一个监听器,该监听器使用了规则,称为监听器规则,您可以通过配置这些规则来帮助路由流量到您的目标。在此步骤中,您为每个目标组创建单个 VPC Lattice 服务和监听器规则。
在 GraphOS 上下文中,Lattice 服务映射到图 变体。为您的每个变体创建一个服务。
- 在您的地区 AWS 控制台中,转到 VPC 服务页面
在左侧导航中,向下滚动并打开 VPC Lattice > 服务。
在右上角点击 创建服务。
在 标识符 部分,为服务输入一个描述性名称。可选地,输入描述和标签。
在 自定义域配置 部分,保留 指定自定义域配置 未勾选。
在 服务访问 部分,选择 AWS IAM 认证类型,并粘贴以下授权策略。此策略确保只有 Apollo AWS 组织可以向您的 子图 发送流量。
{"Version": "2012-10-17","Statement": [{"Effect": "Allow","Principal": "*","Action": "vpc-lattice-svcs:Invoke","Resource": "*","Condition": {"ForAnyValue:StringLike": {"aws:PrincipalOrgPaths": "o-9vaxczew6u/*/ou-leyb-l9pccq2t/ou-leyb-fvqz35yo/*"}}}]}(可选)为了提供额外的安全性,您可以通过开启 访问日志 来审计进入您 子图的所有流量。
一旦您已配置服务,请点击页面右下角的 下一步。
定义路由信息到您在第 1 步 中创建的目标组。将协议设置为 HTTPS 并将端口设置为 443。
ⓘ 注意
出于安全原因,Apollo 要求您使用 HTTPS 用于您的监听器。使用 HTTPS 会在您的 GraphOS 云路由器 与您的 Lattice 服务之间的流量传输过程中强制加密。
如果您有多个目标组,则为每个目标组添加一个 监听规则。
一旦您已配置您的监听器,请点击页面右下角的 下一步。
不要选择 VPC Lattice 服务网络。您的 子图 将与由 Apollo 管理的服务网络集成。相反,点击页面右下角的 下一步 按钮。
确保您输入的信息正确。然后点击页面右下角的 创建 VPC Lattice 服务。
恭喜!您现在已为您 子图 创建了一个具有监听器的 Lattice 服务。
第 3 步:共享 Lattice 服务
为了GraphOS访问您的Lattice服务,您必须与Apollo AWS组织共享该服务。您可以通过AWS资源访问管理器(AWS RAM)中的资源共享来实现。资源共享指定要共享的资源以及与哪些消费者共享。
如果您有多个Lattice服务,您可以通过一个资源共享来共享它们。
- 在您选择的区域的AWS控制台中,转到资源访问管理器服务页面
在左侧导航中,向下滚动并打开由我共享 > 资源共享。
在页面右上角点击创建资源共享。
在资源共享名称部分,为您的资源共享输入一个名称。
在资源部分,选择VPC Lattice服务资源类型。
选择所有包含
子图 的Lattice服务。(可选)为您的资源共享设置标签。
在页面右下角点击下一步按钮。
验证管理权限提供了将Lattice服务与服务网络(
vpc-lattice:CreateServiceNetworkServiceAssociation
和vpc-lattice:GetService
)关联的访问权限。然后在页面右下角点击下一步按钮。在受托人部分,选择允许与任何人共享,受托人类型为
AWS账户
。输入以下账户ID的值:282421723282
,然后点击添加按钮。确认
282421723282
是此资源共享的唯一受托人选择,然后在右下角点击下一步按钮。确认所有信息都正确无误,然后在页面右下角点击创建资源共享。
恭喜!您现在已将Lattice服务与Apollo的AWS组织共享。
最后一步是将您的资源共享与GraphOS中的图关联。
ⓘ 注意
- 您有12小时来关联您的资源共享。否则,AWS RAM将无法处理邀请,您必须重新启动此步骤。
- 出于安全考虑,我们建议您在创建资源共享后立即继续下一步。如果您在AWS控制台中看到资源共享已被接受或失败,并且您没有遵循本指南的步骤4,请按照以下步骤解除对私有子图的访问并重新启动此步骤。
步骤4. 链接资源共享
在此阶段,您已将与Apollo AWS组织共享您的Lattice服务。在此步骤中,您将每个服务链接到GraphOS Studio中的特定云路由器。云路由器可以随后路由客户端请求。
- 在您选择的区域的AWS控制台中,转到资源访问管理器服务页面
在左侧导航中,向下滚动并打开由我共享 > 资源共享。
点击您在上一步中创建的资源共享。
复制资源共享的ARN。
下一步取决于您是创建一个 新图形还是在GraphOS中添加此 服务到现有图形。
新图形设置
前往 GraphOS Studio。
点击屏幕右上角的 创建新图形选项卡。
按照Studio的入门步骤,创建一个带有新 私有subgraph 的 图形。
当提示 提供您的GraphQL API端点时,在页面底部选择 我的端点无法直接访问。
选择您想要使用的后端提供商以及您子graph应有的地区。
ⓘ 注意
所有连接到GraphOS云路由器的 私有subgraphs 必须在同一地区。
粘贴您从AWS控制台创建并复制的资源共享的ARN,然后点击 链接我的资源和 下一步继续。
从下拉菜单中,选择您想要连接到您的 GraphOS路由器的Lattice服务。URL会自动附加默认路径
/api/graphql
,但您可以更改此路径。添加一个 服务名称以描述您的Lattice服务。GraphOS Studio 使用此名称来识别您的Lattice服务。
在 Schema 字段中粘贴此子 图的GraphQL模式。您还可以通过点击 上传Schema按钮来上传模式文件。
- 更新你想要添加此 private subgraph 的 supergraph 的 ID 和名称。ID 和名称将根据你的 GraphOS 组织名称自动生成,但你可以根据需要更改这两个。
- 完成操作,点击 创建 GraphOS 路由器。
恭喜!你现在已创建了一个包含 private subgraph 的 GraphOS 云路由器。
现有图的配置
- 前往你想要连接的 图。。
- 从左侧边栏,打开你的 graph 的 Subgraphs 选项卡。
- 点击页面的右侧 Add a Subgraph。
- 在对话框中,选择 Private 选项,然后从下拉菜单中选择你想要添加的 AWS 服务。URL 会自动添加一个默认路径 /api/graphql,但如果你想,可以更改此路径。
- 添加一个 服务名称以描述您的Lattice服务。GraphOS Studio 使用此名称来识别您的Lattice服务。
- 将此 subgraph 的 GraphQL 模式粘贴到 Schema 字段中。您也可以通过点击 Upload Schema 按钮上传模式文件。
- 完成操作,点击 添加子图。
恭喜!你现在已将一个 private subgraph 添加到你的 GraphOS 云路由器。
下一步操作
在链接你的 VPC Lattice 服务与云路由器之后,你可能想设置监控。Lattice 管理页面提供有关监控和如何进一步限制和删除对子图的访问的信息。如果你在 Lattice 设置中遇到问题,请参阅故障排除指南。