Est-il possible de définir des en-têtes HST sur une distribution d'Amazon CloudFront d'une origine S3?
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.
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);
};
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" } ];
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.