在 AWS CloudFront 和 S3 上配置 X-Frame-Options 响应标头

2024-04-16

我想补充一下X-Frame-Options使用 Cloudfront 缓存托管在 Amazon S3 上的静态内容的 HTTP 响应标头。如何添加这些标头?


您可以使用以下命令将 x-frame-options 标头添加到 CloudFront / S3 的响应中:Lambda@Edge http://docs.aws.amazon.com/lambda/latest/dg/lambda-edge.html功能。 lambda 代码在本地边缘位置运行,但需要在本地边缘位置中创建和维护us-east-1 region.

这里的示例代码使用nodeJS 6.10添加响应头

'use strict'; 
 exports.handler = (event, context, callback) => {
   const response = event.Records[0].cf.response; 
   const headers = response.headers; 
   response.headers['x-frame-options'] = [{"key":"X-Frame-Options","value":"SAMEORIGIN"}]; 
   console.log(response.headers); 
   callback(null, response);
 }; 

创建 Lambda 的最终版本,然后将 Lambda 版本的触发器配置设置为 CloudFrontorigin-response路径模式行为的事件类型。

该示例代码将事件记录到 CloudWatch 日志服务以进行调试。如果您还没有,则需要设置一个 lambda 执行 IAM 角色,该角色允许一项允许 CloudWatch 日志操作由以下人员承担的策略:edgelambda.amazonaws.com and lambda.amazonaws.com.

允许将日志写入 CloudWatch 的基本 Lambda 执行策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": "arn:aws:logs:*:*:*",
            "Effect": "Allow"
        }
    ]
}

信任关系允许 Lambda 和 Lambda@Edge 承担该角色:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "edgelambda.amazonaws.com",
          "lambda.amazonaws.com"
        ]
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

如果 AWS 只允许在 GUI 中设置 x-frame-options 标头,那就更好了,但在此之前此解决方案可以正常工作,并且可以让您的安全审核员满意。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 AWS CloudFront 和 S3 上配置 X-Frame-Options 响应标头 的相关文章

随机推荐