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

时间:2015-09-19 17:46:15

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

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

谢谢, --Vovan

2 个答案:

答案 0 :(得分:11)

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

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

  

您现在可以在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 进行访问没有内置的信任机制,通过该机制可以确保此类请求实际上来自任何 API网关部署,更不用说您的 API网关部署。 < / p>

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

  

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

     

没有。 Amazon API Gateway端点始终是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代理功能的实用性的重大限制......这种意义的限制,事实上,当我在上面发现修改后的信息时,我开始怀疑自己:如果这一直存在,我不知何故设法忽视它? The Wayback Machine says no, it's new.此信息已于2015年9月添加。

答案 1 :(得分:3)

这有点迂回路径,但您可以通过Lambda函数代理VPC中的Web服务端点。可以直接从API网关调用Lambda函数。此博客post提供了有关如何执行此操作的详细信息。