Списки управления доступом (ACL) в Object Storage
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
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:
в теле запроса — в виде 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 в явном виде.
Пример 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
- Виды разрешений
- Canned ACL
- Системные группы
- Установка ACL
- Пример ACL