在AWS CloudFront和S3上配置X-Frame-Options响应头 [英] Configuring X-Frame-Options Response Header on AWS CloudFront and S3

查看:24
本文介绍了在AWS CloudFront和S3上配置X-Frame-Options响应头的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想为托管在具有CloudFront缓存的Amazon S3上的静态内容添加X-Frame-OptionsHTTP响应头。如何添加这些标头?

推荐答案

您可以使用Lambda@Edge函数将x-Frame-Options头部添加到来自CloudFront/s3的响应中。Lambda代码在本地边缘位置运行,但需要在us-east-1区域中创建和维护。

此处的示例代码使用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 Logs服务以供调试。如果您还没有,您将需要设置lambda执行IAM角色,该角色允许edgelambda.amazonaws.comlambda.amazonaws.com承担CloudWatch日志操作的策略。

允许将日志写入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只允许在图形用户界面中设置x-Frame-Options标头,情况会更好,但在此之前,此解决方案会起作用,让您的安全审核员满意。

这篇关于在AWS CloudFront和S3上配置X-Frame-Options响应头的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆