Ada*_*dam 9 amazon-s3 amazon-web-services amazon-cloudfront
我正在尝试为我通过s3/cloudfront服务的html文件设置Content-Security-Policy标头.我正在使用基于Web的AWS控制台.每当我尝试添加标题时:

它似乎并不尊重它.我该怎么做才能确保提供此标头?
我遇到了同样的问题(使用 S3/CloudFront),目前似乎无法轻松设置。
S3 有一个允许的标头白名单,并且 Content-Security-Policy 不在其中。虽然您确实可以使用前缀 x-amz-meta-Content-Security-Policy,但这并没有帮助,因为浏览器不支持它。
我可以看到两个选项。
1) 您可以从 EC2 实例上的网络服务器提供 html 内容,并将其设置为另一个 CloudFront 源。不是一个很好的解决方案。
2) 将 CSP 作为元标记包含在您的 html 文档中:
<!doctype html>
<html>
<head>
<meta http-equiv="Content-Security-Policy" content="default-src http://*.foobar.com 'self'">
...
Run Code Online (Sandbox Code Playgroud)
这个选项没有被浏览器广泛支持,但它似乎适用于 Webkit 和 Firefox,所以当前的 Chrome、Firefox、Safari(和 IOS 7 Safari)似乎支持它。
我选择了 2,因为它是更简单/更便宜/更快的解决方案,我希望 AWS 将来会添加 CSP 标头。
小智 5
如果您通过 CloudFront 进行测试,您是否确保已使缓存对象失效?您可以尝试上传一个全新的文件,然后尝试通过 CF 访问它并查看标题是否仍然存在?
更新
似乎自定义元数据不会按照 DOC 的预期工作。除了 S3 支持的元数据(下拉列表中显示的元数据)之外的任何元数据都必须以 x-amz-meta- 为前缀
S3/CloudFront 接受源设置的任何标头并将它们转发给客户端,但您不能直接在响应中设置自定义标头。
您可以使用可以通过 CloudFront 注入安全标头的 Lambda@Edge 函数。
以下是该过程的工作原理:(参考 aws 博客)
以下是来自 aws 的博客,介绍如何逐步执行此操作。