Amazon Web Services (aws) S3 - ограничить доступ к корзине на основе имени хоста - PullRequest
0 голосов
/ 21 марта 2019

Я пытаюсь предоставить / ограничить доступ к корзине на основе имени хоста. Таким образом, каждому запросу от * .something.edu будет предоставлен доступ. В основном я хочу повторить Apache Allow from (partial) domain-name https://httpd.apache.org/docs/2.4/mod/mod_access_compat.html. Любая помощь будет оценена.

1 Ответ

1 голос
/ 22 марта 2019

Эта функция 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 могут кэшироваться в памяти, избегая поиска повторных вызовов для того же средства просмотра. Природа этого «повторного использования контейнера» выходит за рамки этого ответа. Это не гарантируется, но встречается очень часто.

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