您可以使用以下命令将 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 标头,那就更好了,但在此之前此解决方案可以正常工作,并且可以让您的安全审核员满意。