8

当我的产品(一些 Web API)位于 VPC 内部时,我遇到了一种情况,即没有任何外部访问权限。我想公开这个 API 的一部分(只是几个 HTTP 方法),以便从 Internet 访问。我正在尝试使用 AWS API Gateway 来实现这一点,但看起来我无法将内部 ELB 端点设为 API Gateway 资源。有什么想法我该怎么做?

谢谢,--Vovan

4

2 回答 2

11

这最初是不可能的,然后通过支持 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 创建一个终端节点。

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

历史背景如下。


到目前为止,还没有简单且万无一失的方法来做到这一点,因为您的 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 的调用。

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

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

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

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

于 2015-09-20T11:06:24.343 回答
3

这有点迂回曲折,但您可以通过 Lambda 函数代理位于 VPC 中的 Web 服务终端节点。可以直接从 API Gateway 调用该 Lambda 函数。这篇博客文章详细介绍了如何做到这一点。

于 2017-02-22T07:11:15.597 回答