具有静态 IP 的 AWS API 网关

Posted

技术标签:

【中文标题】具有静态 IP 的 AWS API 网关【英文标题】:AWS API Gateway with static IP 【发布时间】:2018-02-21 07:38:58 【问题描述】:

当您使用网关创建 API 并映射自定义域时, AWS API Gateway 进军云端分发

来源:http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-custom-domains.html

对于您创建的每个 API,API Gateway 都会为该 API 设置一个 Amazon CloudFront 分配。具有默认 API URL 的请求通过相应的 CloudFront 分配进行路由。同样,对于每个自定义域名,API Gateway 都会设置一个 CloudFront 分配。具有自定义域名的 API 请求通过自定义域名的 CloudFront 分配进行路由。

但是,当 AWS 更新 ip ranges 时,云端 IP 可能会发生变化。

作为 API 的用户,我如何将静态 IP 绑定到映射到网关的自定义域,以便在 AWS 更新 IP 范围时无需更新防火墙出口设置?

【问题讨论】:

有人试过aws.amazon.com/blogs/architecture/… 【参考方案1】:

无法将静态 IP 附加到 API 网关。但是,AWS 发布了IP ranges used by CloudFront,可用于将防火墙出口设置列入白名单。

由于这些 IP 范围也可以更改,因此建议使用 this URL 自动检查更改并相应地更新规则。

【讨论】:

这是一种通过抓取所有云前端 ip 范围来更改防火墙设置的令人厌烦的方法(json 中有 42 个条目,范围很大)。但我明白,这是我现在看到的唯一选择。 除了更改防火墙还有其他选择吗? 是否可以选择将 CloudFlare 放在前面并使用 CNAME 到 API-G? 我不熟悉 CloudFlare。如果它支持代理到 HTTPS 端点和 Header Whitelisting 两者,我猜它应该与 APG 一起使用。 是的,它确实支持代理到 HTTPS。我们正在使用它在 APIG 上实现静态 ip,并且效果相当好(不明显的开销)。【参考方案2】:

欢迎使用多云 ;-)

我正在研究这个主题,发现有其他云提供商的解决方案。

    谷歌 GCP:https://cloud.google.com/cdn/

    所以谷歌CDN默认提供一个任播IP。

    Microsoft Azure API 管理 https://azure.microsoft.com/en-us/services/api-management/ 请务必提供静态 IP。

在我看来,AWS 使用全局加速器或 NLB 解决了静态 IP 问题,但问题是这两种产品都不是第 7 层 API 管理解决方案。

所以基本上在这一点上,您可以解决第 4 层,但对于第 7 层,您需要使用 api 网关或云前端,并且两者都没有与全局加速器或 NLB 的任何直接集成。

在谷歌解决方案中,至少他们的 CDN 只提供一个任播 IP,这在 AWS 云端还没有(尽管时间问题)

我喜欢 Microsoft API 管理这个特殊案例,您可以在一个解决方案中获得静态 ip + API 管理。

【讨论】:

只是一个观察 - 一旦部署,Google Cloud Functions HTTP 触发器似乎获得了一个静态 IP(不会根据访问位置或后续重新部署而改变)......事实上,它看起来像一个给定 GCP 项目指向相同的静态 IP。【参考方案3】:

我发现的唯一解决方案是在客户端和 api 网关之间使用静态 ip,例如虚拟机,其唯一目标是将所有调用重新路由到 api 网关。

这实际上就像 50 行弹跳请求和响应的代码,但它增加了复杂性和预算要求。

【讨论】:

以上是关于具有静态 IP 的 AWS API 网关的主要内容,如果未能解决你的问题,请参考以下文章

为什么AWS NAT网关需要弹性IP?

AWS WebSocket API 网关必须对 $connect、$disconnect 和 $default 具有相同的集成?

使用多个用户池的具有 Cognito 授权的 AWS API 网关

AWS 无服务器架构 – 为啥要使用 API 网关?

具有固定 IP 的 AWS 客户端 ***

Terraform 获取 api 网关的 ip 地址