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

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

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

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

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

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

Как узнать идентификатор

  • Пользователь — в качестве идентификатора используйте Email пользователя. Его можно просмотреть в разделе Пользователи на вкладке Пользователи проекта или Пользователи федерации.

  • Сервисный аккаунт — идентификатор сервисного аккаунта указан в поле Название в разделе Пользователи на вкладке Сервисные аккаунты.

  • Системная группа — для выдачи разрешений используйте URI системной группы.

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

Разрешения 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
Запустили Evolution free tier
для Dev & Test
Получить