当我的产品(一些 Web API)位于 VPC 内部时,我遇到了一种情况,即没有任何外部访问权限。我想公开这个 API 的一部分(只是几个 HTTP 方法),以便从 Internet 访问。我正在尝试使用 AWS API Gateway 来实现这一点,但看起来我无法将内部 ELB 端点设为 API Gateway 资源。有什么想法我该怎么做?
谢谢,--Vovan
当我的产品(一些 Web API)位于 VPC 内部时,我遇到了一种情况,即没有任何外部访问权限。我想公开这个 API 的一部分(只是几个 HTTP 方法),以便从 Internet 访问。我正在尝试使用 AWS API Gateway 来实现这一点,但看起来我无法将内部 ELB 端点设为 API Gateway 资源。有什么想法我该怎么做?
谢谢,--Vovan
这最初是不可能的,然后通过支持 API Gateway 可以用来向您的服务验证自己的客户端证书来解决。这是一个很好的解决方案,并且仍然可用,但仍然需要将您的服务公开(至少在某种意义上)到 Internet。
2017 年 11 月,AWS 发布了一项新功能,允许您在 API Gateway 和您的内部服务之间实际预置网络路径。
您现在可以在您的 Amazon Virtual Private Cloud (VPC) 中提供对 HTTP(S) 资源的访问,而无需将它们直接暴露给公共 Internet。您可以使用 API Gateway 创建与您的 VPC 集成的 API 终端节点。您可以通过在您的 VPC 和 Elastic Load Balancing 提供的网络负载均衡器 (NLB) 之间设置 VPC 链接来为您的 VPC 创建一个终端节点。
历史背景如下。
到目前为止,还没有简单且万无一失的方法来做到这一点,因为您的 API Gateway 可访问的服务需要通过/公开到公共 Internet 进行访问,并且没有内置的信任机制可以让您放心这样的请求实际上源自任何API Gateway 部署,更不用说您的API Gateway 部署了。
Amazon 似乎已经解决了对后端服务的请求进行身份验证的问题,因为这些请求肯定来自 API Gateway,而且来自您的API Gateway 实例。和以前一样,端点仍然需要暴露在互联网上,因为源 IP 地址是不可预测的——但是 API 网关现在支持客户端 SSL 证书,API 网关的后端使用它来向前端验证自己。您的后端服务,该 API 网关正在调用。
问:Amazon API Gateway 可以在 Amazon VPC 中工作吗?
不可以。Amazon API Gateway 终端节点始终对 Internet 公开。对后端操作的代理请求也需要在 Internet 上公开访问。但是,您可以在 Amazon API Gateway 中生成客户端 SSL 证书,以验证 API Gateway 是否使用证书的公钥向您的后端系统发送了请求。
问:我可以验证是 API 网关在调用我的后端吗?
是的。Amazon API Gateway 可以生成客户端 SSL 证书并使您可以使用该证书的公钥。可以使用生成的证书调用您的后端,并且您可以使用证书的公钥验证来自 Amazon API Gateway 的调用。
当您在 API Gateway 控制台中生成客户端证书时,您将获得该证书的公钥。为安全起见,私钥由 API Gateway 保留,您无法访问。API Gateway 将在协商 SSL 时将公钥提供给您的后端。任何不提供相同公钥的对等点都不是 API 网关,您的后端应该拒绝 SSL 协商。
如果恶意行为者曾经拥有公钥,他们仍然无法通过 SSL 与您的后端通信,因为他们将缺少只有 API Gateway 知道的配对私钥。(您的交互将使用您的 SSL 证书和它的配对私钥进行加密,当然,只有您知道。)
此功能解决了以前似乎是 API Gateway 的 HTTP 代理功能实用程序的一个重大限制......事实上,当我发现上面的修改信息时,我开始怀疑自己:有这个一直都在那里,而我不知何故设法忽略了它? Wayback Machine 说不,它是新的。 此信息于 2015 年 9 月添加。
这有点迂回曲折,但您可以通过 Lambda 函数代理位于 VPC 中的 Web 服务终端节点。可以直接从 API Gateway 调用该 Lambda 函数。这篇博客文章详细介绍了如何做到这一点。