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

Vov*_*sov 8 amazon-web-services amazon-vpc aws-api-gateway

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

谢谢, - Vovan

Mic*_*bot 11

这最初是不可能的,然后通过支持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来访问,并且没有内置的信任机制,通过它可以确保此类请求实际上源自任何 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月添加.

  • 很高兴知道,但是使用客户端证书进行身份验证看起来更像是解决方法,而不是真正的答案.内部API仍然暴露在外面,所以没有什么可以保护它免受像syn-flood等一些DOS攻击 (3认同)