Você pode adicionar cabeçalhos personalizados à resposta do CloudFront / S3 usando um Lambda @ Edge função. O código lambda é executado dentro dos locais de borda locais, mas precisa ser criado e mantido na região us-east-1
.
O código de exemplo aqui usa nodeJS 6.10 para adicionar o cabeçalho de resposta x-frame-options
, mas você pode adicionar qualquer cabeçalho que não seja restricted da AWS.
'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);
};
Crie uma versão definitiva do Lambda e defina a configuração do acionador da versão Lambda como o tipo de evento origin-response
do CloudFront para seu comportamento de padrão de caminho.
O código de exemplo registra eventos no serviço de logs do CloudWatch para fins de depuração. Se você ainda não tiver uma, precisará configurar uma função IAM de execução lambda que permita uma política que permita que as ações de logs do CloudWatch sejam assumidas por edgelambda.amazonaws.com
e lambda.amazonaws.com
.
Política básica de execução de lambda que permite que os registros sejam gravados no CloudWatch:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:*:*:*",
"Effect": "Allow"
}
]
}
Confie no Relacionamento, permitindo que o Lambda e o Lambda @ Edge assumam o papel:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": [
"edgelambda.amazonaws.com",
"lambda.amazonaws.com"
]
},
"Action": "sts:AssumeRole"
}
]
}
Seria melhor se a AWS simplesmente permitisse que os cabeçalhos personalizados fossem definidos usando a GUI do CloudFront, mas até lá essa solução deveria satisfazer sua necessidade.