Облачная платформаEvolution

Списки управления доступом (ACL) в Object Storage


ACL (Access Control List) — список разрешений на действия с объектами и бакетами, который хранится в самом Object Storage. Списки управления определяют, каким пользователям разрешен доступ к ресурсам.

Для каждого нового ресурса в хранилище создается пустой ACL. По умолчанию доступ к бакетам, объектам и их ACL есть только у создателя этих ресурсов.

Загружать или просматривать ACL можно через операции API или сторонние инструменты, например AWS CLI.

Удалить ACL нельзя. Чтобы удалить разрешения для ресурса, нужно загрузить пустой ACL.

С помощью ACL можно выдать разрешения пользователю проекта, сервисному аккаунту или системной группе. Чтобы выдать разрешение, нужно знать идентификатор его получателя.

Виды разрешений

Разрешения ACL соответствуют разрешениям, которые можно выдать с помощью сервисной роли.

Разрешение

Сервисная роль

Бакет

Объект

READ

s3e.viewer

  • Получение списка объектов в бакете.

  • Чтение всех объектов в бакете.

  • Чтение настроек CORS.

Чтение объекта.

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

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 можно установить как при создании ресурса, так и на уже созданном бакете или объекте.

Передать параметры ACL можно операцией PUT:

Чтобы установить 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 в явном виде.

Пример ACL

Запрос предоставляет:

  • полный контроль над бакетом его владельцу;

  • права на запись объектов в бакет — аутентифицированным пользователям;

  • права на чтение объектов — всем пользователям.


Запрос:

PUT /bucket_name/?acl=null HTTP/1.1
Host: s3.cloud.ru
x-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: bafb46c18574a73704c8227aef060df1c12ea0d964e19b949d06e9f763805fe2
X-Amz-Date: 20240228T102625Z
Authorization: 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 OK
x-amz-request-id: 318BC8BC148832E5
x-amz-version-id: 3/L4kqtJlcpXrof3vjVBH40Nr8X8gdRQBpUMLUo
Date: Wed, 28 Feb 2024 10:26:26 GMT
Last-Modified: Wed, 28 Feb 2024 10:26:26 GMT
Content-Length: 0
Connection: close
Server: s3.cloud.ru