Amazon web services 如何通过prem/VPN访问专用API网关?
我已经创建了一个API网关来运行Lambda函数。这意味着要用作内部服务,因此我的API网关是私有的。为了私下访问API网关,我执行了以下操作:Amazon web services 如何通过prem/VPN访问专用API网关?,amazon-web-services,aws-api-gateway,amazon-vpc,Amazon Web Services,Aws Api Gateway,Amazon Vpc,我已经创建了一个API网关来运行Lambda函数。这意味着要用作内部服务,因此我的API网关是私有的。为了私下访问API网关,我执行了以下操作: 在我们的专有网络的几个子网中创建了专有网络端点 将终结点添加到仅允许来自prem的流量的安全组 向API网关添加了一个资源策略,该策略只允许来自VPC端点的请求 这些步骤有效地阻止了公共请求,并允许通过VPC端点创建的DNS名称从on prem发出请求 这种方法的问题是,为了调用API,必须在请求中指定主机或x-apigw-API-id。目标是让用户能
主机
或x-apigw-API-id
。目标是让用户能够在浏览器上运行,输入URL和查询字符串参数,并从服务获得响应
讨论了一种避免指定API id或主机的方法,但没有提供太多细节。相关部分说解决方案是:
将带有SSL证书的应用程序负载平衡器(例如api.mydomain.com)放在PrivateLink网络接口的IP地址前面。还要为api.mydomain.com部署自定义域名,并为api网关部署基本路径映射。然后将指向api.mydomain.com的Route 53记录作为别名添加到ALB。这个解决方案相当复杂,但我们已经测试过了,它可以正常工作。描述完整的解决方案超出了本文的范围,但我们可能会在以后写一篇单独的博文
有人知道怎么做吗?或者有不同的方法吗?我找到了这个问题的答案,所以我想我应该分享一下,以防其他人想知道怎么做。我找到了写这篇文章的人,他给了我一些建议。他后来写了一篇文章解释这个解决方案,如果我对它的总结令人困惑,你可以在这里阅读他的文章: 基本上,一旦您拥有私有API网关VPC端点和ALB,您就需要这样做:
- 使用与ALB侦听器相同的证书创建自定义域名
- 为要连接到的API网关的所需阶段添加基本路径映射
- 添加一条路由53记录,其中自定义域名作为名称,ALB DNS作为目标(或者如果您有自己的DNS服务器,请在此处添加该记录)
- 为ALB创建IP类型的目标组,并为VPC端点添加IP
- 在ALB侦听器中,创建当url与自定义域名匹配且路径与为API网关定义的基本路径映射匹配时向目标组发送流量的规则
我分享的帖子更详细,写得更好。我建议任何有兴趣学习如何私下访问API网关的人阅读它。建议实现此访问模式的方法是将接口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网关,而无需传递标头或覆盖主机。看起来该博客文章被移动到了一个新的URL:我尝试了此解决方案,它对我有效!谢谢。但是我想知道这是否是最好的解决方案?AWS是否提供了其他最佳连接实践通过VPN连接到私有API网关?这真的很有帮助,而且很有效!!我在Route53中创建了一个私有托管区域,并在ALB和API网关自定义域中使用了相同的域。