如何使用接口 VPC 端点访问另一个账户中的 API Gateway 私有 REST API?

3 分钟阅读
0

我想使用接口虚拟私有云 (VPC) 端点来访问另一个 AWS 账户中的Amazon API Gateway 私有 REST API。

简述

要使用接口 VPC 端点访问另一个 AWS 账户中的 API Gateway 私有 REST API,请执行以下操作:

  1. 在一个账户(账户 A)中的 Amazon Virtual Private Cloud (Amazon VPC) 中创建接口端点。
  2. 在第二个账户(账户 B)中创建 API Gateway 私有 REST API。
  3. 为私有 REST API 配置资源策略,允许接口端点调用 API。
  4. 为私有 REST API 设置方法。
  5. 部署私有 REST API。
  6. 从账户 A 调用私有 REST API 来测试设置。

注意: Amazon API Gateway 私有 REST API 和 VPC 端点必须位于同一 AWS 区域中。

解决方案

在一个账户(账户 A)中的 Amazon VPC 中创建接口端点

创建新的接口 VPC 端点

在账户 A 中,按照为 API Gateway execute-api 创建接口 VPC 端点中的说明进行操作。

**重要信息:**对于 “策略”,选择 “**完全访问权限” **。最佳做法是使用 VPC 端点策略限制 API ID 对端点的访问。另一种最佳做法是使用 API Gateway 资源策略限制主体对端点的访问。有关更多信息,请参阅应用最低权限许可

创建接口端点时,请执行以下操作:

获取接口端点的 VPC 端点 ID

创建接口端点后,将显示 VPC 端点 ID。复制新接口端点的 VPC 端点 ID(例如:vpce-1a2b3c456d7e89012)。然后,选择关闭

**注意:**在创建和配置私有 REST API 时使用此 ID。

获取接口端点的公有 DNS 名称

选择关闭后,Amazon VPC 控制台会显示端点页面。在端点页面的详细信息选项卡上的 DNS 名称列中,复制您的接口端点的公有 DNS 名称,例如:vpce-1a2b3c456d7e89012-f3ghijkl.execute-api.region.vpce.amazonaws.com

在第二个账户(账户 B)中创建 API Gateway 私有 REST API

  1. 在账户 B 中,打开 API Gateway 控制台
  2. 选择创建 API
  3. 对于选择 API 类型,在 REST API 私有下,选择构建
  4. 创建页面上,将选择协议设置为 REST
  5. 对于创建新 API,选择新建 API
  6. 设置下,输入以下信息:
    对于 API 名称,输入一个名称。
    (可选)对于描述,输入描述。
    端点类型设置为私有
    对于 VPC 端点 ID,输入您的接口端点 ID。然后,选择添加
    **注意:**当您将接口端点与私有 REST API 关联时,API Gateway 会生成新的 Amazon Route 53 别名记录。您可以使用 Route53 别名访问您的私有 API
  7. 选择创建 API

有关更多信息,请参阅在 Amazon API Gateway 中创建私有 API

为私有 REST API 配置资源策略,允许接口端点调用 API

1.在 API Gateway 控制台的导航窗格中,在您的 API 下,选择资源策略

2.在资源策略页面上,在文本框中输入以下示例资源策略:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Principal": "*",
      "Action": "execute-api:Invoke",
      "Resource": "execute-api:/*/*/*",
      "Condition": {
        "StringNotEquals": {
          "aws:sourceVpce": "vpce-1a2b3c456d7e89012"
        }
      }
    },
    {
      "Effect": "Allow",
      "Principal": "*",
      "Action": "execute-api:Invoke",
      "Resource": "execute-api:/*/*/*"
    }
  ]
}

**注意:**将 vpce-1a2b3c456d7e89012 替换为接口端点 ID。

有关更多信息,请参阅为私有 API 设置资源策略

为私有 REST API 设置方法

  1. API Gateway 控制台的导航窗格中,在您的 API 下,选择资源
  2. 资源窗格中,选择操作,然后选择创建方法
  3. /资源节点下的下拉列表中,选择任意,然后选择复选标记图标。
  4. 任意设置窗格上,对于集成类型,选择模拟
    **注意:**模拟集成会响应到达它的任何请求。
  5. 选择保存

有关更多信息,请参阅在 API Gateway 中设置 REST API 方法

部署私有 REST API

  1. API Gateway 控制台资源窗格上,选择操作,然后选择部署 API
  2. 部署 API 对话框中,输入以下信息:
    对于部署阶段,选择新阶段
    对于阶段名称,输入一个名称,例如 devtest
  3. 选择部署
  4. 阶段编辑器窗格上,找到以下消息:如果启用了私有 DNS,请使用此 URL:。复制您的私有 REST API 的调用 URL
    **注意:**使用私有 REST API 的调用 URL 来测试设置。

有关更多信息,请参阅使用 API Gateway 控制台部署私有 API

从账户 A 调用私有 REST API 来测试设置

  1. 在账户 A 中,在与接口端点相同的 Amazon VPC 中启动 Amazon Elastic Compute Cloud (Amazon EC2) 实例
    重要信息:选择与接口端点关联的安全组
  2. 连接到 Amazon EC2 实例
    **注意:**您的 AWS 账户可能会产生 EC2 实例费用。如果您创建了要测试的实例,请在完成后终止实例,以防止重复收费。
  3. 从 Amazon EC2 实例的命令行中,运行以下任一 curl 命令来调用账户 B 中的私有 REST API。
    **注意:**有关更多信息,请参阅使用特定于端点的公有 DNS 主机名调用您的私有 API。有关 curl 的更多信息,请参阅 curl 项目网站。

对于私有 DNS 名称

运行以下命令:

curl -i https://a1bc234d5e.execute-api.region.amazonaws.com/stage-name

**注意:**将 https://a1bc234d5e.execute-api.region.amazonaws.com/stage-name 替换为您的私有 API 的调用 URL。此命令仅在您为接口端点启用私有 DNS 时起作用。有关更多信息,请参阅使用私有 DNS 名称调用您的私有 API

对于 Route 53 别名

运行以下命令:

curl -i https://a1bc234d5e-vpce-1a2b3c456d7e89012.execute-api.region.amazonaws.com/stage-name

注意:a1bc234d5e 替换为您的 API ID,将 vpce-1a2b3c456d7e89012 替换为接口端点 ID,将区域替换为您的 API 区域。将阶段名称替换为部署私有 API 的阶段的名称。有关更多信息,请参阅使用 Route53 别名访问您的私有 API

对于带主机标头的公有 DNS 名称

运行以下命令:

curl -i https://vpce-1a2b3c456d7e89012-f3ghijkl.execute-api.region.vpce.amazonaws.com/stage-name -H "Host: a1bc234d5e.execute-api.region.amazonaws.com"

注意:vpce-1a2b3c456d7e89012-f3ghijkl.execute-api.region.vpce.amazonaws.com 替换为接口端点的公有 DNS 名称,将阶段名称替换为部署私有 API 的阶段的名称。将 a1bc234d5e.execute-api.region.amazonaws.com 替换为您的私有 API 的调用 URL。

对于带有 x-apigw-api-id 标头的公有 DNS 名称

运行以下命令:

curl -i https://vpce-1a2b3c456d7e89012-f3ghijkl.execute-api.region.vpce.amazonaws.com/stage-name -H "x-apigw-api-id:a1bc234d5e"

注意:vpce-1a2b3c456d7e89012-f3ghijkl.execute-api.region.vpce.amazonaws.com 替换为接口端点的公有 DNS 名称,将阶段名称替换为部署私有 API 的阶段的名称。将 a1bc234d5e 替换为您的 API ID。

4.查看命令输出。连接成功后,API Gateway 会返回 200 OK 响应。

相关信息

如何排查连接至 API 网关私有 API 端点时出现的问题?

使用接口 VPC 端点访问 AWS 服务

Multi-Region private API gateway