ACL (Access Control List) — список разрешений на действия с объектами и бакетами, который хранится в самом Object Storage. Списки управления определяют, каким пользователям разрешен доступ к ресурсам.
Для каждого нового ресурса в хранилище создается пустой ACL. По умолчанию доступ к бакетам, объектам и их ACL есть только у создателя этих ресурсов.
Загружать или просматривать ACL можно через операции API или сторонние инструменты, например AWS CLI.
Удалить ACL нельзя. Чтобы удалить разрешения для ресурса, нужно загрузить пустой ACL.
С помощью ACL можно выдать разрешения пользователю проекта, сервисному аккаунту или системной группе. Чтобы выдать разрешение, нужно знать идентификатор его получателя.
Разрешения ACL соответствуют разрешениям, которые можно выдать с помощью сервисной роли.
Разрешение | Сервисная роль | Бакет | Объект |
|---|---|---|---|
READ | s3e.viewer |
| Чтение объекта. |
WRITE | s3e.editor | Запись, перезапись и удаление объектов в бакете. Используется только вместе с READ, иначе вернется ошибка 501 Not Implemented. | Не применяется, при записи объекта в бакет проверяются разрешения для бакета. |
READ_ACP | s3e.viewer-acl | Чтение ACL. | Чтение ACL. |
WRITE_ACP | s3e.editor-acl | Запись ACL. | Запись ACL. |
FULL_CONTROL | s3e.admin | Полный доступ к бакетам (READ, WRITE, READ_ACP, WRITE_ACP). | Полный доступ к объектам (READ, READ_ACP, WRITE_ACP). |
Canned ACL или предопределенные ACL — списки, в которых заранее определены набор получателей и разрешений.
В одном запросе можно указать только один из предопределенных ACL.
Canned ACL | Ресурс | Что разрешает |
|---|---|---|
private | Бакет/Объект | Владелец получает разрешение FULL_CONTROL. Права доступа только у владельца. Устанавливается по умолчанию при создании или загрузке ресурса. |
public-read | Бакет/Объект | Владелец получает разрешение FULL_CONTROL, группа AllUsers получает разрешение READ. |
public-read-write | Бакет/Объект | Владелец получает разрешение FULL_CONTROL, группа AllUsers получает разрешения READ и WRITE. Не рекомендуется указывать для бакета. |
authenticated-read | Бакет/Объект | Владелец получает разрешение FULL_CONTROL, группа AuthenticatedUsers получает разрешение READ. |
bucket-owner-read | Объект | Владелец объекта получает разрешение FULL_CONTROL, владелец бакета получает разрешение READ. Если указать этот Canned ACL при создании бакета, то Object Storage его проигнорирует. |
bucket-owner-full-control | Объект | Владелец объекта и владелец бакета получают разрешение FULL_CONTROL над объектом. Если указать этот Canned ACL при создании бакета, то Object Storage его проигнорирует. |
Системная группы — группы пользователей, которые нельзя выбрать напрямую, но ими можно управлять через ACL, Bucket Policy или операции API.
В Object Storage используются две системные группы:
AllAuthenticatedUsers — все аутентифицированные в системе пользователи. Это все зарегистрированные пользователи и сервисные аккаунты, как из ваших проектов, так и из других проектов Cloud.ru.
AllUsers — все пользователи интернета, в том числе, неавторизованные в системе.
Чтобы выдать разрешение системной группе, в ACL используются URI.
<Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group"><URI>http://acs.amazonaws.com/groups/global/AuthenticatedUsers</URI></Grantee>
Назначение системных групп в ACL открывает доступ к операциям с ресурсом широкому кругу лиц. Прежде чем открывать публичный доступ к ресурсу, убедитесь, что в нем не содержится конфиденциальная информация.
ACL можно установить как при создании ресурса, так и на уже созданном бакете или объекте.
Передать параметры ACL можно операцией PUT:
в теле запроса — в виде XML-схемы для существующего бакета или объекта.
в заголовках запроса — при создании бакета с или загрузке объекта.
Чтобы установить ACL при создании ресурса, используются заголовки:
x-amz-acl — для задания Canned ACL.
x-amz-grant-read, x-amz-grant-write, x-amz-grant-read-acp, x-amz-grant-write-acp и x-amz-grant-full-control — для указания прав доступа в явном виде.
Оба типа заголовков одновременно использовать нельзя. Можно использовать либо Canned ACL, либо указать ACL в явном виде.
Запрос предоставляет:
полный контроль над бакетом его владельцу;
права на запись объектов в бакет — аутентифицированным пользователям;
права на чтение объектов — всем пользователям.
Запрос:
PUT /bucket_name/?acl=null HTTP/1.1Host: s3.cloud.rux-amz-grant-full-control: id="ea13e7cb-1501-4780-b300-00000111111"x-amz-grant-read: uri="http://acs.amazonaws.com/groups/global/AllUsers"x-amz-grant-write: uri="http://acs.amazonaws.com/groups/global/AuthenticatedUsers"X-Amz-Content-Sha256: bafb46c18574a73704c8227aef060df1c12ea0d964e19b949d06e9f763805fe2X-Amz-Date: 20240228T102625ZAuthorization: AWS4-HMAC-SHA256 Credential=1879b102-a455-49be-bbbb-cf547d17c481:d3ccb118adfdea5be049cbb2a5e96cf8/20240228/ru-central-1/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date;x-amz-grant-full-control;x-amz-grant-write, Signature=66b32114ac08a5d6d77907e5ab8a9c1f0022cff6692f1f3475168bf8d0559be3
Ответ:
HTTP/2 200 OKx-amz-request-id: 318BC8BC148832E5x-amz-version-id: 3/L4kqtJlcpXrof3vjVBH40Nr8X8gdRQBpUMLUoDate: Wed, 28 Feb 2024 10:26:26 GMTLast-Modified: Wed, 28 Feb 2024 10:26:26 GMTContent-Length: 0Connection: closeServer: s3.cloud.ru