AWS Cloudfront добавить пользовательский заголовок без использования Lambda@Edge - PullRequest
0 голосов
/ 08 апреля 2020

Я хотел бы добавить x-frame-options как sameorigin к AWS CloudFront , который обслуживает мое приложение на S3 bucket.

Я не хочу добавлять новую Lambda функцию для редактирования заголовка запроса.

На самом деле я нашел место под Прикрепленным файлом:

Распределения CloudFront -> Мои настройки распространения -> Источник и группы источников -> Элемент содержимого S3, представляющий мое приложение -> Добавить пользовательские заголовки источника -> Имя заголовка: x-frame-options , Значение: sameorigin

но при развертывании, идущем к концу, sh все еще получает старые заголовки во всех связанных запросах к файлам корзины S3 и URL-адресам.

enter image description here

Как добавить заголовки без какой-либо лямбда-функции, непосредственно работающей с существующей панелью AWS CloudFront?

1 Ответ

1 голос
/ 08 апреля 2020

«Настраиваемые заголовки источника», которые вы настраиваете, являются не заголовками, которые добавляются к ответу от источника, а скорее к запросу, сделанному к источнику. Из документации CloudFront :

Вы можете настроить CloudFront для добавления пользовательских заголовков к запросам, отправляемым вашему источнику. Эти пользовательские заголовки позволяют отправлять и собирать информацию из вашего источника, которую вы не получаете с типичными запросами зрителя. Эти заголовки можно даже настроить для каждого источника. CloudFront поддерживает настраиваемые заголовки как для нестандартных источников, так и для источников Amazon S3.

Так что добавление заголовков ответов невозможно. Хотя существует возможность использовать метаданные S3 для воздействия на заголовки, возвращаемые зрителю, это работает только для Content-Type -header, так что это не вариант.

Лучший опция заключается в использовании функции Lambda@Edge. Хотя это звучит как громоздкое и дорогое решение, на самом деле это не так. Для вашего случая использования код этой функции Lambda@Edge может быть таким простым, как показано ниже:

def lambda_handler(event, context):
    response = event["Records"][0]["cf"]["response"]
    response["headers"]["x-frame-options"] = ":sameorigin"
    return response

Когда вы сконфигурируете эту функцию Lambda@Edge для запуска событий "Response Origin" в CloudFront, она выиграет не выполняется для каждого запроса средства просмотра, но вместо этого, только когда содержимое, возвращаемое средству просмотра, не кэшируется CloudFront и должно быть сначала извлечено из S3. Это помогает минимизировать дополнительную задержку и затраты, вызванные выполнением функции Lambda@Edge.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...