如何通过Terraform在CloudFront中启用Strict-Transport-Security?附代码示例
为CloudFront配置Strict-Transport-Security(HSTS)的Terraform实现
操作步骤:在CloudFront中添加HSTS响应头策略
只需在CloudFront层面配置HSTS即可,无需修改后端APIGW或Lambda的配置——因为CloudFront作为用户请求的入口,其返回的响应头会覆盖后端服务的对应头信息,保证策略统一。
Terraform代码示例
- 创建HSTS响应头策略
resource "aws_cloudfront_response_headers_policy" "hsts_policy" { name = "HSTS-Security-Policy" security_headers_config { strict_transport_security { access_control_max_age_sec = 31536000 # 1年,符合预加载列表要求 include_subdomains = true # 按需开启:若所有子域名都使用HTTPS则启用 preload = true # 可选:若要加入浏览器HSTS预加载列表则启用 override = true # 强制覆盖后端返回的HSTS头,避免冲突 } } }
- 关联策略到CloudFront分发的缓存行为
将上述策略绑定到CloudFront的所有缓存行为(包括默认行为和自定义路径行为):
resource "aws_cloudfront_distribution" "main" { # 保留你已有的分发配置(如origins、viewer_certificate等) default_cache_behavior { # 保留你已有的配置(如target_origin_id、viewer_protocol_policy等) response_headers_policy_id = aws_cloudfront_response_headers_policy.hsts_policy.id } # 如果你有多个对接不同APIGW的自定义缓存行为,逐个关联策略 ordered_cache_behavior { path_pattern = "/api/v2/*" target_origin_id = "api-gw-v2-origin" # 保留其他已有配置 response_headers_policy_id = aws_cloudfront_response_headers_policy.hsts_policy.id } }
是否需要修改APIGW或Lambda?
不需要。原因如下:
- CloudFront配置中的
override = true会强制替换后端(APIGW/Lambda)返回的任何HSTS头,确保整个域名下的HSTS策略统一。 - 若后端未返回HSTS头,CloudFront会自动添加你配置的头信息;若后端已有相关头,会被CDN的配置覆盖,避免出现多版本策略导致的安全问题。
关键参数说明
access_control_max_age_sec:设置浏览器缓存HSTS规则的时长,建议至少180天(15552000秒);若要申请加入浏览器预加载列表,必须设置为31536000秒(1年)。include_subdomains:开启后会将HSTS规则应用到所有子域名,仅当所有子域名都已启用HTTPS时建议开启。preload:开启后可将域名提交到浏览器内置的HSTS预加载列表,一旦提交无法轻易撤销,需确认域名长期使用HTTPS后再开启。
内容的提问来源于stack exchange,提问作者mt55
相关产品推荐
相关产品推荐

