VK Cloud logo

ACL

ACL (Access Control List, список управления доступом) позволяет контролировать, каким пользователям какие разрешены операции в сервисе VK Object Storage. Каждый бакет и объект имеет свой ACL, в котором перечислены получатели прав доступа и предоставленные им разрешения.

Доступны следующие методы API для операций с ACL бакетов и объектов:

Устанавливать ACL можно как при создании бакета или загрузке объекта, так и после. Задать конфигурацию ACL в методах PutBucketACL и PutObjectACL можно двумя способами:

  • В теле запроса — в виде XML-структуры конфигурации ACL. Способ используется только для существующих бакетов или объектов.
  • В заголовках запроса. Способ используется как при создании бакета или загрузке объекта, так и для существующих бакетов или объектов.

В одном запросе можно использовать только один из этих способов.

XML-структура конфигурации ACL

Конфигурация ACL в формате XML содержит следующие элементы:

  • <Owner> — содержит идентификатор (ID) и имя (DisplayName) того проекта, в котором находится бакет или объект. Чтобы получить ID и DisplayName, запросите информацию об ACL бакета.

  • <Grant> — определяет, какому получателю какие предоставляются разрешения. <Grant> содержит элементы <Grantee> и <Permission>.

    • <Grantee> — указывает получателя прав доступа с помощью атрибутов:

    • <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 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

Предоставлено для бакета

Предоставлено для объекта

READ

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

HeadBucket, ListMultiparts, ListObjects, ListParts

Чтение содержимого объекта и его метаданных

GetObject, HeadObject

WRITE

Создание, перезапись и удаление любого объекта в бакете

AbortMultipartUpload, CompleteMultipartUpload, InitiateMultipartUpload, UploadPart, PutObject, DeleteObject

Неприменимо

READ_ACP

Чтение ACL бакета

GetBucketAcl

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

GetObjectAcl

WRITE_ACP

Установка ACL для бакета

PutBucketAcl

Установка ACL для объекта

PutObjectAcl

FULL_CONTROL

Все права в рамках разрешений для бакета: READ, WRITE, READ_ACP и WRITE_ACP

Все права в рамках разрешений для объекта: READ, READ_ACP и WRITE_ACP

GetBucketACL

Получение 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>

PutBucketACL

Установка 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

GetObjectACL

Получение 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>

PutObjectACL

Установка 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

При установке новой конфигурации 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>
Была ли статья полезна?