在AWS服务中实施HTTP严格传输安全(HSTS)
在现代网络应用中,统一的安全策略至关重要。HTTP严格传输安全(HSTS)是一种Web安全策略机制,能强制浏览器仅通过HTTPS与服务器通信,有效防御协议降级和Cookie劫持攻击。然而,在AWS的分布式架构中,不同服务对HSTS的配置方法各异,导致安全态势不一致,给统一实施带来了挑战。
本文将提供一套跨AWS核心服务的HSTS综合实施方案,涵盖:
- Amazon API Gateway: 为REST和HTTP API实现集中式HSTS头部管理。
- 应用程序负载均衡器: 在基础设施层面为Web应用强制执行HSTS。
- Amazon CloudFront: 通过边缘网络为全球内容交付安全头部。
通过遵循本文的步骤,您可以建立一个统一的HSTS策略,这不仅符合AWS完善架构框架的安全原则,还能保持最佳的应用性能。
理解HSTS安全性与优势
HSTS通过Strict-Transport-Security响应头声明策略。一旦浏览器接收到此策略,就会在后续访问中自动将HTTP请求转换为HTTPS,这种执行发生在浏览器层面,提供了第一道防线。
仅靠服务器端的HTTP到HTTPS重定向,在初次请求时仍存在安全缺口(例如SSL剥离攻击)。HSTS通过在浏览器层面执行,消除了这一初始HTTP请求的机会,构成了深度防御的关键一环。
其主要安全益处包括:
- 防止协议降级攻击: 在浏览器建立HSTS策略后。
- 缓解中间人攻击: 阻止未授权方拦截通信。
- 防止未授权会话访问: 保护凭证免遭窃取。
HSTS实施的关键用例
HSTS能保护HTTP重定向无法覆盖的场景:
- 混合内容服务: 防止浏览器向任何声明了HSTS的子域名发起初始HTTP请求。
- 单点登录(SSO)流程: 确保在身份提供商和应用之间的多次重定向中,认证令牌和会话数据全程加密。
- 微服务架构: 保护API端点,防止客户端初始连接时的协议降级。
- CloudFront多源服务器场景: 即使在源站故障切换时,也防止浏览器回退到HTTP。
从AWS完善架构视角看,实施HSTS体现了深度防御原则,在应用协议层面增加了额外的安全层。
在Amazon API Gateway中实施HSTS
Amazon API Gateway没有内置的HSTS启用功能,需要根据API类型进行配置。
针对HTTP API
可以通过响应参数映射来设置HSTS头部:
- 在AWS API Gateway控制台中,导航到目标HTTP API的路由配置。
- 在"管理集成"标签页下访问路由的集成设置。
- 在"参数映射"部分:
- 响应键: 输入
200 - 修改类型: 选择
Append - 要修改的参数: 输入
header.Strict-Transport-Security - 值: 输入
max-age=31536000; includeSubDomains; preload
- 响应键: 输入
针对REST API
REST API通过代理或非代理集成模式提供更精细的控制。
-
代理集成: 后端服务(如AWS Lambda)需在其响应中返回HSTS头部。
1 2 3 4 5 6 7 8 9import json def lambda_handler(event, context): return { 'statusCode': 200, 'headers': { 'Strict-Transport-Security': 'max-age=31536000; includeSubDomains; preload' }, 'body': json.dumps('Secure response with HSTS headers') } -
非代理集成: HSTS头部必须由REST API返回,可通过两种方法实现:
- 映射模板方法: 在"集成响应"标签页下,使用Velocity模板语言(VTL)配置映射模板来动态设置响应头部。
- 方法响应方法: 这是一种声明式配置。在"方法响应"标签页下添加HSTS头
strict-transport-security,然后在"集成响应"标签页的"头部映射"中,为该头部设置映射值为max-age=31536000; includeSubDomains; preload。
测试与验证
使用curl命令验证HSTS头部是否已正确添加:
|
|
预期响应中应包含 strict-transport-security: max-age=31536000; includeSubDomains; preload。
在AWS应用程序负载均衡器中实施HSTS
应用程序负载均衡器现在内置了对HTTP响应头部修改(包括HSTS头部)的支持,允许您从一个集中点强制执行一致的安全策略。
先决条件与基础设施要求
- 功能正常的HTTPS监听器。
- 在AWS Certificate Manager中配置有效的TLS证书链。
- 为监听器启用头部修改功能(该功能默认关闭)。
配置步骤
- 打开Amazon EC2控制台,导航到负载均衡器。
- 选择您的应用程序负载均衡器。
- 在"监听器和规则"标签页,选择HTTPS监听器。
- 在"属性"标签页,选择"编辑"。
- 展开"添加响应头部"部分。
- 选择"添加HTTP严格传输安全(HSTS)头部"。
- 配置头部值:输入
max-age=31536000; includeSubDomains; preload。 - 选择"保存更改"。
头部修改行为
- 头部添加: 如果后端响应未包含指定头部,ALB会添加它。
- 头部覆盖: 如果后端响应包含该头部,ALB会用配置的值替换现有值。
- 集中控制: 确保一致的策略执行。
测试与验证
使用curl命令测试:
|
|
预期响应中应包含 strict-transport-security: max-age=31536000; includeSubDomains; preload。
在Amazon CloudFront中实施HSTS
Amazon CloudFront通过响应头部策略内置了对HTTP安全头部(包括HSTS)的支持,可在CDN边缘实现集中化的安全头部管理。
响应头部策略配置
- 在CloudFront控制台,导航到"策略" -> “响应头部”。
- 选择"创建响应头部策略"。
- 配置策略设置:
- 名称: 例如
HSTS-Security-Policy - 描述: 例如
HSTS and security headers for web applications
- 名称: 例如
- 在"安全头部"下配置:
- 严格传输安全: 选择
- 最长使用期限:
31536000秒(1年) - 预加载: 选择(可选)
- 包含子域: 选择(可选)
- 添加其他安全头部(如
X-Content-Type-Options,X-Frame-Options,Referrer-Policy,X-XSS-Protection)。 - 选择"创建"。
将策略附加到分配
- 导航到您的CloudFront分配。
- 选择"行为"标签页。
- 编辑默认行为(或创建新行为)。
- 在"响应头部策略"下,选择您创建的策略。
- 选择"保存更改"。
头部覆盖行为
响应头部策略提供"源覆盖"功能来控制头部管理方式:
- 启用源覆盖: CloudFront将替换源服务器返回的现有同名头部。
- 禁用源覆盖: CloudFront仅在源响应中不包含同名头部时,才会添加策略定义的头部,从而保留源的原始头部。
测试与验证
使用curl命令验证:
|
|
预期响应中应包含配置的多个安全头部,包括 strict-transport-security: max-age=31536000; includeSubDomains; preload。
安全考虑与最佳实践
实施HSTS需要仔细考虑安全影响和操作要求。
-
max-age指令: 决定浏览器强制HTTPS访问的时长。- 300秒(5分钟): 初始测试阶段的安全实验值。
- 86,400秒(1天): 开发环境的短期承诺。
- 2,592,000秒(30天): 预发布环境的中期验证。
- 31,536,000秒(1年): 生产环境的长期承诺。
- 建议从较短的值开始,随着对HTTPS基础设施稳定性的信心增强而逐步增加。
-
includeSubDomains指令: 将HSTS执行扩展到所有子域。- 好处: 跨整个域层次结构的全面保护,防止基于子域的攻击,简化安全管理。
- 要求: 所有子域必须支持HTTPS并拥有有效的SSL证书,且需在整个域层次结构中保持一致的安全策略。
-
preload指令: 考虑实施HSTS预加载以获得最大安全覆盖。- 好处: 保护首次访问者,在发起网络请求前进行浏览器级执行。
- 注意事项: 需要提交到浏览器预加载列表,逆转(移除)非常困难且耗时数月,需要对HTTPS基础设施做出长期承诺。
结论
跨AWS服务实施HSTS为保护Web应用免受协议降级攻击和确保通信加密奠定了坚实基础。通过利用API Gateway、CloudFront和应用程序负载均衡器的内置功能,组织可以创建全面的安全策略,这些策略符合AWS完善架构框架的原则,并与其他AWS安全服务和功能互补,构建起强大的深度防御体系。