我创建了一个API网关来运行Lambda函数。这旨在用作内部服务,因此我的API网关是私有的。为了使API网关可以私有访问,我执行了以下操作:
这些步骤有效地阻止了公共请求,并允许通过VPC端点创建的DNS名称来自本地的请求。
此方法的问题在于,要调用API,必须在请求中指定Host
或x-apigw-api-id
。目标是使用户能够在其浏览器上运行,键入URL和查询字符串参数,并从服务中获得响应。
Amazon API Gateway types, use cases and performance讨论了一种避免必须指定API ID或主机的方法,但是它没有提供太多细节。相关部分说解决方案将是:
将带有SSL证书(例如api.mydomain.com)的Application Load Balancer放在PrivateLink网络接口的IP地址之前。还要为api.mydomain.com部署自定义域名,并为API网关部署基本路径映射。然后添加一条Route 53记录,该记录将api.mydomain.com用作您的ALB的别名。该解决方案非常复杂,但是我们已经对其进行了测试,并且可以正常工作。描述完整的解决方案不在本文的讨论范围之内,但是我们稍后可能会写一篇单独的博客文章。
有人知道该怎么做或其他方法吗?
答案 0 :(得分:0)
我找到了这个问题的答案,所以我认为我应该分享它,以防其他人想知道如何做到这一点。我与上面写这篇文章的人联系,他给了我一些建议。后来他写了一篇文章解释该解决方案,如果我对此的总结感到困惑,您可以在这里阅读他的文章:
https://cloudbanshee.com/blog/connecting-to-private-api-over-vpn-or-vpc-peering
基本上,一旦有了私有API网关VPC端点和ALB,这就是您需要做的:
使我无法实现的事情是基本路径映射。这就是ALB如何知道将流量路由到哪个API网关的方式,而无需知道任何ID或主机名。
我分享的帖子更加详细,写得更好。我建议任何对学习如何私下访问API网关感兴趣的人阅读。
答案 1 :(得分:0)
实现此访问模式的推荐方法是将接口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网关,而无需传递标头或覆盖主机。