使用亚马逊云科技应用程序负载均衡器保护您的 Web 应用程序并优化其性能

作者: Karthik Chemudupati, James Wenzel |

您是否有兴趣保护您的 Web 应用程序并优化其性能以保持无缝的用户体验并防范网络威胁?应用程序负载均衡器 (ALB) 为修改请求和响应标头提供了强大的功能,允许您通过多种方式微调应用程序的行为。从使用内容安全策略和 HTTP 严格传输安全等基本头文件增强安全性,到通过缓存策略和高效资源交付提高性能,ALB 为开发人员和系统管理员提供了多功能工具包。无论您的目标是遵守行业标准、与 API 网关集成,还是实现自定义应用程序逻辑,掌握标头修改都可以显著提高应用程序的稳健性和效率。在这篇文章中,我们将探讨其中的一些功能,并揭示如何使用 ALB 标头修改来增强您在亚马逊云科技上的 Web 应用程序。

重命名 TLS 标头

最受欢迎的用例之一是标题重命名。已知一些传统系统需要特定格式的标头,例如,他们可能期望标头为 "自定义 TLS" 而不是 "X-amzn-TLS"。重命名 ALB 生成的头文件,例如 X-amzn-MTLS 和 X-AMZN-TLS,允许用户确保与传统应用程序代码兼容。这样可以更轻松地使用 ALB 必须提供的所有功能,而不会增加其工作流程的复杂性或变通方法。此外,这可以实现与现有应用程序的无缝集成,并且可以灵活地根据特定组织需求调整 ALB 功能,而无需更改应用程序代码或后端服务。例如:

aws elbv2 modify-listener-attributes \
—listener-arn <ARN> —attributes \
Key=[Headers From renaming headers section].header_name \
Value="desired_header_field_name"

重命名 ALB 生成的 mTL 和 TLS 标头字段,而不是值,使用户能够使用适用于其现有 TLS 相关应用程序代码的标头名称。用户可以使用侦听器属性 API 调用或在亚马逊云科技控制台中重命名任何 TLS 标头字段。

HTTP Strict-Transport-Security 和跨域资源共享

另一个最受欢迎的用例是在 ALB 级别插入 HTTP 严格传输安全 (HSTS) 和跨域资源共享 (CORS) 等标头。这使 ALB 用户能够满足关键的安全性和合规性需求。HSTS 标头插入通过在所有客户端连接上强制执行 HTTPS、防范中间人攻击以及确保遵守 PCI DSS 和 HIPAA 等行业法规,帮助用户增强安全性。此功能的一个主要优点是,ALB 用户无需更改底层应用程序代码即可满足安全标准。同样,插入 CORS 标头可以实现安全的跨域资源共享,从而在现代 Web 应用程序中实现不同域之间的受控访问。这简化了管理跨多个服务的跨源策略的过程,确保只有授权的凭据才能访问敏感资源。

插入安全或 CORS 标头以实现跨域合规性:

aws elbv2 modify-listener-attributes \
--listener-arn <ARN> —attributes \
Key=routing.http.response."Headers From insert headers section".header_name \
Value="desired_value"

服务器标头

另一个重要的安全用例是禁用服务器标头,这对于拥有 PCI DSS 规定的严格安全和隐私政策的组织至关重要。它确保服务器信息不会被无意中泄露。ALB 的标头修改允许您在来自 ALB 的响应中禁用 "服务器" 标头。此外,它还减少了服务器特定信息的泄露,防止自动扫描工具或攻击者利用特定服务器软件中已识别的漏洞。ALB 级别的集中管理允许组织在应用程序中统一应用相同的安全标准,并简化安全操作以确保一致的保护。

此配置可以防止在响应中泄露诸如 "awselb/2.0" 之类的服务器信息,从而提供额外的安全层:

aws elbv2 modify-listener-attributes \
--listener-arn <ARN> —attributes \
Key=routing.http.response.server.enabled \
Value="true|false"

只有当目标响应中没有服务器标头时,ALB 才会添加值为 awselb/2.0 的服务器标头信息。使用服务器标头禁用功能,用户可以让 ALB 不在响应中添加服务器标头信息。如果目标响应已经有服务器标头,则它仍会代理到客户端。

解决方案概述

要大规模启用这些功能或用例,您可以使用以下解决方案,该解决方案根据提供的标签查询亚马逊云科技区域中的 ALB,并为具有该特定标签的所有 ALB 修改您选择的标头。该解决方案部署了 Amazon Lambda 函数来大规模修改 ALB 标头。通过更改与 Lambda 关联的环境变量,该解决方案可以多次运行。

解决方案部署

您可以使用 Amazon CloudFormation 模板将此解决方案部署到您的亚马逊云科技账户中。

先决条件

在本演练中,您应该有一个亚马逊云科技账户。

部署 CloudFormation 模板的步骤

  1. 下载 YAML 文件。
  2. 在您的亚马逊云科技账户中导航到 CloudFormation 控制台。
  3. 选择创建堆栈
  4. 选择 "模板准备就绪",上传模板文件,然后导航到刚才下载的 YAML 文件。
  5. 选择 "下一步"。
  6. 为堆栈命名(最大长度为 30 个字符),然后选择 "下一步"。
  7. 对于参数 "AlbatTributeName",输入需要更新或添加的 ALB 标头,对于参数 "AlbatTributeValue",输入将用于代替默认标头的自定义 ALB 标头,对于参数 "TagKey",输入解决方案用于列出 ALB 的标签密钥,对于参数 "tagValue",输入解决方案在区域中列出 ALB 时使用的标签值。这些是可选参数,可以在 Lambda 函数上设置。
  8. 根据需要添加标签,然后选择下一步
  9. 滚动至屏幕底部的功能,选中 "我确认 Amazon CloudFormation 可能会使用自定义名称创建 IAM 资源" 复选框,然后选中 "创建堆栈"。
  10. 等待堆栈创建完成。

当 CloudFormation 模板部署 Lambda 函数时,修改 Lambda 函数的环境变量,然后运行该函数以根据需要修改区域中带有特定标签的所有 ALB 的 ALB 标头。

结论

新的 ALB 标头修改功能使您可以在管理 HTTP 标头方面获得极大的灵活性:无论是重命名与 TLS 相关的标头以提高兼容性,禁用服务器标头以增强安全性,还是插入与安全相关的特定标头以强制合规性。您可以使用亚马逊云科技 CLI modify-listener-attributes 命令对单个 ALB 进行管理,也可以使用上述解决方案对您的账户和地区中的 ALB 进行大规模管理。这些功能使管理员能够微调流量管理,同时保持安全性,并在复杂的云环境中实现无缝操作。

作者简介

Karthik Chemudupati

Karthik Chemudupati 是亚马逊云科技的首席技术客户经理 (TAM),专注于帮助客户实现成本优化和卓越运营。他在软件工程、云运营和自动化方面拥有 20 多年 IT 经验。Karthik 于 2016 年以 TAM 的身份加入亚马逊云科技,曾与美国西部的十几家企业客户合作。工作之余,他喜欢与家人共度时光。

Jamie Wenzel

Jamie 是 EC2 网络领域的 SA 首席网络专家。Jamie 是应用程序网络组织的一员,负责设计应用程序网络产品和服务。他是 re:invent、re:inforce、lofts、峰会和 twitch 的狂热公开演讲者。他在亚马逊工作了 6 年以上,热衷于帮助个人和组织踏上云之旅。


*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。