web-dev-qa-db-fra.com

HSTS sur Amazon Cloudfront d'origine S3

Est-il possible de définir des en-têtes HST sur une distribution d'Amazon CloudFront d'une origine S3?

11
chrisvdb

Il n'est pas possible actuellement, voir https://forums.aws.amazon.com/thread.jspa?ThreadId=162252 pour une discussion à ce sujet.

Modifier: Lambda @ Edge a permis de voir ci-dessous.

7
Jason Martin

Une mise à jour sur cette ...

Les en-têtes de réponse HTTP peuvent maintenant être personnalisés via des fonctions Lambda @ Edge. S'il vous plaît voir http://docs.aws.amazon.com/amazoncloudfront/latest/developerguide/lambda-at-the-ge.html pour la documentation. Pour essayer cela, créez une nouvelle fonction Lambda dans la console AWS. Choisissez 'Edge Nodge.js 4.3' pour la langue et recherchez le modèle de cloud-Modify-Response-Response-Response-Header. Si vous faites cela, Lambda vous demandera la distribution et l'événement CloudFront d'appliquer la fonction. Notez que vous pouvez modifier ou modifier ceci à tout moment en allant à l'onglet Comportement CloudFront.

Voici un exemple de la fonction 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);
};
10
Andrew Elmhorst

Pour ajouter à la réponse d'Andrew:

Je viens d'essayer ceci et quelques notes: il n'y a plus de Edge Nodejs Runtime, mais la Lambda doit être créée dans la région de la Virginia et déclenchée par Cloudfront réponse d'origine ou Visionneuse-réponse.

Le code de la boîte ne semble plus fonctionner. Il donne ERR_Content_Decoding_Failed.

La solution consiste à utiliser la syntaxe JSON comme suit:

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" } ];
4
Adam Maschek

Correct, car Lambda @ Edge est généralement disponible, ils l'ont limité à N Virginia et il faut choisir Node 6.10 plutôt que Node 4.3.

La partie pertinente de notre code ci-dessous (à notre objectif, il s'agira toujours d'une redirection permanente de 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);
};

En configurant différents comportements sur CloudFront, vous pouvez limiter quelles demandes appelleront la fonction Lambda.

1
chrisvdb