跳至内容

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

4 分钟阅读
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 来测试设置。

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

解决方法

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

创建新的接口 VPC 端点

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

**重要事项:**对于 Policy(策略),选择 Full access(完全访问)。最佳做法是使用 VPC 端点策略限制 API ID 对端点的访问。另一种最佳做法是使用 API Gateway 资源策略限制主体对端点的访问。有关详细信息,请参阅应用最低权限许可

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

获取接口端点的 VPC 端点 ID

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

**注意:**创建和配置私有 REST API 时,请使用此 VPC 端点 ID

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

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

在另一个账户(账户 B)中创建 API Gateway 私有 REST API

  1. 在账户 B 中,打开 API Gateway 控制台
  2. 选择 Create API(创建 API)。
  3. 对于 Choose an API type(选择 API 类型),在 REST API Private(REST API 私有)下,选择 Build(构建)。
  4. API details(API 详细信息)下,输入以下信息:
    对于 API name(API 名称),输入一个名称。
    (可选)对于 Description(描述),输入描述。
    Endpoint Type(端点类型)设置为 Private(私有)。
    对于 VPC Endpoint IDs(VPC 端点 ID),输入您的接口端点 ID。然后,选择 Add(添加)。
    **注意:**当您将接口端点与私有 REST API 关联时,API Gateway 会生成新的 Amazon Route 53 别名记录。您可以使用 Route53 别名访问您的私有 API
  5. 选择 Create API(创建 API)。

有关详细信息,请参阅创建私有 API

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

  1. API Gateway 控制台的导航窗格中,在您的 API 下,选择 Resource Policy(资源策略)。
  2. Resource Policy(资源策略)页面上,在文本框中输入以下示例资源策略:
    {  "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 下,选择 Resources(资源)。
  2. Resources(资源)窗格中,选择 Actions(操作),然后选择 Create Method(创建方法)。
  3. / resource(/资源)节点下的下拉列表中,选择 ANY(任意),然后选择复选标记图标。
  4. / - ANY - Setup(/ - 任意 - 设置)窗格中,对于 Integration type(集成类型),选择 Mock(模拟)。
    **注意:**模拟集成会响应到达它的任何请求。
  5. 选择 Save(保存)。

有关详细信息,请参阅 API Gateway 中用于 REST API 的方法

部署私有 REST API

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

有关详细信息,请参阅部署私有 API

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

  1. 在账户 A 中,在与接口端点相同的 VPC 中启动 Amazon Elastic Compute Cloud (Amazon EC2) 实例
    **重要事项:**选择与接口端点关联的安全组。
  2. 连接到 Amazon EC2 实例
    **注意:**您的 AWS 账户可能会产生 EC2 实例费用。如果您创建了一个实例用于测试,请在完成测试后终止该实例,以避免产生更多费用。
  3. 从 EC2 实例的命令行中,运行以下任一 curl 命令来调用账户 B 中的私有 REST API。
    **注意:**有关详细信息,请参阅“使用特定于端点的公有 DNS 主机名调用您的私有 API”。
    对于私有 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”。
    对于 Route53 别名
    运行以下命令:
    curl -i https://a1bc234d5e-vpce-1a2b3c456d7e89012.execute-api.region.amazonaws.com/stage-name
    
    **注意:**请将 a1bc234d5e 替换为您的 API ID,将 vpce-1a2b3c456d7e89012 替换为接口端点 ID,将 region 替换为您的 API 区域。请将 stage-name 替换为部署私有 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 名称,将 stage-name 替换为部署私有 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 名称,将 stage-name 替换为部署私有 API 的阶段的名称。请将 a1bc234d5e 替换为您的 API ID。
  4. 查看命令输出。连接成功时,API Gateway 将返回 200 OK 响应。

相关信息

如何解决连接到 API Gateway 私有 API 端点时出现的问题?

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

Multi-Region private API gateway