chrisvdb Asked: 2016-12-16 08:21:30 +0800 CST2016-12-16 08:21:30 +0800 CST 2016-12-16 08:21:30 +0800 CST 来自 S3 源的 Amazon CloudFront 上的 HSTS 772 是否可以从 S3 源在 Amazon CloudFront 分配上设置 HSTS 标头? ssl amazon-cloudfront hsts 5 个回答 Voted Andrew Elmhorst 2017-04-12T14:20:24+08:002017-04-12T14:20:24+08:00 关于此的更新... 现在可以通过 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); }; Best Answer Jason Martin 2016-12-16T09:52:31+08:002016-12-16T09:52:31+08:00 目前不可能,有关它的讨论,请参阅https://forums.aws.amazon.com/thread.jspa?threadID=162252。 编辑:Lambda@Edge 使之成为可能,见下文。 Adam Maschek 2017-07-19T05:26:23+08:002017-07-19T05:26:23+08:00 添加到安德鲁的答案: 我刚刚尝试过这个和一些注意事项:不再有特定的边缘 nodejs 运行时,但是需要在弗吉尼亚州北部地区创建 lambda 并由 cloudfront origin-response或viewer-response触发。 开箱即用的代码似乎不再起作用。它给出了 ERR_CONTENT_DECORDING_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" } ]; Cristian 2021-11-03T14:03:53+08:002021-11-03T14:03:53+08:00 关于这个的另一个更新...... 您现在可以在 CloudFront 中本地添加自定义 HTTP 响应标头(包括 CORS 和 HSTS 等安全标头),而无需修改您的源或编写函数。如果您转到控制台中的策略>响应标头,您可以使用您的配置创建可重用策略,然后将其附加到您希望添加这些标头的一个或多个缓存行为。这也可以通过 API、CLI、SDK 等获得。 文档可在此处获得: https ://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/adding-response-headers.html chrisvdb 2017-07-19T10:38:14+08:002017-07-19T10:38:14+08:00 正确,因为 Lambda@Edge 普遍可用,他们将其限制在弗吉尼亚北部,因此必须选择节点 6.10 而不是节点 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 函数。
关于此的更新...
现在可以通过 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 函数...
目前不可能,有关它的讨论,请参阅https://forums.aws.amazon.com/thread.jspa?threadID=162252。
编辑:Lambda@Edge 使之成为可能,见下文。
添加到安德鲁的答案:
我刚刚尝试过这个和一些注意事项:不再有特定的边缘 nodejs 运行时,但是需要在弗吉尼亚州北部地区创建 lambda 并由 cloudfront origin-response或viewer-response触发。
开箱即用的代码似乎不再起作用。它给出了 ERR_CONTENT_DECORDING_FAILED。
解决方案是使用json语法如下:
关于这个的另一个更新......
您现在可以在 CloudFront 中本地添加自定义 HTTP 响应标头(包括 CORS 和 HSTS 等安全标头),而无需修改您的源或编写函数。如果您转到控制台中的策略>响应标头,您可以使用您的配置创建可重用策略,然后将其附加到您希望添加这些标头的一个或多个缓存行为。这也可以通过 API、CLI、SDK 等获得。
文档可在此处获得: https ://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/adding-response-headers.html
正确,因为 Lambda@Edge 普遍可用,他们将其限制在弗吉尼亚北部,因此必须选择节点 6.10 而不是节点 4.3。
下面我们代码的相关部分(出于我们的目的,这将始终是 302 永久重定向):
通过在 CloudFront 上配置不同的行为,您可以限制哪些请求将调用 Lambda 函数。