如何使用接口 VPC 端点访问另一个账户中的 API Gateway 私有 REST API?
我想使用接口虚拟私有云 (VPC) 端点来访问另一个 AWS 账户中的Amazon API Gateway 私有 REST API。
简述
要使用接口 VPC 端点访问另一个 AWS 账户中的 API Gateway 私有 REST API,请执行以下操作:
- 在一个账户(账户 A)中的 Amazon Virtual Private Cloud (Amazon VPC) 中创建接口端点。
- 在第二个账户(账户 B)中创建 API Gateway 私有 REST API。
- 为私有 REST API 配置资源策略,允许接口端点调用 API。
- 为私有 REST API 设置方法。
- 部署私有 REST API。
- 从账户 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 资源策略限制主体对端点的访问。有关更多信息,请参阅应用最低权限许可。
创建接口端点时,请执行以下操作:
- 最佳做法是在不同的可用区选择多个子网。跨多个可用区配置子网时,接口端点更能抵御潜在的可用区故障。
- 激活私有 DNS 以使用公有或私有 DNS 连接到您的私有 REST API。
**注意:**为接口 VPC 端点激活私有 DNS 时,无法再从 Amazon VPC 访问 API Gateway 公有 API。有关更多信息,请参阅从 VPC 连接到我的 API Gateway API 时,为什么会收到 HTTP 403 禁止错误? - 您的安全组必须有一条规则,即允许 TCP 端口 443 入站来自您的 Amazon VPC 中的一个 IP 地址范围的 HTTPS 流量。该规则也可以来自您的 Amazon VPC 中的另一个安全组。
**注意:**如果您没有符合其中一个要求的安全组,则请创建一个新的安全组。如果您未指定安全组,则默认安全组将与端点网络接口相关联。
获取接口端点的 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
- 在账户 B 中,打开 API Gateway 控制台。
- 选择创建 API。
- 对于选择 API 类型,在 REST API 私有下,选择构建。
- 在创建页面上,将选择协议设置为 REST。
- 对于创建新 API,选择新建 API。
- 在设置下,输入以下信息:
对于 API 名称,输入一个名称。
(可选)对于描述,输入描述。
将端点类型设置为私有。
对于 VPC 端点 ID,输入您的接口端点 ID。然后,选择添加。
**注意:**当您将接口端点与私有 REST API 关联时,API Gateway 会生成新的 Amazon Route 53 别名记录。您可以使用 Route53 别名访问您的私有 API。 - 选择创建 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 设置方法
- 在 API Gateway 控制台的导航窗格中,在您的 API 下,选择资源。
- 在资源窗格中,选择操作,然后选择创建方法。
- 在 /资源节点下的下拉列表中,选择任意,然后选择复选标记图标。
- 在任意设置窗格上,对于集成类型,选择模拟。
**注意:**模拟集成会响应到达它的任何请求。 - 选择保存。
有关更多信息,请参阅在 API Gateway 中设置 REST API 方法。
部署私有 REST API
- 在 API Gateway 控制台的资源窗格上,选择操作,然后选择部署 API。
- 在部署 API 对话框中,输入以下信息:
对于部署阶段,选择新阶段。
对于阶段名称,输入一个名称,例如 dev 或 test。 - 选择部署。
- 在阶段编辑器窗格上,找到以下消息:如果启用了私有 DNS,请使用此 URL:。复制您的私有 REST API 的调用 URL。
**注意:**使用私有 REST API 的调用 URL 来测试设置。
有关更多信息,请参阅使用 API Gateway 控制台部署私有 API。
从账户 A 调用私有 REST API 来测试设置
- 在账户 A 中,在与接口端点相同的 Amazon VPC 中启动 Amazon Elastic Compute Cloud (Amazon EC2) 实例。
重要信息:选择与接口端点关联的安全组。 - 连接到 Amazon EC2 实例。
**注意:**您的 AWS 账户可能会产生 EC2 实例费用。如果您创建了要测试的实例,请在完成后终止实例,以防止重复收费。 - 从 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 响应。
相关信息
相关内容
- AWS 官方已更新 1 个月前
- AWS 官方已更新 3 个月前
- AWS 官方已更新 1 个月前
- AWS 官方已更新 3 个月前