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

上次更新日期:2022 年 1 月 21 日

如何通过 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 下,选择 Endpoints(终端节点)。
  3. 对于 Service category(服务类别),选择 AWS 服务
  4. 对于 Service Name(服务名称),按关键字搜索“execute-api”。这将返回一个结果:“com.amazonaws.REGION.execute-api”。
  5. 选择“com.amazonaws.REGION.execute-api”。
  6. 对于 VPC,选择已配置 Direct Connect 连接的 Amazon VPC。
  7. 对于 Subnets(子网),选择您希望从中访问 API 的子网。
  8. 对于 Enable DNS name(启用 DNS 名称),清除 Enable for this endpoint(为此终端节点启用)框。禁用此设置要求 Amazon VPC 启用“DNS 主机名”,这是一项可选功能。如果该 VPC 使用 Amazon 提供的 DNS,则启用此设置会中断对已部署 Amazon VPC 中的公有 API Gateway API 的所有访问。
  9. 对于 Security group(安全组),选择 Amazon VPC 终端节点的安全组。安全组必须允许从您的 Amazon VPC 中访问入站 TCP/443。
  10. 对于 Policy(策略),请选择 Full Access(完全访问)。此选项允许使用 AWS IAM 权限进行从 Amazon VPC 到 VPC 终端节点的所有连接。
  11. 选择 Create endpoint(创建终端节点)。
  12. 记下 Amazon VPC 终端节点 ID(例如,“vpce-01234567890abcdef”)。您稍后需要此 ID 来编辑 API 资源策略。

创建私有 REST API(如果您还没有)

  1. 打开 API Gateway 控制台
  2. 选择 Direct Connect 连接的区域。
  3. 选择 Create API(创建 API)。
  4. 对于 API 类型,选择 REST API 私有
  5. 对于 API 协议,选择 REST
  6. Create a New API(创建新的 API)下,选择 Example API(示例 API)。
  7. Settings(设置)下,确认 Endpoint Type(终端节点类型)设置为 Private(私有)。
  8. 选择 Import(导入)。

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

  1. 在 API Management(API 管理)页面上,选择 Resource Policy(资源策略)。
  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 控制台Endpoints(终端节点)下查找该 ID。
注意:此示例策略允许从 Amazon VPC 中访问 API 上的所有资源。要进一步限制访问权限,请修改 Resource(资源)键。

3.    选择 Save(保存)。

重新部署 API 以提交更改

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

  1. API Gateway 控制台中,从导航窗格中选择 Resources(资源)。
  2. 选择 Actions(操作)。
  3. 对于 API Actions(API 操作),选择 Deploy API(部署 API)。
  4. 对于 Deployment stage(部署阶段),选择 [New Stage]([新建阶段])。
  5. 输入阶段的名称。
  6. 选择 Deploy(部署)。所做的更改将部署到 API 中。此过程可能需要几分钟来填充。

测试从 Direct Connect 连接来访问 API

  1. Amazon VPC 控制台上,选择 Endpoints(终端节点),然后选择您创建的 VPC 终端节点。
  2. Details(详细信息)下,复制 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>

响应应返回与您的 Amazon VPC 终端节点对应的私有 IP 地址。如果您未在响应中收到私有 IP 地址,请在 Amazon VPC 控制台Endpoints(终端节点)下检查 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>

响应的第一行应包含“HTTP/1.1 200 OK”。

如果您未收到响应,请检查与 Amazon VPC 终端节点相关联的安全组是否允许通过 TCP/443 从您的源 IP 地址进行入站连接。此外,请检查是否已正确使用 Direct Connect 连接来进行连接。

如果您收到“403 禁止访问”响应,请检查是否已设置 <YOUR_API_ID> 标头。确认您正在发送 GET 请求。此外,请检查是否已正确添加 <STAGE>


这篇文章对您有帮助吗?


您是否需要账单或技术支持?