亚马逊AWS官方博客

新增功能 — AWS Global Accelerator 的客户端 IP 地址保护

AWS Global Accelerator 是一种联网服务,通过将传入的网络流量路由至多个 AWS 区域,从而提高您的全球应用程序的性能和可用性。它利用了我们庞大的边缘站点群和无阻塞全球网络,根据应用程序的运行状况、网络状况和用户所在的地理位置来引导流量,并提供一组静态的任播 IP 地址,这些地址从多个 AWS 位置发布(请参阅新增功能 — AWS Global Accelerator 提升可用性和性能以了解更多信息)。传入的 TCP 或 UDP 流量可以路由至某个 Application Load Balancer网络负载均衡器弹性 IP 地址

客户端 IP 地址保护
今天,我们宣布推出 AWS Global Accelerator 的一项重要新功能。现在,如果您将流量路由至某个 Application Load Balancer,用户客户端的 IP 地址将可用于在终端节点运行代码,从而执行特定 IP 地址的特定逻辑。例如,您可以使用基于 IP 地址进行筛选的安全组,也可以根据用户的 IP 地址或地理位置向其提供自定义的内容。您还可以使用 IP 地址来收集有关用户地理分布的更准确统计信息。

客户端 IP 地址保护功能的使用
如果您已经开始使用 AWS Global Accelerator,我们建议您通过终端节点权重逐步开始使用客户端 IP 地址保护功能。这将有利于您验证利用 IP 地址的任何规则或系统继续正常工作。

为测试此新功能,我启动了一些 EC2 实例,设置了一个 Application Load Balancer,将这些实例放入一个目标组,然后在我的 ALB 前创造了一个加速器:

我检查了浏览器的 IP 地址:

我安装了一个简单的 Python 程序(由 Global Accelerator 团队友情提供),向一个 Global Accelerator 的 IP 地址发送了一条 HTTP 请求,并获取了输出:

源 (99.82.172.36) 是我的加速器使用的一个内部地址。建立基线并确认一切工作正常后,现在我可以启动客户端 IP 地址保护功能!

我打开 AWS Global Accelerator 控制台,找到我的加速器并检查了当前配置,如上图所示。我单击端口 80 的侦听器,然后单击现有的终端节点组:

然后我单击添加终端节点,向该组添加了一个新的终端节点,使用的权重为 255,然后选择保护客户端 IP 地址

我的终端节点组现在有两个终端节点(一个含有保护的客户端 IP 地址,另一个没有),这两个终端节点都指向同一个 ALB:

在生产环境中,我将从较低的权重开始并进行测试,以确保任何依赖 IP 地址的安全组或其他逻辑都继续工作正常(我还可以在蓝绿部署和软件更新期间使用权重来管理流量)。由于我只是进行简单的测试,因此无需谨慎,直接删除旧(无 IP 地址保护的)终端节点。不论采用哪种方法,终端节点的更改都将在几分钟内生效,我可以刷新测试窗口:

现在我看到我的代码已经可以访问浏览器的 IP 地址(通过 X-Forwarded-For 标头),并且我可以按希望的那样使用它。我还可以在安全组规则中使用此 IP 地址。

有关切换最佳实践的更多信息,请参阅将 ALB 终端节点逐渐过渡到使用客户端 IP 地址保护功能

注意事项
对于客户端 IP 地址的保护需要注意以下几个方面:

弹性网络接口 (ENI) 的使用量 — Global Accelerator 将为包含 IP 保护终端节点的每个子网创建一个 ENI,并且将在不需要时删除它们。不要编辑或删除它们。

安全组 — Global Accelerator 会创建并管理一个名为 GlobalAccelerator 的安全组。同样,不要编辑或删除它。

现已推出
您可以在下列区域为 Application Load Balancer 启用此新功能:美国东部(弗吉尼亚北部)美国东部(俄亥俄)美国西部(俄勒冈)美国西部(加利福尼亚北部)欧洲(爱尔兰)欧洲(法兰克福)欧洲(伦敦)亚太地区(东京)亚太地区(新加坡)亚太地区(首尔)亚太地区(孟买)亚太地区(悉尼)

Jeff