Чтобы защитить данные в Object Storage, разграничьте доступ к ресурсам хранилища. Разные группы пользователей смогут выполнять только те действия, которые им разрешены — просматривать содержимое бакета, скачивать и загружать объекты или настраивать хранилище.
Настраивать доступ к ресурсам Object Storage можно с помощью ролей, Access Control List (ACL) и политики доступа (Bucket Policy).
Используйте ACL и Bucket Policy с осторожностью: при неправильной настройке можно случайно заблокировать доступ к данным.
Роли содержат наборы разрешений, которые описывают допустимые для пользователей операции. Роль может предоставлять права в отдельном сервисе или во всех сервисах платформы. Можно использовать не только предзаданные роли, но и создать собственную, настроив для нее набор доступных действий.
Роли подойдут для небольших проектов с простыми требованиями безопасности, где пользователям удобно выдавать предзаданные группы прав.
ACL разрешает действия с бакетами на основе списка, в котором перечислены пользователи и их права. ACL создается для каждого бакета и позволяет разрешить пользователю или группе пользователей широкий набор операций — например операции чтения или записи.
ACL можно использовать, если для некоторых бакетов нужны индивидуальные, но несложные настройки доступа. Например, ACL подойдет, если нужно сделать бакет публичным.
Bucket Policy определяет, кто и при каких условиях может выполнять действия с бакетом и объектами. Bucket Policy позволяет задавать более детальные правила доступа к ресурсам, чем ACL. С помощью политики доступа можно, например, запретить доступ к бакету для определенных IP-адресов или требовать шифрование объектов перед загрузкой.
Bucket Policy лучше использовать, когда бакетов или объектов в хранилище много и важно детально настраивать условия доступа — например, учитывать при проверках заголовки запроса, IP-адрес, тип операции, префикс объекта и т. д.
Когда запрос поступает в систему, механизмы контроля доступа проверяют разрешения по определенному алгоритму. Алгоритм проверок отличается для авторизованных и анонимных запросов.
Схема алгоритма приведена на рисунке ниже.
Если запрос содержит подпись AWS Signature V4, проверка доступа выполняется по следующему алгоритму:
Система проверяет валидность подписи:
Подпись не валидна — операция запрещается.
Подпись валидна — выполняется следующая проверка.
Система проверяет, есть ли у пользователя полные права на операции с хранилищем:
Права есть — операция разрешается.
Прав нет — выполняется следующая проверка.
Полным доступом обладают роли, которым разрешено действие s3e.tenant.edit:
Сервисная роль s3e.admin.
Пользовательская роль, которой действие s3e.tenant.edit было назначено вручную или через наследование прав s3e.admin.
Проектная роль Администратор проекта.
Система проверяет роль пользователя:
Роль не разрешает операцию или не назначена — операция запрещается.
Роль разрешает операцию — выполняется следующая проверка.
Если в бакете установлена Bucket Policy:
Система проверяет, устанавливает ли Bucket Policy прямой запрет на операцию:
Устанавливает — операция запрещается.
Не устанавливает — выполняется следующая проверка.
Система проверяет, устанавливает ли Bucket Policy прямое разрешение на операцию:
Устанавливает — операция разрешается.
Не устанавливает — выполняется следующая проверка.
Система сверяет данные в запросе со списком ACL:
В списке есть разрешение — операция разрешается.
В списке нет разрешений — операция запрещается.
Если в бакете не установлена Bucket Policy, система сверяет данные в запросе со списком ACL:
В списке есть разрешение — операция разрешается.
В списке нет разрешений — операция запрещается.
Если запрос не содержит подписи AWS Signature V4, проверка доступа выполняется по следующему алгоритму:
Система проверяет, является ли запрос preflight-запросом:
Является — операция разрешается.
Не является — выполняется следующая проверка.
Система проверяет, не установлен ли в бакете запрет на публичный доступ:
Установлен — операция запрещается.
Не установлен — выполняется следующая проверка.
Если в бакете установлена Bucket Policy:
Система проверяет, устанавливает ли Bucket Policy прямой запрет на операцию:
Устанавливает — операция запрещается.
Не устанавливает — выполняется следующая проверка.
Система проверяет, устанавливает ли Bucket Policy прямое разрешение на операцию:
Устанавливает — операция разрешается.
Не устанавливает — выполняется следующая проверка.
Если в бакете не установлена Bucket Policy:
Система проверяет, игнорируются ли ACL, открывающие публичный доступ к бакету:
Игнорируются — операция запрещается.
Не игнорируются — выполняется следующая проверка.
Система сверяет данные в запросе со списком ACL:
В списке есть разрешение — операция разрешается.
В списке нет разрешений — операция запрещается.