繁体   English   中英

我可以在VPC中将HTTP端点指定为AWS API Gateway中的资源吗?

[英]Can I specify HTTP endpoint in a VPC as resource in AWS API Gateway?

我的情况是我的产品(某些Web API)存在于VPC内部,即没有任何外部访问。 我想公开这些API的一部分(只是几种HTTP方法),可以从互联网上访问。 我正在尝试使用AWS API Gateway实现此目的,但看起来我无法使内部ELB端点成为API网关资源。 任何想法我怎么能这样做?

谢谢, - Vovan

这最初是不可能的,然后通过支持API Gateway可用于向您的服务验证自身的客户端证书来解决。 这是一个很好的解决方案,并且仍然可用,但仍然要求您的服务 - 至少在某种意义上 - 暴露给互联网。

2017年11月,AWS发布了一项新功能,允许您在API Gateway和内部服务之间实际配置网络路径。

您现在可以访问Amazon Virtual Private Cloud(VPC)中的HTTP(S)资源,而无需将其直接暴露给公共Internet。 您可以使用API​​网关创建与VPC集成的API端点。 您可以通过在VPC和Elastic Load Balancing提供的网络负载均衡器(NLB)之间设置VPC链接来为VPC创建端点。

https://aws.amazon.com/about-aws/whats-new/2017/11/amazon-api-gateway-supports-endpoint-integrations-with-private-vpcs/

历史背景如下。


截至目前,没有简单而万无一失的方法可以做到这一点,因为API网关可以访问的服务需要通过公共Internet访问/暴露给公共Internet, 并且没有内置的信任机制,您可以通过它来确保此类请求实际上源自 任何 API网关部署,更不用说 您的 API网关部署。

亚马逊似乎已经解决了对后端服务的请求进行身份验证的问题,因为它不仅来自API网关,而且来自您的 API网关实例。 和以前一样,端点仍然需要暴露给Internet,因为源IP地址是不可预测的 - 但API网关现在支持客户端SSL证书,API网关的背面用于向前端验证自身的身份。您的后端服务,即API网关正在调用。

问:Amazon API Gateway可以在Amazon VPC中运行吗?

不可以。亚马逊API网关端点始终是公共的Internet。 对后端操作的代理请求也需要在Internet上公开访问。 但是,您可以在Amazon API Gateway中生成客户端SSL证书,以验证API网关使用证书的公钥发送对后端系统的请求。

问:我可以验证它是API网关呼叫我的后端吗?

是。 Amazon API Gateway可以生成客户端SSL证书,并使您可以使用该证书的公钥。 可以使用生成的证书调用后端,并且可以使用证书的公钥验证源自Amazon API Gateway的呼叫。

- https://aws.amazon.com/api-gateway/faqs/#security

在API网关控制台中生成客户端证书时,将为您提供该证书的公钥。 为了安全起见,私钥由API网关保留,您无法访问。 在协商SSL时,API网关将向您的后端提供公钥。 任何不提供相同公钥的对等方都不是API网关,您的后端应该拒绝SSL协商。

如果恶意行为者应该拥有公钥,他们仍然无法通过SSL与您的后端通信,因为他们缺少配对的私钥,这只有API网关才知道。 (您的交互方将使用您的SSL证书进行加密,并且它是已配对的私钥,当然,只有您自己知道。)

这个功能解决了以前似乎是API网关的HTTP代理功能的实用性的一个重大限制......这种意义的限制,事实上,当我发现上面的修改信息时,我开始怀疑自己:有这个一直在那里,我不知何故设法忽略了它? Wayback Machine说不,这是新的。 此信息于2015年9月添加。

它有点迂回路径,但您可以通过Lambda函数代理VPC中的Web服务端点。 可以直接从API网关调用Lambda函数。 这篇博客文章详细介绍了如何做到这一点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM