代码之家  ›  专栏  ›  技术社区  ›  Vovan Kuznetsov

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

  •  8
  • Vovan Kuznetsov  · 技术社区  · 9 年前

    当我的产品(某些Web API)位于VPC内部时,我遇到了一种情况,即没有任何外部访问。我想公开这个API的一部分(只是几个HTTP方法),以便从互联网访问。我试图使用AWS API网关实现这一点,但看起来我无法将内部ELB端点作为API网关资源。有什么办法吗?

    谢谢 --沃万

    2 回复  |  直到 9 年前
        1
  •  10
  •   Michael - sqlbot    7 年前

    这最初是不可能的,后来通过支持客户端证书解决了,API网关可以使用客户端证书向您的服务进行身份验证。这是一个很好的解决方案,现在仍然可用,但仍然需要将您的服务公开(至少在某种意义上)到互联网。

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

    现在,您可以在您的亚马逊虚拟私有云(VPC)中提供对HTTP(S)资源的访问,而无需将其直接暴露于公共互联网。您可以使用API网关创建与VPC集成的API端点。通过在VPC和网络负载平衡器(NLB)之间设置VPC链接,您可以创建到VPC的端点,这是由弹性负载平衡提供的。

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

    历史背景如下。


    到目前为止,没有简单可靠的方法可以做到这一点,因为API网关可以访问的服务需要通过公共互联网访问/公开 没有内置的信任机制可以保证这样的请求实际上来自 任何 API网关部署,更少 你的 API网关部署。

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

    Q: Amazon API网关能否在Amazon VPC中工作?

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

    Q: 我可以验证它是API网关调用我的后端吗?

    对AmazonAPIGateway可以生成客户端SSL证书,并将该证书的公钥提供给您。可以使用生成的证书调用后端,并且可以使用证书的公钥验证来自AmazonAPI网关的调用。

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

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

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

    这一功能解决了API网关的HTTP代理功能的实用性以前似乎存在的一个重大限制……事实上,当我发现上面的修订信息时,我开始怀疑自己:这是否一直都存在,并且我设法忽略了它? The Wayback Machine says no, it's new. 该信息于2015年9月添加。

        2
  •  3
  •   occasl    7 年前

    这有点迂回,但您可以通过Lambda函数代理VPC中的Web服务端点。该Lambda函数可以直接从API网关调用。此日志 post 详细介绍了如何做到这一点。