使用私有端点和应用程序负载均衡器在内部网站上部署 Amazon API Gateway API - AWS Prescriptive Guidance

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用私有端点和应用程序负载均衡器在内部网站上部署 Amazon API Gateway API

由 Saurabh Kothari(AWS) 编写

环境:生产

技术:Web 和移动应用程序;网络;无服务器;基础架构

Amazon Web Services:Amazon API Gateway、Amazon Route 53、 AWS Certificate Manager (ACM)

Summary

此模式向您展示如何在可从本地网络访问的内部网站上部署 Amazon API Gateway API。您将学习使用专有终端节点、Application Load Balancer、AWS PrivateLink 和 Amazon Route 53 设计的架构,为私有 API 创建自定义域名。此架构可防止使用自定义域名和代理服务器帮助在 API 上进行基于域的路由带来的意外后果。例如,如果您在不可路由的子网中部署虚拟私有云(VPC)端点,则您的网络将无法访问 API Gateway。常见的解决方案是使用自定义域名,然后在可路由的子网中部署 API,但是当代理配置将流量 (execute-api.{region}.vpce.amazonaws.com) 传递到 AWS Direct Connect 时,这可能会破坏其他内部站点。最后,此模式可以帮助您满足使用无法通过 Internet 访问的私有 API 和自定义域名的组织要求。

先决条件和限制

先决条件

  • 一个有效的 Amazon Web Services account

  • 用于网站和 API 的 Server Name Indication (SNI) 证书

  • 从本地环境到使用 AWS Direct Connect 或 AWS Site-to-Site VPN 设置的 Amazon Web Services account 的连接

  • 带有相应域的私有托管区(例如 domain.com),该域从本地网络解析,并将 DNS 查询转发到 Route 53

  • 可从本地网络访问的可路由私有子网

限制

有关负载均衡器、规则和其他资源的配额(以前称为限制)的更多信息,请参阅 Elastic Load Balancing 文档中的应用程序负载均衡器配额

架构

技术堆栈

  • Amazon API Gateway

  • Amazon Route 53

  • 应用程序负载均衡器

  • AWS Certificate Manager

  • AWS PrivateLink

目标架构

下图显示了如何在 VPC 中部署 应用程序负载均衡器,该均衡器根据应用程序负载均衡器侦听器规则将 Web 流量引导到网站目标组或 API Gateway 目标组。API Gateway 目标组是 API Gateway 中 VPC 端点的 IP 地址列表。API Gateway 配置为通过其资源策略将 API 设为私有。该策略拒绝所有不是来自特定 VPC 端点的调用。API 网关中的自定义域名已更新为对 API 及其阶段使用 api.domain.com。添加了应用程序负载均衡器规则,以根据主机名路由流量。

图表显示了以下工作流:

  1. 本地网络中的用户尝试访问内部网站。该请求已发送至 ui.domain.com 和 api.domain.com。然后,请求被解析至可路由私有子网的内部应用程序负载均衡器。SSL 在 ui.domain.com 和 api.domain.com 的应用程序负载均衡器处终止。

  2. 在应用程序负载均衡器上配置的侦听器规则将检查主机标头。

    a. 如果主机标头为 api.domain.com,则请求将转发到 API Gateway 目标组。应用程序负载均衡器通过端口 443 启动与 API Gateway 的新连接。

    b. 如果主机标头为 ui.domain.com,则请求将转发到网站目标组。

  3. 当请求到达 API Gateway 时,API Gateway 中配置的自定义域映射将确定主机名以及要运行的 API。

自动化和扩展

可以使用 AWS CloudFormation 或 AWS Cloud Development Kit (AWS CDK) 自动执行此模式中的步骤。要配置 API Gateway 调用的目标组,您必须使用自定义资源来检索 VPC 端点的 IP 地址。API 调用describe-vpc-endpointsdescribe-network-interfaces返回 IP 地址和安全组,这些地址和安全组可用于创建 API 目标 IP 地址组。

工具

  • Amazon API Gateway 可帮助您创建、发布、维护、监控和保护任何规模的 REST、HTTP 和 WebSocket API。

  • Amazon Route 53 是一种可用性高、可扩展性强的 DNS Web 服务。

  • AWS Certificate Manager (ACM) 帮助您创建、存储和续订公有及私有 SSL/TLS X.509 证书和密钥,这些证书和密钥可保护您的 AWS 网站和应用程序。

  • AWS Cloud Development Kit (AWS CDK) 是一个软件开发框架,可帮助您在代码中定义并预置 Amazon Web Services Cloud 基础设施。

  • AWS PrivateLink 可帮助您创建从 VPC 到 VPC 外部服务的单向私有连接。

操作说明

任务描述所需技能

创建 SNI 证书,并将该证书导入 ACM。

  1. 为 ui.domain.com 和 api.domain.com 创建 SNI 证书。有关更多信息,请参阅 Amazon CloudFront 文档中的选择如何 CloudFront 处理 HTTPS 请求

  2. 导入 SNI 证书至 AWS Certificate Manager (ACM)。有关更多信息,请参阅 ACM 文档中的导入证书至 AWS Certificate Manager

网络管理员
任务描述所需技能

在 API Gateway 中创建接口 VPC 端点。

要创建接口 VPC 端点,请按照 Amazon Virtual Private Cloud (Amazon VPC) 文档中的使用接口 VPC 端点访问 Amazon Web Services 中的说明进行操作。

云管理员
任务描述所需技能

为应用程序创建目标组。

为应用程序的 UI 资源创建目标组

云管理员

为 API Gateway 端点创建目标组。

  1. 创建具有 IP 地址类型的目标组,然后将 API Gateway 端点的 VPC 端点的 IP 地址添加至目标组。

  2. 使用成功代码 200 和 403 为目标组配置运行状况检查。403 是必要条件,因为 API 可以使用身份验证并返回 403 响应。

云管理员

创建应用程序负载均衡器。

  1. 在可路由的私有子网中创建应用程序负载均衡器(内部)。

  2. 将 443 侦听器添加至应用程序负载均衡器,然后从 ACM 中选择证书。

云管理员

创建侦听器规则。

创建侦听器规则,以执行以下操作:

  1. 将主机 api.domain.com 转发到 API Gateway 目标组

  2. 将主机 ui.domain.com 转发到 UI 资源的目标组

云管理员
任务描述所需技能

创建私有托管区。

为 domain.com 创建私有托管区

云管理员

创建域记录。

对于以下,创建 CNAME 记录

  • 值设置为应用程序负载均衡器的 DNS 名称的 API

  • 值设置为应用程序负载均衡器的 DNS 名称的 UI

云管理员
任务描述所需技能

创建和配置私有 API 端点。

  1. 要创建私有 API 端点,请按照 API Gateway 文档在 Amazon API Gateway 中创建私有 API的说明进行操作。 

  2. 将资源策略配置为仅允许从 VPC 端点调用 API。有关更多信息,请参阅 API Gateway 文档中的使用 API Gateway 资源策略控制 API 的访问权限

应用程序开发人员、云管理员

创建自定义域名。

  1. 为 api.domain.com 创建自定义域名。有关更多信息,请参阅 API Gateway 文档的为 REST API 设置自定义域名

  2. 选择已创建的 API 和阶段。有关更多信息,请参阅 API Gateway 文档中的使用 REST API 的 API 映射

云管理员

相关资源