【问题标题】:How to access private API Gateway over on-prem/VPN?如何通过本地/VPN 访问私有 API 网关?
【发布时间】:2020-06-24 11:30:43
【问题描述】:

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

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

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

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

Amazon API Gateway types, use cases and performance 谈到了一种避免指定 API id 或主机的方法,但它没有提供太多细节。相关部分说解决方案是:

在您的 PrivateLink 网络接口的 IP 地址前面放置一个带有 SSL 证书(例如 api.mydomain.com)的 Application Load Balancer。还要为 api.mydomain.com 部署一个自定义域名,并为您的 API 网关部署一个基本路径映射。然后添加将 api.mydomain.com 作为别名指向 ALB 的 Route 53 记录。这个解决方案非常复杂,但我们已经对其进行了测试,并且可以正常工作。描述完整的解决方案超出了本文的范围,但我们稍后可能会写一篇单独的博客文章。

有谁知道如何做到这一点或其他方法?

【问题讨论】:

    标签: amazon-web-services aws-api-gateway amazon-vpc


    【解决方案1】:

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

    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 网关的人来阅读它。

    【讨论】:

    • 该博文似乎已移至新网址:sentiatechblog.com/…
    • 我尝试了这个解决方案,它对我有用!谢谢你。但是我想知道这是否是最好的解决方案? AWS 是否提供任何其他最佳实践来通过 VPN 连接到私有 API 网关?
    • 这真的很有帮助,而且有效!!我在 Route53 中创建了一个私有托管区域,并在 ALB 和 API Gateway 自定义域中使用了相同的域。
    【解决方案2】:

    实现此访问模式的推荐方法是将接口 VPC 端点与私有 API 网关显式关联:

    aws apigateway update-rest-api \
        --rest-api-id u67n3ov968 \
        --patch-operations "op='add',path='/endpointConfiguration/vpcEndpointIds',value='vpce-01d622316a7df47f9'"
        --region us-east-1
    

    这将创建一个新的可公开解析的 DNS 名称,该名称将解析为 VPC 终端节点私有 IP 地址:

    > nslookup u67n3ov968-vpce-01d622316a7df47f9.execute-api.us-east-1.amazonaws.com    
    
    Non-authoritative answer:
    Name:   u67n3ov968-vpce-01d622316a7df47f9.execute-api.us-east-1.amazonaws.com
    Address: 10.0.0.200
    Name:   u67n3ov968-vpce-01d622316a7df47f9.execute-api.us-east-1.amazonaws.com
    Address: 10.0.0.155
    

    本地客户端可以使用此 DNS 名称调用私有 API 网关,而无需传递标头或覆盖主机。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-10
      • 2020-06-21
      • 2012-06-12
      • 1970-01-01
      • 1970-01-01
      • 2021-04-25
      • 1970-01-01
      相关资源
      最近更新 更多