HSTS на Amazon CloudFront з походження S3


11

Чи можна встановити заголовки HSTS на дистрибутиві Amazon CloudFront з походження S3?

Відповіді:



10

Оновлення цього ...

Заголовки відповідей HTTP тепер можна налаштувати за допомогою функцій Lambda @ edge. Перегляньте http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-at-the-edge.html для документації. Щоб спробувати це, створіть нову лямбда-функцію в консолі AWS. Виберіть "Edge Nodge.js 4.3" для мови та шукайте шаблон-заголовок cloudfront-modify-response-header. Якщо ви це зробите, Lambda запитає вас, до якого розповсюдження та події CloudFront застосувати функцію. Зауважте, що ви можете будь-коли відредагувати або змінити це, перейшовши на вкладку поведінки Cloudfront.

Ось приклад функції лямбда ...

'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);
};

1
Чудово, спробую це!
chrisvdb

Я наткнувся на ту саму статтю ... це працювало для вас? @chrisvdb
Steverino

@Steverino насправді не намагався його спробувати, але оскільки ми лише створюємо другий статичний веб-сайт, який може отримати користь від нього, ми можемо спробувати його в цьому випадку. Я доповім у цьому випадку, будь ласка, зробіть це теж. Було б цікаво також зрозуміти вплив на продуктивність.
chrisvdb

1
Оновлення - виявляється, що обмеження в 100 TPS у поточній попередній версії Lambda @ Edge недостатньо для надійного обслуговування нашого (простого та малопотужного) веб-сайту. Деякі активи випадковим чином отримують 50-кратний код відповіді.
chrisvdb

1
Формат заголовків відповідей змінився. Зазначене більше не працює.
Хаміш Моффат

4

Щоб додати до відповіді Ендрю:

Я тільки що спробував це і пару зауважень: Існує вже не конкретний час виконання крайових вузлів, але лямбда потрібно створити в регіоні N Вірджинія і викликати реакцію на початок або відповідь глядача .

Код з коробки, схоже, вже не працює. Це дає ERR_CONTENT_DECODING_FAILED.

Рішення полягає у використанні синтаксису json наступним чином:

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

Більше інформації про заголовки тут: infosec.mozilla.org/guidelines/web_security
Josh Habdas

1

Правильно, оскільки Lambda @ Edge загальнодоступний, вони обмежили його N Вірджинією, і потрібно вибрати Node 6.10, а не Node 4.3.

Відповідна частина нашого коду нижче (для нашої мети це завжди буде постійне переадресація 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);
};

Конфігуруючи різні способи поведінки на CloudFront, ви можете обмежити, які запити будуть викликати функцію Lambda.


Це означало як відповідь на пост Адама Машека ...
chrisvdb
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.