如何通过 Direct Connect 连接来连接到私有 API Gateway?

3 分钟阅读
0

我想通过 AWS Direct Connect 连接来连接到私有 Amazon API Gateway。

解决方法

为 Amazon API Gateway 服务创建 Amazon Virtual Private Cloud(Amazon VPC)端点

Amazon VPC 端点允许 VPC 中的私有资源与 API Gateway 服务安全通信。要为 API Gateway 创建 Amazon VPC 端点,请按照以下步骤操作:

  1. 打开 Amazon VPC 控制台
  2. 在导航窗格中的 Virtual Private Cloud 下,选择端点
  3. 对于服务类别,请选择 AWS 服务
  4. 对于服务名称,按关键字搜索“execute-api”。此搜索会返回一个结果:“com.amazonaws.REGION.execute-api”。
  5. 选择“com.amazonaws.REGION.execute-api”。
  6. 对于 VPC,选择已配置 Direct Connect 连接的 Amazon VPC。
  7. 对于子网,选择要访问 API 的子网。
  8. 对于启用 DNS 名称,清除为此端点启用框。关闭此设置要求 Amazon VPC 启用“DNS 主机名”,这是一项可选功能。如果 VPC 使用 Amazon 提供的 DNS,则启用此设置会中断对已部署 Amazon VPC 中公有 API Gateway API 的所有访问权限。
  9. 对于安全组,为 Amazon VPC 端点选择安全组。该安全组必须允许从您的 Amazon VPC 通过 TCP/443 入站进行访问。
  10. 对于策略,选择完全访问。此选项允许使用 AWS IAM 权限进行从 Amazon VPC 到 VPC 端点的所有连接。
  11. 选择创建端点
  12. 记下 Amazon VPC 端点 ID(如“vpce-01234567890abcdef”)。稍后需要此 ID 来编辑 API 的资源策略。

如果您还没有 REST API,请创建私有 REST API

  1. 打开 API Gateway 控制台
  2. 选择 Direct Connect 连接的区域。
  3. 选择创建 API
  4. 对于 API 类型,选择 REST API 私有
  5. 对于 API 协议,选择 REST
  6. 创建新 API 下,选择示例 API
  7. 设置下,确认将端点类型设置为私有
  8. 选择导入

授予 Amazon VPC 端点访问私有 REST API 的权限

  1. 在“API 管理”页面上,选择资源策略
  2. 将以下策略复制到资源策略中。
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Deny",
          "Principal": "*",
          "Action": "execute-api:Invoke",
          "Resource": "execute-api:/*/*/*",
          "Condition": {
            "StringNotEquals": {
              "aws:sourceVpce": "{{vpceID}}"
            }
          }
        },
        {
          "Effect": "Allow",
          "Principal": "*",
          "Action": "execute-api:Invoke",
          "Resource": "execute-api:/*/*/*"
        }
      ]
    }
    {{vpceID}} 字符串替换为您在创建 VPC 端点后记下的 Amazon VPC 端点 ID。或者,在 Amazon VPC 控制台中的端点下查看该 ID。
    **注意:**此示例策略允许从您的 Amazon VPC 访问 API 上的所有资源。要进一步限制访问权限,请修改 Resource 键。
  3. 选择保存

部署 API 以提交更改

现在您已创建 API 并添加了资源策略,请将 API 部署到某个阶段以实施更改:

  1. API Gateway 控制台上,从导航窗格中选择资源
  2. 选择操作
  3. API 操作下,选择部署 API
  4. 对于部署阶段,选择 [新阶段]
  5. 输入阶段的名称。
  6. 选择部署。更改已部署到 API。此过程可能需要几分钟才能传播。

测试通过 Direct Connect 连接对 API 的访问权限

请按照以下步骤测试访问权限:

  1. Amazon VPC 控制台上,选择端点,然后选择您创建的 VPC 端点。

  2. 详细信息下,复制 VPC 端点的 DNS 名称。例如,
    “vpce-0123456789abcdef-b238e1kf.execute-api.REGION.vpce.amazonaws.com”。

  3. 在使用 Direct Connect 连接到 Amazon VPC 的计算机上,运行以下一种命令来测试 VPC 端点的 DNS 主机名解析。

    Windows PowerShell:

    nslookup <YOUR_VPCE_HOSTNAME>

    -或者-

    macOS/Unix:

    nslookup <YOUR_VPCE_HOSTNAME>

    **注意:**将 YOUR_VPCE_HOSTNAME 替换为之前创建的 VPC 端点的主机名。

    该响应会返回与您的 Amazon VPC 端点相对应的私有 IP 地址。如果您未在响应中收到私有 IP 地址,请前往 Amazon VPC 控制台,检查端点下的 Amazon VPC 端点主机名。

  4. 如果 DNS 正在运行,则发出测试 HTTP 请求。为此,您需要从 API Gateway 控制台获取 API ID。从列表中复制 API ID。API ID 是一个如“chw1a2q2xk.”的字符串。

  5. 在连接到 Direct Connect 连接的本地计算机上,运行以下命令:

    Windows PowerShell:

    curl -H @{'x-apigw-api-id' = '<YOUR_API_ID>'} https://<YOUR_VPCE_HOSTNAME>/<STAGE>

    -或者-

    macOS/Unix:

    curl -IX GET -H 'x-apigw-api-id:<YOUR_API_ID>' https://<YOUR_VPCE_HOSTNAME>/<STAGE>

    **注意:**将 YOUR_API_ID 替换为私有 REST API ID 或之前创建的 API 的 ID。将 YOUR_VPCE_HOSTNAME 替换为 VPC 端点的主机名,并将 STAGE 替换为之前创建的部署阶段。

请确保以下各项:

  • 响应的第一行包括“HTTP/1.1 200 OK”。
  • 如果未收到响应,请检查与 Amazon VPC 端点关联的安全组是否允许从来源 IP 地址通过 TCP/443 进行入站连接。此外,请检查是否已正确使用 Direct Connect 连接来进行连接。
  • 如果收到“403 Forbidden”响应,请检查是否已设置 <YOUR_API_ID> 标头。确认您正在发送 GET 请求。此外,请检查 <STAGE> 是否已正确添加。

**注意:**由与此 API 不同的域提供服务的客户端 Web 应用程序可能会与此 API 进行交互。在这种情况下,浏览器会生成 CORS 预检请求,从而难以设置 x-apigw-api-id 标头。要解决此问题,请改用 Route53 别名访问私有 API。

相关信息

什么是 CORS?

如何排查 Direct Connect 网关路由问题?

如何设置 Direct Connect 网关?

AWS 官方
AWS 官方已更新 3 个月前