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

上次更新日期:2020 年 8 月 24 日

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

解决方法

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

VPC 终端节点允许 VPC 中的私有资源与 API Gateway 服务安全通信。为 API Gateway 创建 VPC 终端节点:

1.    打开 Amazon Virtual Private Cloud (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 连接的 VPC。

7.    对于子网,选择您希望从中访问 API 的子网。

8.    对于启用 DNS 名称,清除为此终端节点启用框。禁用此设置要求 VPC 启用“DNS 主机名”,这是一项可选功能。如果该 VPC 使用 Amazon 提供的 DNS,则启用此设置会中断对已部署 VPC 中的公有 API Gateway API 的所有访问。

9.    对于安全组,选择 VPC 终端节点的安全组。安全组必须允许从您的 VPC 中访问入站 TCP/443。

10.    对于策略,请选择完全访问。此选项允许使用 AWS IAM 权限进行从 VPC 到 VPC 终端节点的所有连接。

11.    选择创建终端节点

12.    记下 VPC 终端节点 ID(例如,“vpce-01234567890abcdef”)。您稍后需要此 ID 来编辑 API 资源策略。

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

1.    打开 API Gateway 控制台

2.    选择 Direct Connect 连接的区域。

3.    选择创建 API

4.    对于 API 类型,选择 REST API 私有

5.    对于 API 协议,选择 REST

6.    在创建新的 API 下,选择示例 API

7.    在设置下,确认终端节点类型设置为私有

8.    选择导入

授予 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 终端节点后记下的 VPC 终端节点 ID。或者,在 Amazon VPC 控制台终端节点下查找该 ID。
注意:此示例策略允许从 VPC 中访问 API 上的所有资源。要进一步限制访问权限,请修改资源键。

3.    选择保存

重新部署 API 以提交更改

现在您已创建 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 连接到 VPC 的计算机上,运行以下命令之一以测试 VPC 终端节点的 DNS 主机名解析。

Windows PowerShell:

nslookup <YOUR_VPCE_HOSTNAME>

-或者-

macOS/Unix:

nslookup <YOUR_VPCE_HOSTNAME>

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

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

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


这篇文章对您有帮助吗?


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