来自S3的Amazon CloudFront上的HSTS


Answers:



10

有关此的更新...

现在可以通过Lambda @ edge函数自定义HTTP响应标头。有关文档,请参阅http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-at-the-edge.html。要尝试此操作,请在AWS控制台中创建一个新的lambda函数。选择“ Edge Nodge.js 4.3”作为语言,然后查找cloudfront-modify-response-header模板。如果这样做,Lambda将询问您要将功能应用到哪个CloudFront发行版和事件。请注意,您可以随时通过转到Cloudfront行为选项卡来编辑或更改此设置。

这是lambda函数的示例...

'use strict';
exports.handler = (event, context, callback) => {

    const response = event.Records[0].cf.response;
    response.headers['Strict-Transport-Security'] = 'max-age=2592000; includeSubDomains';

    callback(null, response);
};

1
太好了,请尝试一下!
chrisvdb

我偶然发现了同一篇文章……对您有用吗?@chrisvdb
Steverino

@Steverino并没有真正尝试它,但是由于我们只是在建立一个可以从中受益的静态网站,因此我们可以在此实例上进行尝试。在这种情况下,我会举报,也请这样做。了解性能影响也会很有趣。
chrisvdb '17

1
更新-事实证明,当前Lambda @ Edge预览版中的100 TPS限制不足以可靠地为我们的(简单且流量低)网站提供服务。一些资产随机产生50倍的响应码。
chrisvdb

1
response.headers的格式已更改。以上不再有效。
Hamish Moffatt

4

为了增加安德鲁的答案:

我已经尝试过了,并做了几点说明:不再有特定的Edge nodejs运行时,但是lambda需要在N Virginia地区创建,并由cloudfront 原点响应查看器响应触发。

开箱即用的代码似乎不再起作用。它给出了ERR_CONTENT_DECODING_FAILED。

解决方案是使用json语法,如下所示:

response.headers['Strict-Transport-Security'] = [ { key: 'Strict-Transport-Security', value: "max-age=31536000; includeSubdomains; preload" } ];
response.headers['X-Content-Type-Options']    = [ { key: 'X-Content-Type-Options', value: "nosniff" } ];

有关标题的更多信息,请访问:infosec.mozilla.org/guidelines/web_security
Josh Habdas

1

正确,由于Lambda @ Edge通常可用,因此将其限制在N Virginia,并且必须选择Node 6.10而不是Node 4.3。

以下是我们代码的相关部分(出于我们的目的,这始终是302永久重定向):

'use strict';
exports.handler = (event, context, callback) => {

  var request = event.Records[0].cf.request;
  const response = {
    status: '302',
    statusDescription: '302 Found',
    httpVersion: request.httpVersion,
    headers: {
      Location: [
        {
            "key":"Location",
            "value":"someURL"
        }
      ],
      'Strict-Transport-Security': [
        {
          "key":"Strict-Transport-Security",
          "value":'max-age=63072000; includeSubDomains; preload'
        }
      ],
    },
  };
  callback(null, response);
};

通过在CloudFront上配置不同的行为,您可以限制哪些请求将调用Lambda函数。


这是对亚当·马斯切克(Adam Maschek)帖子的回应...
chrisvdb
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.