HSTS no Amazon CloudFront de origem S3

7

É possível definir cabeçalhos HSTS em uma distribuição do Amazon CloudFront a partir de uma origem S3?

    
por chrisvdb 15.12.2016 / 17:21

4 respostas

5

No momento não é possível, consulte o link para uma discussão sobre o assunto.

Editar: Lambda @ Edge tornou isso possível, veja abaixo.

    
por 15.12.2016 / 18:52
8

Uma atualização sobre isso ...

Os cabeçalhos de resposta HTTP agora podem ser personalizados por meio das funções de borda do Lambda @. Consulte o link para obter a documentação. Para tentar isso, crie uma nova função lambda no console da AWS. Escolha 'Edge Nodge.js 4.3' para o idioma e procure o modelo cloudfront-modify-response-header. Se você fizer isso, o Lambda perguntará para qual distribuição e evento do CloudFront aplicar a função. Observe que você pode editar ou alterar isso a qualquer momento acessando a guia Comportamento da Cloudfront.

Aqui está um exemplo de função lambda ...

'use strict';
exports.handler = (event, context, callback) => {

    const response = event.Records[0].cf.response;
    response.headers['Strict-Transport-Security'] = 'max-age=2592000; includeSubDomains';

    callback(null, response);
};
    
por 12.04.2017 / 00:20
4

Para adicionar à resposta de Andrew:

Acabei de experimentar isto e algumas notas: Não há mais tempo de execução de nodejs de borda específico, mas o lambda precisa ser criado na região de N Virginia e acionado pelo cloudfront origem-resposta ou visualizador-resposta .

O código fora da caixa parece não funcionar mais. Dá ERR_CONTENT_DECODING_FAILED.

A solução é usar a sintaxe do json da seguinte forma:

response.headers['Strict-Transport-Security'] = [ { key: 'Strict-Transport-Security', value: "max-age=31536000; includeSubdomains; preload" } ];
response.headers['X-Content-Type-Options']    = [ { key: 'X-Content-Type-Options', value: "nosniff" } ];
    
por 18.07.2017 / 15:26
1

Correto, uma vez que o Lambda @ Edge está geralmente disponível, eles o restringiram a N Virginia e um deles tem que escolher o Nó 6.10 ao invés do Nodo 4.3.

A parte relevante do nosso código abaixo (para o nosso propósito, este será sempre um redirecionamento permanente 302):

'use strict';
exports.handler = (event, context, callback) => {

  var request = event.Records[0].cf.request;
  const response = {
    status: '302',
    statusDescription: '302 Found',
    httpVersion: request.httpVersion,
    headers: {
      Location: [
        {
            "key":"Location",
            "value":"someURL"
        }
      ],
      'Strict-Transport-Security': [
        {
          "key":"Strict-Transport-Security",
          "value":'max-age=63072000; includeSubDomains; preload'
        }
      ],
    },
  };
  callback(null, response);
};

Ao configurar diferentes comportamentos no CloudFront, você pode limitar quais solicitações chamarão a função do Lambda.

    
por 18.07.2017 / 20:38