HSTS в Amazon CloudFront из источника S3

Можно ли установить заголовки HSTS в дистрибутиве Amazon CloudFront из источника S3?

10
задан 15 December 2016 в 18:21
5 ответов

В настоящее время это невозможно, см. https://forums.aws.amazon.com/thread.jspa?threadID=162252 для обсуждения этого вопроса.

Edit: Lambda @ Edge сделала это возможным, см. Ниже.

7
ответ дан 2 December 2019 в 22:01

Обновление этого ...

Заголовки ответа 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);
};
10
ответ дан 2 December 2019 в 22:01

Верно, поскольку Lambda @ Edge общедоступна, они ограничили ее доступ к N Вирджиния, и нужно выбрать узел 6.10, а не узел 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.

1
ответ дан 2 December 2019 в 22:01

Чтобы добавить к ответу Эндрю:

Я только что попробовал это и пару примечаний: Больше нет конкретной среды выполнения граничных узлов nodejs, но лямбда должна быть создана в регионе Северная Вирджиния и запускаться с помощью cloudfront origin-response или viewer-response .

из коробки, похоже, больше не работает. Это дает 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" } ];
4
ответ дан 2 December 2019 в 22:01

Еще одно обновление по этому поводу...

Теперь вы можете добавлять собственные заголовки ответов HTTP, (включая CORS и заголовки безопасности, такие как HSTS), изначально в CloudFront — без изменения вашего источника или написания функций. Если вы перейдете к Политики > Заголовки ответов в консоли, вы можете создать повторно используемую политику с вашей конфигурацией, а затем прикрепить ее к одному или нескольким поведениям кэша, где вы хотели бы добавить эти заголовки. Это также доступно через API, CLI, SDK и т. д.

Документация доступна здесь: https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/adding-response-headers.html

1
ответ дан 2 November 2021 в 21:03

Теги

Похожие вопросы