- tocdepth
2
Списки управления доступом (ACL) в Object Storage
ACL (Access Control List) — список разрешений на действия с объектами и бакетами, который хранится в самом Object Storage. Списки управления определяют, каким пользователям разрешен доступ к ресурсам.
Для каждого нового ресурса в хранилище создается пустой ACL. По умолчанию, доступ к бакетам, объектам и их ACL имеет только создатель этих ресурсов.
Загружать или просматривать ACL можно через операции API или сторонние инструменты, например AWS CLI.
Удалить ACL нельзя. Чтобы удалить разрешения для ресурса, нужно загрузить пустой ACL.
С помощью ACL можно выдать разрешения пользователю проекта, сервисному аккаунту или системной группе. Чтобы выдать разрешение, нужно знать идентификатор его получателя.
Как узнать идентификатор
Пользователь — в качестве идентификатора используйте Email пользователя. Его можно просмотреть в разделе Пользователи на вкладке Пользователи проекта или Пользователи федерации.
Сервисный аккаунт — идентификатор сервисного аккаунта указан в поле Название в разделе Пользователи на вкладке Сервисные аккаунты.
Системная группа — для выдачи разрешений используйте URI системной группы.
Виды разрешений
Разрешения ACL соответствуют разрешениям, которые можно выдать с помощью сервисной роли.
Разрешение |
Сервисная роль |
Бакет |
Объект |
---|---|---|---|
|
|
|
Чтение объекта. |
|
|
Запись, перезапись и удаление объектов в бакете. Используется только вместе с |
Не применяется, при записи объекта в бакет проверяются разрешения для бакета. |
|
|
Чтение ACL. |
Чтение ACL. |
|
|
Запись ACL. |
Запись ACL. |
|
|
Полный доступ к бакетам ( |
Полный доступ к объектам ( |
Canned ACL
Canned ACL или предопределенные ACL — списки, в которых заранее определены набор получателей и разрешений.
В одном запросе можно указать только один из предопределенных ACL.
Canned ACL |
Ресурс |
Что разрешает |
---|---|---|
|
Бакет/Объект |
Владелец получает разрешение Устанавливается по умолчанию при создании или загрузке ресурса. |
|
Бакет/Объект |
Владелец получает разрешение |
|
Бакет/Объект |
Владелец получает разрешение Не рекомендуется указывать для бакета. |
|
Бакет/Объект |
Владелец получает разрешение |
|
Объект |
Владелец объекта получает разрешение Если указать этот Canned ACL при создании бакета, то Object Storage его проигнорирует. |
|
Объект |
Владелец объекта и владелец бакета получают разрешение Если указать этот 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>
<Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group">
<URI>http://acs.amazonaws.com/groups/global/AllUsers</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.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
Запрос:
PUT /bucket1/?acl=null HTTP/1.1
Host: storage.cloud.croc.ru
X-Amz-Content-Sha256: beaead3198f7da1e70d03ab969765e0821b24fc913697e929e726aeaebf0eba3
X-Amz-Date: 20220531T103904Z
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
Content-Type: text/plain
Content-Length: 1249
<AccessControlPolicy>
<Owner>
<ID>4df31208-3a99-44cd-adde-ab6b307048c5</ID>
</Owner>
<AccessControlList>
<Grant>
<Grantee xmlns:_XMLSchema-instance="http://www.w3.org/2001/XMLSchema-instance" _XMLSchema-instance:type="Group">
<URI>http://acs.amazonaws.com/groups/global/AllUsers</URI>
</Grantee>
<Permission>READ</Permission>
</Grant>
<Grant>
<Grantee xmlns:_XMLSchema-instance="http://www.w3.org/2001/XMLSchema-instance" _XMLSchema-instance:type="Group">
<URI>http://acs.amazonaws.com/groups/global/AllUsers</URI>
</Grantee>
<Permission>WRITE</Permission>
</Grant>
<Grant>
<Grantee xmlns:_XMLSchema-instance="http://www.w3.org/2001/XMLSchema-instance" _XMLSchema-instance:type="CanonicalUser">
<ID>4df31208-3a99-44cd-adde-ab6b307048c5</ID>
</Grantee>
<Permission>FULL_CONTROL</Permission>
</Grant>
</AccessControlList>
</AccessControlPolicy>
Ответ:
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
для Dev & Test