在AWS CloudFront和S3上配置X-Frame-Options响应头 [英] Configuring X-Frame-Options Response Header on AWS CloudFront and S3
本文介绍了在AWS CloudFront和S3上配置X-Frame-Options响应头的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想为托管在具有CloudFront缓存的Amazon S3上的静态内容添加X-Frame-Options
HTTP响应头。如何添加这些标头?
推荐答案
您可以使用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.com
和lambda.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屋!
查看全文