Эта функция Apache использует поиск DNS для проверки того, что IP-адрес клиента имеет запись обратного DNS, соответствующую рассматриваемому имени домена, и что прямая запись для имени хоста также указывает на этот IP-адрес.
Эта конфигурация приведет к тому, что Apache httpd выполнит двойной поиск DNS на IP-адресе клиента, независимо от значения директивы HostnameLookups
. Он выполнит обратный поиск DNS по IP-адресу, чтобы найти соответствующее имя хоста, а затем выполнит прямой поиск по имени хоста, чтобы убедиться, что он соответствует исходному IP-адресу. Только если прямой и обратный DNS согласованы и совпадения имен хостов будут разрешены.
S3 напрямую не поддерживает такую конфигурацию.
Если вы можете получить действительные диапазоны IP-адресов, вы можете разрешить доступ на основе исходного IP-адреса (или запретить доступ на основе «не исходного IP-адреса»), используя политику сегмента. Это не поддерживает обратное сопоставление на основе DNS, но поддерживает диапазоны CIDR.
См. Ограничение доступа к определенным IP-адресам в Руководстве разработчика по Amazon S3.
Запросы, не соответствующие такой политике, будут видеть общее сообщение «Отказано в доступе», которое нельзя настроить.
Другой альтернативой, которая позволила бы реализовать эту логику способом, эквивалентным Apache, было бы присоединить дистрибутив CloudFront к корзине, а затем использовать Lambda @ Edge Viewer Триггер запроса - небольшой фрагмент кода Node.JS JavaScript, который запускается в функции Lambda на краю - для поиска DNS и разрешения или запрета доступа.
Структура событий обеспечивает event.Records[0].cf.request.clientIp
. Вам нужно будет выполнить два поиска DNS с использованием распознавателя dns
от Node.js и вернуть ответ, сигнализирующий CloudFront о том, следует ли разрешить или отклонить запрос. Если отказано, вы можете вернуть пользовательский ответ размером до 40 КБ, что может объяснить отказ.
Код триггера Lambda @ Edge запускается в управляемой контейнеризованной среде, которая имеет тенденцию сохранять свои глобальные переменные между вызовами, поэтому поиски DNS могут кэшироваться в памяти, избегая поиска повторных вызовов для того же средства просмотра. Природа этого «повторного использования контейнера» выходит за рамки этого ответа. Это не гарантируется, но встречается очень часто.