«Настраиваемые заголовки источника», которые вы настраиваете, являются не заголовками, которые добавляются к ответу от источника, а скорее к запросу, сделанному к источнику. Из документации 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.