如何通过本地/VPN 访问私有 API 网关?

Har*_*uez 5 amazon-web-services amazon-vpc aws-api-gateway

我创建了一个 API 网关来运行 Lambda 函数。这旨在用作内部服务,因此我的 API 网关是私有的。为了使 API 网关能够私下访问,我执行了以下操作:

\n\n
    \n
  1. 在我们的 VPC 的几个子网中创建了一个 VPC 终端节点
  2. \n
  3. 将端点添加到仅允许来自本地的流量的安全组
  4. \n
  5. API网关新增资源策略,仅允许来自VPC端点的请求
  6. \n
\n\n

这些步骤有效地阻止公共请求,并允许通过 VPC 终端节点创建的 DNS 名称从本地发出请求。

\n\n

这种方法的问题是为了调用 API,必须指定Hostx-apigw-api-id在请求中目标是让用户能够在浏览器上输入 URL 和查询字符串参数,并从服务获取响应。

\n\n

Amazon API Gateway 类型、用例和性能讨论了一种避免指定 API ID 或主机的方法,但它没有提供太多细节。相关部分表示解决方案是:

\n\n
\n

将具有 SSL 证书(例如 api.mydomain.com)的应用程序负载均衡器放置在 PrivateLink 网络接口的 IP 地址前面。还为 api.mydomain.com 部署自定义域名,并为 API 网关部署基本路径映射。然后添加一条 Route 53 记录,将 api.mydomain.com 作为 ALB 的别名。这个解决方案相当复杂,但我们\xe2\x80\x99已经测试过它并且它有效。描述完整的解决方案超出了本文的范围,但我们稍后可能会写一篇单独的博客文章。

\n
\n\n

有谁知道如何做到这一点或不同的方法?

\n

Har*_*uez 5

我找到了这个问题的答案,所以我想我应该分享它,以防其他人想知道如何做到这一点。我联系了上面帖子的作者,他给了我一些建议。他后来写了一篇文章解释了解决方案,如果我的总结令人困惑,您可以在这里阅读他的文章:

https://cloudbanshee.com/blog/connecting-to-private-api-over-vpn-or-vpc-peering

本质上,一旦您拥有私有 API Gateway VPC 终端节点和 ALB,您需要执行以下操作:

  • 使用与 ALB 侦听器相同的证书创建自定义域名
  • 为要连接的 API 网关的所需阶段添加基本路径映射
  • 添加一条以自定义域名为名称、以 ALB DNS 作为目标的 Route53 记录(或者如果您有自己的 DNS 服务器,则在此处添加记录
  • 为 ALB 创建 IP 类型的目标组并添加 VPC 终端节点的 IP
  • 在 ALB 侦听器中,创建规则,当 url 与自定义域名匹配并且路径与为 API 网关定义的基本路径映射匹配时,将流量发送到目标组

我所缺少的并使这项工作有效的是基本路径映射。这就是 ALB 在不知道任何 ID 或主机名的情况下知道将流量路由到哪个 API 网关的方式。

我分享的帖子更详细,写得更好。我建议任何有兴趣学习如何私下访问 API 网关的人都阅读它。