Поддержка ACL
Назначение
ACL (Access Control List) — классический механизм управления доступом S3. В современной спецификации AWS он считается устаревшим (deprecated), и вместо него рекомендуется использовать Политики доступа (в том числе в формате S3 Bucket Policy).
В ЗАКРОМА.Хранение поддержка ACL реализована для совместимости с legacy-клиентами, которым необходима работа именно с этим механизмом.
Управление только через S3 APIУправление ACL осуществляется исключительно через S3 API. В административной консоли (Web UI) настройки ACL не отображаются и не управляются.
Приоритет политик доступа и ACL
Политика доступа (Bucket Policy) всегда имеет приоритет над ACL. Запрос обрабатывается в следующем порядке:
- Если в политике доступа есть явный запрет (
Deny) — запрос отклоняется немедленно, ACL не проверяется. - Если в политике доступа есть явное разрешение (
Allow) — запрос выполняется без проверки ACL. - Если политика доступа не даёт ни явного разрешения, ни запрета — в дело вступает ACL.
ACL не умеет запрещатьACL может только расширить права (например, разрешить чтение конкретного объекта), и только если политика доступа не содержит явного запрета. Явно запретить операцию с помощью ACL нельзя.
Ownership Controls
Поведение ACL зависит от настройки владения бакетом (Bucket Ownership):
| Режим | Действие |
|---|---|
BucketOwnerEnforced | ACL выключен: запрос, требующий проверки ACL, будет отклонён. |
BucketOwnerPreferred / ObjectWriter | ACL включён. Разница — кто становится владельцем нового объекта: при ObjectWriter им становится загрузивший объект пользователь. |
Управление настройками владения выполняется методами GetBucketOwnershipControls/PutBucketOwnershipControls.
Владение объектами
Владелец объекта (Owner) автоматически обладает правами FULL_CONTROL на этот объект. В ЗАКРОМА.Хранение это реализовано через указание Owner ID в метаданных объекта.
Разрешение READ на уровне бакета даёт только право на листинг объектов, но не на скачивание — для скачивания нужен READ на конкретный объект или владение им.
Поддерживаемые разрешения и группы
Разрешения
| Тип сущности | Поддерживаемые разрешения |
|---|---|
| Бакет | READ, WRITE, READ_ACP, WRITE_ACP, FULL_CONTROL |
| Объект | READ, READ_ACP, WRITE_ACP, FULL_CONTROL |
Предустановленные группы
| Группа | Описание |
|---|---|
AllUsers | Доступ разрешён всем, включая неаутентифицированных пользователей (публичный доступ). |
AuthenticatedUsers | Доступ разрешён любым аутентифицированным пользователям системы. |
Ограничение группГруппа
LogDelivery(используется в AWS для сбора логов) не поддерживается. КромеAllUsersиAuthenticatedUsers, другие группы для ACL недоступны.
Управление через AWS CLI
Управление владением и ACL выполняется стандартными командами AWS CLI.
Создание бакета и настройка Ownership Controls:
1aws s3api create-bucket --bucket test1 --endpoint-url "$ENDPOINT" 2 3aws s3api put-bucket-ownership-controls \ 4 --bucket test1 \ 5 --ownership-controls "Rules=[{ObjectOwnership=ObjectWriter}]" \ 6 --endpoint-url "$ENDPOINT"
Установка и получение ACL бакета:
1# Установка ACL 2aws s3api put-bucket-acl \ 3 --bucket test1 \ 4 --access-control-policy file://acl.json \ 5 --endpoint-url "$ENDPOINT" 6 7# Получение текущего ACL 8aws s3api get-bucket-acl \ 9 --bucket test1 \ 10 --endpoint-url "$ENDPOINT"
Аналогичные команды (put-object-acl, get-object-acl) применяются для управления доступом к конкретным объектам.
Возможные причины отказа в доступе
| Ситуация | Что проверить |
|---|---|
| Запрос отклоняется, хотя в ACL есть разрешение | Проверьте политику доступа: явный Deny в ней имеет приоритет над ACL. |
| Ошибка при попытке установить ACL на бакет | Проверьте настройку Ownership Controls. Если включён BucketOwnerEnforced — ACL выключен. |
Пользователь с READ на бакет не может скачать объект | READ на бакет даёт только листинг. Для скачивания нужен READ на объект или владение им. |
| Клиент не может использовать группы для ACL | Используйте только AllUsers или AuthenticatedUsers — другие группы, включая LogDelivery, не поддерживаются. |
Ограничения
- Настройки ACL недоступны в Web UI — работа только через S3 API/CLI.
- Механизм считается устаревшим (deprecated); для новых сценариев рекомендуется использовать Политики доступа.
- ACL не может явно запрещать операции — только разрешать.
- Поддерживаются только предустановленные группы
AllUsersиAuthenticatedUsers.