ACL
ACL (Access Control List, список управления доступом) позволяет контролировать, каким пользователям какие разрешены операции в сервисе VK Object Storage. Каждый бакет и объект имеет свой ACL, в котором перечислены получатели прав доступа и предоставленные им разрешения.
Доступны следующие методы API для операций с ACL бакетов и объектов:
- GetBucketACL — Получить ACL бакета.
- PutBucketACL — Установить ACL бакета.
- GetObjectACL — Получить ACL объекта.
- PutObjectACL — Установить ACL объекта.
Устанавливать ACL можно как при создании бакета или загрузке объекта, так и после. Задать конфигурацию ACL в методах PutBucketACL и PutObjectACL можно двумя способами:
- В теле запроса — в виде XML-структуры конфигурации ACL. Способ используется только для существующих бакетов или объектов.
- В заголовках запроса. Способ используется как при создании бакета или загрузке объекта, так и для существующих бакетов или объектов.
В одном запросе можно использовать только один из этих способов.
Конфигурация ACL в формате XML содержит следующие элементы:
-
<Owner>— содержит идентификатор (ID) и имя (DisplayName) того проекта, в котором находится бакет или объект. Чтобы получитьIDиDisplayName, запросите информацию об ACL бакета. -
<Grant>— определяет, какому получателю какие предоставляются разрешения.<Grant>содержит элементы<Grantee>и<Permission>.-
<Grantee>— указывает получателя прав доступа с помощью атрибутов:ID— идентификатор получателя прав.Type— тип получателя прав:CanonicalUserилиGroup.
-
<Permission>— указывает вид предоставляемого разрешения.
-
Пример XML-структуры конфигурации ACL:
<AccessControlPolicy><Owner><ID>Owner-canonical-user-ID</ID><DisplayName>owner-display-name</DisplayName></Owner><AccessControlList><Grant><Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CanonicalUser"><ID>Owner-canonical-user-ID</ID><DisplayName>owner-display-name</DisplayName></Grantee><Permission>FULL_CONTROL</Permission></Grant></AccessControlList></AccessControlPolicy>
Для указания конфигурации ACL в запросах PUT используются следующие заголовки:
x-amz-acl— назначает бакету или объекту преднастроенный стандартный ACL.x-amz-grant-read— устанавливает разрешение на чтение (READ).x-amz-grant-write— устанавливает разрешение на запись (WRITE).x-amz-grant-read-acp— устанавливает разрешение на чтение ACL (READ_ACP).x-amz-grant-write-acp— устанавливает разрешение на запись ACL (WRITE_ACP).x-amz-grant-full-control— дает полный контроль (FULL_CONTROL).
Заголовок x-amz-acl нельзя комбинировать в одном запросе с другими перечисленными заголовками. Можно либо использовать стандартный ACL, либо указывать получателей прав в явном виде.
Права доступа к бакетам и объектам могут быть даны следующим категориям получателей:
- Проект VK Cloud.
- Предварительно определенная метагруппа.
Проект — единственный получатель доступа в VK Object Storage с типом CanonicalUser. Назначается автоматически всем бакетам и объектам с правами FULL_CONTROL и полностью совпадает с владельцем. Удалить или изменить этого получателя доступа нельзя. Права, выданные проекту, распространяются на все аккаунты VK Object Storage внутри проекта.
Предопределенная метагруппа — получатель доступа в VK Object Storage с типом Group позволяет предоставить отдельные права для двух категорий пользователей за пределами проекта.
-
Authenticated Users(авторизованные пользователи) — все существующие учетные записи VK Object Storage, из всех проектов VK Cloud.Чтобы предоставить доступ группе
Authenticated Users:-
При установке с помощью XML-структуры внутри блока
Granteeукажите тег<URI>.Пример:
<URI>http://acs.amazonaws.com/groups/global/AuthenticatedUsers</URI> -
При установке с помощью заголовка используйте в его значении ключ
uri.Пример:
uri="http://acs.amazonaws.com/groups/global/AuthenticatedUsers"
-
-
All Users(все пользователи).Чтобы предоставить доступ группе
All Users:-
При установке с помощью XML-структуры внутри блока
Granteeукажите тег<URI>.Пример:
<URI>http://acs.amazonaws.com/groups/global/AllUsers</URI> -
При установке с помощью заголовка используйте в его значении ключ
uri.Пример:
uri="http://acs.amazonaws.com/groups/global/AllUsers"
Анонимные неавторизированные пользователи, если им предоставлен доступ, совершают действия под каноническим ID пользователя
65a011a29cdf8ec533ec3d1ccaae921c, так как у них нет учетной записи в проекте VK Cloud. -
В таблице приведены виды разрешений, которые VK Object Storage поддерживает в ACL. Для каждого разрешения указано, какие права оно дает и какие операции разрешает выполнять при предоставлении на бакете и на объекте.
Разрешение ACL | Предоставлено для бакета | Предоставлено для объекта |
|---|---|---|
| Получение списка объектов в бакете HeadBucket, ListMultiparts, ListObjects, ListParts | Чтение содержимого объекта и его метаданных GetObject, HeadObject |
| Создание, перезапись и удаление любого объекта в бакете AbortMultipartUpload, CompleteMultipartUpload, InitiateMultipartUpload, UploadPart, PutObject, DeleteObject | Неприменимо |
| Чтение ACL бакета GetBucketAcl | Чтение ACL объекта GetObjectAcl |
| Установка ACL для бакета PutBucketAcl | Установка ACL для объекта PutObjectAcl |
| Все права в рамках разрешений для бакета: | Все права в рамках разрешений для объекта: |
Получение ACL для бакета. Для получения необходимо иметь у бакета право READ_ACP.
Если право READ_ACP предоставлено анонимному пользователю, можно получать ACL бакета без использования заголовка авторизации.
Пример запроса:
GET /?acl HTTP/1.1Host: my-test-bucket1.hb.ru-msk.vkcloud-storage.rux-amz-content-sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855x-amz-date: 20200831T174434ZAuthorization: AWS4-HMAC-SHA256 Credential=II5JDQBAN3JYM4DNEB6C/20200831/ru-msk/s3/aws4_request,SignedHeaders=host;x-amz-content-sha256;x-amz-date,Signature=71dfa4666fb740d40d05307a29321c65cc620cdb17e8a9cb83d4f0e1b1b9d236
Пример ответа:
HTTP/1.1 200 OKDate: Mon, 31 Aug 2020 17:44:35 GMTx-amz-request-id: tx000000000000002764fa6-005963bd03-1268c-ru-mskaContent-Type: application/xmlContent-Length: 848Connection: close<?xml version="1.0" encoding="UTF-8"?><AccessControlPolicy xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Owner><ID>eab55955-ebdb-4f18-a94d-f3558ff150da</ID><DisplayName>VK Cloud_UserName</DisplayName></Owner><AccessControlList><Grant><Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group"><URI>http://acs.amazonaws.com/groups/global/AllUsers</URI></Grantee><Permission>READ</Permission></Grant><Grant><Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CanonicalUser"><ID>eab55955-ebdb-4f18-a94d-f3558ff150da</ID><DisplayName>VK Cloud_Username</DisplayName></Grantee><Permission>FULL_CONTROL</Permission></Grant></AccessControlList></AccessControlPolicy>
Установка ACL для бакета. Для установки ACL необходимо иметь у бакета право WRITE_ACP.
Запрос с передачей конфигурации ACL в теле запроса:
PUT /?acl HTTP/1.1Content-Type: application/xmlContent-Length: 675Host: my-test-bucket1.hb.ru-msk.vkcloud-storage.rux-amz-content-sha256: 724483e3830b19d6960345c484fb7904b26e8f2fb34a6c002fa779353b68c8d8x-amz-date: 20200831T183709ZAuthorization: AWS4-HMAC-SHA256 Credential=II5JDQBAN3JYM4DNEB6C/20200831/ru-msk/s3/aws4_request,SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date,Signature=1cf3f7771a4086375e5b6597026db6d55d84fbc86e3c3a86ec420ea9123e3163<AccessControlPolicy xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Owner><ID>eab55955-ebdb-4f18-a94d-f3558ff150da</ID></Owner><AccessControlList><Grant><Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CanonicalUser"><ID>eab55955-ebdb-4f18-a94d-f3558ff150da</ID></Grantee><Permission>FULL_CONTROL</Permission></Grant><Grant><Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group"><URI>http://acs.amazonaws.com/groups/global/AllUsers</URI></Grantee><Permission>READ</Permission></Grant></AccessControlList></AccessControlPolicy>
Пример ответа:
HTTP/1.1 200 OKDate: Mon, 31 Aug 2020 18:37:10 GMTx-amz-request-id: tx00000000000000278ac49-005963c956-1268c-ru-mskaContent-Type: application/xmlContent-Length: 0Connection: close
Получение ACL для объекта. Для получения необходимо иметь у объекта право READ_ACP.
Пример запроса:
GET /sammy.png?acl HTTP/1.1Host: my-test-bucket1.hb.ru-msk.vkcloud-storage.rux-amz-content-sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855x-amz-date: 20200831T191224ZAuthorization: AWS4-HMAC-SHA256 Credential=II5JDQBAN3JYM4DNEB6C/20200831/ru-msk/s3/aws4_request,SignedHeaders=host;x-amz-content-sha256;x-amz-date,Signature=950e133849cd19d626291fd2937d927957cf3e97a36707d30d51a9b61ac08a8e
Пример ответа:
HTTP/1.1 200 OKDate: Mon, 31 Aug 2020 19:12:24 GMTx-amz-request-id: tx0000000000000027a42dc-005963d198-1268c-ru-mskaContent-Type: application/xmlContent-Length: 848Connection: close<?xml version="1.0" encoding="UTF-8"?><AccessControlPolicy xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Owner><ID>eab55955-ebdb-4f18-a94d-f3558ff150da</ID><DisplayName>VK Cloud_UserName</DisplayName></Owner><AccessControlList><Grant><Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group"><URI>http://acs.amazonaws.com/groups/global/AllUsers</URI></Grantee><Permission>READ</Permission></Grant><Grant><Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CanonicalUser"><ID>eab55955-ebdb-4f18-a94d-f3558ff150da</ID><DisplayName>VK Cloud_UserName</DisplayName></Grantee><Permission>FULL_CONTROL</Permission></Grant></AccessControlList></AccessControlPolicy>
Установка ACL для объекта. Для установки ACL необходимо иметь у объекта право WRITE_ACP.
Запрос с передачей конфигурации ACL в теле запроса:
PUT /sammy.png?acl HTTP/1.1Сontent-Type: application/xmlContent-Length: 443Host: my-test-bucket1.hb.ru-msk.vkcloud-storage.rux-amz-content-sha256:c0bd9ba784be78d4f38bbc1e3b0da2de2e7a8f4ee259b3b840369cf00a78dad2x-amz-date:20200831T192142ZAuthorization: AWS4-HMAC-SHA256 Credential=II5JDQBAN3JYM4DNEB6C/20200831/ru-msk/s3/aws4_request,SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date,Signature=dfeeb2386f76b29097adadb35ac15f7d5f244f18cc95f082b0ac6d14ced48b10<AccessControlPolicy xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Owner><ID>eab55955-ebdb-4f18-a94d-f3558ff150da</ID></Owner><AccessControlList><Grant><Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CanonicalUser"><ID>eab55955-ebdb-4f18-a94d-f3558ff150da</ID></Grantee><Permission>FULL_CONTROL</Permission></Grant></AccessControlList></AccessControlPolicy>
Пример ответа:
HTTP/1.1 200 OKDate: Mon, 31 Aug 2020 19:21:42 GMTx-amz-request-id: tx0000000000000027aafc9-005963d3c6-1268c-ru-mskaContent-Type: application/xmlContent-Length: 0Connection: close
При установке новой конфигурации ACL, предыдущая конфигурация удаляется. Чтобы этого избежать, рекомендуется устанавливать права доступа всем нужным категориям получателей одновременно.
Пример XML-структуры для одновременной установки разрешений в одном запросе:
<?xml version="1.0" encoding="UTF-8"?><AccessControlPolicy xmlns="http://bucket_name.hb.ru-msk.vkcloud-storage.ru/images/01.jpg/"><Owner><ID>Owner-canonical-user-ID</ID><DisplayName>owner-display-name</DisplayName></Owner><AccessControlList><Grant><Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CanonicalUser"><ID>Owner-canonical-user-ID</ID><DisplayName>owner-display-name</DisplayName></Grantee><Permission>FULL_CONTROL</Permission></Grant><Grant><Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CanonicalUser"><ID>user1-canonical-user-ID</ID><DisplayName>user1-display-name</DisplayName></Grantee><Permission>WRITE</Permission></Grant><Grant><Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group"><URI>http://acs.amazonaws.com/groups/global/AllUsers</URI></Grantee><Permission>READ</Permission></Grant><Grant><Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group"><EmailAddress>project-ID</EmailAddress></Grantee><Permission>READ</Permission></Grant></AccessControlList></AccessControlPolicy>