Поддержка 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. Запрос обрабатывается в следующем порядке:

  1. Если в политике доступа есть явный запрет (Deny) — запрос отклоняется немедленно, ACL не проверяется.
  2. Если в политике доступа есть явное разрешение (Allow) — запрос выполняется без проверки ACL.
  3. Если политика доступа не даёт ни явного разрешения, ни запрета — в дело вступает ACL.
ACL не умеет запрещать

ACL может только расширить права (например, разрешить чтение конкретного объекта), и только если политика доступа не содержит явного запрета. Явно запретить операцию с помощью ACL нельзя.

Ownership Controls

Поведение ACL зависит от настройки владения бакетом (Bucket Ownership):

РежимДействие
BucketOwnerEnforcedACL выключен: запрос, требующий проверки ACL, будет отклонён.
BucketOwnerPreferred / ObjectWriterACL включён. Разница — кто становится владельцем нового объекта: при 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.
Смотрите также
Политики доступа