Amazon API Gateway
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

在 Amazon API Gateway 中创建私有 API

通过使用 Amazon API Gateway,您可以创建只能使用接口 VPC 终端节点从 Amazon Virtual Private Cloud (VPC) 访问的私有 REST API,该接口是您在 VPC 中创建的终端节点网络接口 (ENI)。通过使用资源策略,您可以允许或拒绝从选定的 VPC 和 VPC 终端节点(包括跨 AWS 账户)对您的 API 进行访问。每个终端节点都可用于访问多个私有 API。您还可以使用 AWS Direct Connect 建立从本地网络到 Amazon VPC 的连接,并在该连接上访问您的私有 API。在所有情况下,您的私有 API 的流量使用安全的连接,不会离开 Amazon 网络;它与公有 Internet 隔离开来。

您可以通过 API Gateway 的接口 VPC 终端节点(如下图所示)访问您的私有 API。如果您启用了私有 DNS,则可以使用私有或公有 DNS 名称来访问您的 API。如果您禁用了私有 DNS,则只能使用公有 DNS 名称。

注意

API Gateway 私有 API 仅支持 TLS 1.2。不支持早期 TLS 版本。


            在启用私有 DNS 的情况下访问私有 API

概括来说,创建私有 API 的步骤如下所示:

  1. 首先,在您的 VPC 中为 API 执行(称为 execute-api)的 API Gateway 组件服务创建接口 VPC 终端节点

  2. 创建并测试您的私有 API。

    1. 使用以下程序之一创建 API:

    2. 要授予对您的 VPC 终端节点的访问权限,请创建一个资源策略并将其附加到您的 API

    3. 测试您的 API

注意

下面的过程假定您已经有了一个完全配置的 VPC。要获得更多信息,并开始创建 VPC,请参阅 Amazon VPC 用户指南 中的 Amazon VPC 入门

为 API Gateway execute-api 创建接口 VPC 终端节点

API 执行的 API Gateway 组件服务称为 execute-api。要在部署私有 API 后访问它,您需要在 VPC 中为其创建接口 VPC 终端节点。

一旦您创建了 VPC 终端节点,便可以使用它来访问多个私有 API。

为 API Gateway execute-api 创建接口 VPC 终端节点

  1. 登录到位于 https://console.aws.amazon.com/vpc/ 的 Amazon VPC 控制台。

  2. 在导航窗格中,选择 Endpoints (终端节点)Create Endpoint (创建终端节点)

  3. 对于服务类别,请确保选中 AWS 服务

  4. 对于服务名称,选择 API Gateway 服务终端节点,包括要连接到的区域。这将采用 com.amazonaws.region.execute-api 形式,例如 com.amazonaws.us-east-1.execute-api

    对于类型,请确保它指示接口

  5. 完成以下信息:

    • 对于 VPC,选择您要在其中创建终端节点的 VPC。

    • 对于子网,选择要在其中创建终端节点网络接口的子网(可用区)。

      注意

      并非所有可用区都支持所有 AWS 服务。

    • 对于启用私有 DNS 名称,您可以选中此复选框以便为接口终端节点启用私有 DNS。

      如果您选择启用私有 DNS,您将能够通过私有或公有 DNS 访问您的 API。(此设置不影响谁可以访问您的 API,只影响他们可以使用哪些 DNS 地址。) 但是,您无法通过使用启用了私有 DNS 的 API Gateway VPC 终端节点从 VPC 访问公有 API。请注意,如果您使用边缘优化的自定义域名来访问公有 API,则这些 DNS 设置不会影响从 VPC 调用这些公有 API 的功能。使用边缘优化的自定义域名来访问您的公有 API(同时使用私有 DNS 访问您的私有 API)是从 VPC 访问公有和私有 API 的一种方法,其中的终端节点是在启用了私有 DNS 的情况下创建的。

      注意

      建议启用私有 DNS。如果您选择不启用私有 DNS,您将只能通过公有 DNS 访问您的 API。

      要使用私有 DNS 选项,您的 VPC 的 enableDnsSupportenableDnsHostnames 属性必须设置为 true。有关更多信息,请参阅 Amazon VPC 用户指南 中的 VPC 中的 DNS 支持更新对 VPC 的 DNS 支持

    • 对于安全组,选择要与 VPC 终端节点网络接口关联的安全组。

      您选择的安全组必须设置为允许来自您的 VPC 中的 IP 范围或您的 VPC 中的其他安全组的 TCP 端口 443 入站 HTTPS 通信。

  6. 选择创建终端节点

使用 API Gateway 控制台创建私有 API

使用 API Gateway 控制台创建私有 API

  1. 登录到 API Gateway 控制台,然后选择 + Create API (+ 创建 API)

  2. Create new API (创建新 API) 下,选择 New API (新建 API) 选项。

  3. API name (API 名称) 键入名称(例如,Simple PetStore (Console, Private))。

  4. 终端节点类型选择 Private

  5. 选择 Create API (创建 API)

从这里开始,您可以设置 API 方法及其关联集成,如 使用 HTTP 自定义集成创建 API 的步骤 1-6 中所述。

注意

除非您的 API 有一个资源策略来授予对您的 VPC 或 VPC 终端节点的访问权限,否则所有 API 调用都将失败。测试并部署 您的 API 之前,您需要创建资源策略并将其附加到 API,如 为私有 API 设置资源策略 中所述。

使用 AWS CLI 创建私有 API

要使用 AWS CLI 创建私有 API,请调用 create-rest-api 命令:

aws apigateway create-rest-api \ --name 'Simple PetStore (AWS CLI, Private)' \ --description 'Simple private PetStore API' \ --region us-west-2 \ --endpoint-configuration '{ "types": ["PRIVATE"] }'

成功调用返回类似于以下内容的输出:

{ "createdDate": "2017-10-13T18:41:39Z", "description": "Simple private PetStore API", "endpointConfiguration": { "types": "PRIVATE" }, "id": "0qzs2sy7bh", "name": "Simple PetStore (AWS CLI, Private)" }

从这里开始,您可以按照使用 AWS CLI 命令设置边缘优化的 API中提供的相同说明来为此 API 设置方法和集成。

当您准备好测试 API 时,请确保创建资源策略并将其附加到 API,如 为私有 API 设置资源策略 中所述。

使用适用于 JavaScript 的 AWS 开发工具包创建私有 API

使用适用于 JavaScript 的 AWS 开发工具包创建私有 API:

apig.createRestApi({ name: "Simple PetStore (node.js SDK, private)", endpointConfiguration: { types: ['PRIVATE'] }, description: "Demo private API created using the AWS SDK for node.js", version: "0.00.001" }, function(err, data){ if (!err) { console.log('Create API succeeded:\n', data); restApiId = data.id; } else { console.log('Create API failed:\n', err); } });

成功调用返回类似于以下内容的输出:

{ "createdDate": "2017-10-13T18:41:39Z", "description": "Demo private API created using the AWS SDK for node.js", "endpointConfiguration": { "types": "PRIVATE" }, "id": "0qzs2sy7bh", "name": "Simple PetStore (node.js SDK, private)" }

完成前面的步骤之后,您可以按照使用适用于 Node.js 的 AWS 开发工具包设置边缘优化的 API中的说明来为此 API 设置方法和集成。

当您准备好测试 API 时,请确保创建资源策略并将其附加到 API,如 为私有 API 设置资源策略 中所述。

为私有 API 设置资源策略

在访问私有 API 之前,您需要创建一个资源策略并将其附加到 API。这将从您的 VPC 和 VPC 终端节点或从您显式授予访问权限的其他 AWS 账户中的 VPC 和 VPC 终端节点授予对 API 的访问权限。

为此,请遵循创建 API Gateway 资源策略并将其附加到 API中的说明。在步骤 4 中,选择 Source VPC Whitelist (源 VPC 白名单) 示例。将 {{vpceID}}(包括大括号)替换为您的 VPC 终端节点 ID,然后选择 Save (保存) 以保存您的资源策略。

使用 API Gateway 控制台部署私有 API

要部署您的私有 API,请在 API Gateway 控制台中执行以下操作:

  1. 在左侧导航窗格中,选择所需 API,然后从 Actions (操作) 下拉菜单中选择 Deploy API (部署 API)

  2. Deploy API (部署 API) 对话框中,选择一个阶段(或针对 API 的第一次部署 [New Stage]);在 Stage name (阶段名称) 输入字段中输入一个名称(例如“test”、“prod”、“dev”等);(可选)在 Stage description (阶段描述) 和/或 Deployment description (部署描述) 中提供一个描述;然后选择 Deploy (部署)

私有 API 开发注意事项

  • 您可以将现有的公有 API(区域或边缘优化)转换为私有 API,并且可以将私有 API 转换为区域 API。您不能将私有 API 转换为边缘优化 API。有关更多信息,请参阅 在 API Gateway 中更改公有或私有 API 终端节点类型.

  • 要向 VPC 和 VPC 终端节点授予对私有 API 的访问权限,您需要创建一个资源策略并将其附加到新创建的(或转换的)API 中。在您执行此操作之前,所有对 API 的调用都将失败。有关更多信息,请参阅 为私有 API 设置资源策略.

  • 私有 API 不支持自定义域名

  • 您可以使用单个 VPC 终端节点访问多个私有 API。

  • 私有 API 的 VPC 终端节点与其他接口 VPC 终端节点的限制相同。有关更多信息,请参阅 Amazon VPC 用户指南 中的 接口终端节点属性和限制