具有 S3 来源的 CloudFront 上的严格传输安全?

具有 S3 来源的 CloudFront 上的严格传输安全?

出于速度和成本原因,我公司的网站有一个静态主页。我们使用 S3 作为 CloudFront 的来源。现在,我们想为整个域声明 Strict-Transport-Security,但 S3 似乎不会发送我们指定的任何标头(除了以 x-aws-- 开头的标头)。CloudFront 似乎也没有任何自定义标头选项。

这可能吗?

答案1

您现在可以在 CloudFront 中原生添加 HTTP 响应标头(包括 HSTS),而无需修改源或编写函数。使用您的配置创建新的响应标头策略,然后将该策略附加到一个或多个缓存行为。

文档可在此处获取: https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/adding-response-headers.html

答案2

David 的回答指出文档,归结为:

  1. 创建一个 Lambda 函数,如下所示。请注意 Lambda@Edge运行时间有限与其他 Lambda 函数相比,还有一些额外的限制。例如,所有函数都必须在 - CloudFront 中创建us-east-1- CloudFront 将自动将它们复制到其他区域 - 不支持层,并且所有触发器都必须使用显式 ARN - 没有别名,或者使用$LATEST
'use strict';
exports.handler = (event, context, callback) => {
  const response = event.Records[0].cf.response;
  const headers = response.headers;

  headers['strict-transport-security'] = [{
    key: 'Strict-Transport-Security',
    /* 
     * verify that max-age and 'includeSubdomains' are the settings you want
     */
    value: 'max-age=31536000; includeSubdomains; preload' 
  }];

  callback(null, response);
};
  1. 发布版本并将其部署到 Lambda@Edge。$LATEST下一步不能使用或别名。
  2. 将已发布的函数版本与 CloudFront 分发版关联。如果这是一次性任务,那么这样做可能更容易通过 Lambda 控制台如果你想将你的函数与多个分布关联起来,使用CloudFront 控制台
  3. 您需要将事件类型设置为origin-response(S3 和缓存之间)或viewer-response(缓存和浏览器之间),并使用您上面发布的版本指定 ARN - 例如

    arn:aws:lambda:us-east-1:1234567890:function:MY-FUNCTION-NAME:v1

  4. 等待分发更新并测试标头是否存在于响应中

答案3

自 2017 年 7 月 16 日起,您所需的功能可通过 Lambda@Edge 获得,请参阅http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-at-the-edge.html请参阅一般文档或特定示例https://nvisium.com/blog/2017/08/10/lambda-edge-cloudfront-custom-headers/

相关内容