ACL#

Списки контроля доступа (Access Control List, ACL) определяют, какие операции могут выполнять пользователи. ACL могут применяться как к бакетам, так и к объектам, и в зависимости от этого одни и те же разрешения могут иметь разные значения.

Виды прав доступа#

Каждый тип доступа/разрешения (grant) имеет разное значение, когда он применяется для работы с бакетом или объектом.

Разрешение

Бакет

Объект

READ

Пользователь может получить список всех объектов в бакете

Пользователь имеет право на чтение объекта

WRITE

Пользователь может записывать и удалять объекты в бакете

N/A

READ_ACP

Пользователь имеет право на чтение ACL бакета

Пользователь имеет право на чтение ACL объекта

WRITE_ACP

Пользователь имеет право на изменение ACL бакета

Пользователь имеет право на изменение ACL объекта

FULL_CONTROL

Пользователь имеет все вышеперечисленные права на бакет

Пользователь имеет все вышеперечисленные права на объект

Задание ACL#

ACL можно настроить с помощью запросов PUT двумя способами:

  • посредством описания политики доступа в теле запроса;

  • с помощью задания прав доступа в заголовках запроса.

Для назначения прав доступа могут использоваться следующие заголовки:

  • x-amz-acl для задания предопределённых ACL.

  • x-amz-grant-read, x-amz-grant-write, x-amz-grant-read-acp, x-amz-grant-write-acp и x-amz-grant-full-control для задания прав доступа в явном виде.

Примечание

Вы можете либо использовать предопределённые ACL, либо задать ACL в явном виде, но оба типа заголовков нельзя использовать одновременно.

Предопределённые ACL#

К2 Облако поддерживает готовые политики доступа (Canned ACL) для предопределённых категорий пользователей.

Название ACL

Применимость

Добавляемые права

private

Бакет/объект

Владелец получает FULL_CONTROL. Никто другой не имеет прав доступа.

public-read

Бакет/объект

Владелец получает FULL_CONTROL. Анонимные пользователи получают права READ.

public-read-write

Бакет/объект

Владелец получает FULL_CONTROL. Анонимные пользователи получают права READ и WRITE.

authenticated-read

Бакет/объект

Владелец получает FULL_CONTROL. Авторизованные пользователи получают права READ.

PutBucketAcl#

Устанавливает ACL для бакета. Для настройки ACL необходимо иметь права WRITE_ACP. Если ACL был задан ранее, то он заменяется на новый.

Пример запроса (с использованием заголовков)#

Предоставляет полный контроль над бакетом bucket1 владельцу бакета user1, права на чтение анонимным пользователям, права на запись аутентифицированным пользователям и права на чтение ACL пользователям с указанными адресом электронной почты и ID.

Примечание

Не забудьте предоставить полные права (FULL_CONTROL) владельцу бакету, иначе он потеряет права на чтение и запись в бакет. В отличие от предопределённых ACL при явном указании прав доступа они не назначаются автоматически.

Запрос
PUT /bucket1/?acl=null HTTP/1.1
Host: s3.k2.cloud
x-amz-grant-full-control: emailAddress="user1@company"
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-grant-read-acp: emailAddress="user2@company", id="89d5ca16-be63-4139-afe0-795c0a45eb1c"
X-Amz-Content-Sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
X-Amz-Date: 20220531T102625Z
Authorization: AWS4-HMAC-SHA256 Credential=project:user1@company/20220531/{region}/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date;x-amz-grant-full-control;x-amz-grant-write, Signature=66b32114ac08a5d6d77907e5ab8a9c1f0022cff6692f1f3475168bf8d0559be3

Пример ответа#

Ответ
HTTP/1.1 200 OK
x-amz-request-id: tx000000000000003b72815-006295ed50-41e5801e-default
content-type: application-xml
content-length: 0
date: Tue, 31 May 2022 10:26:24 GMT

Пример запроса (с использованием тела запроса)#

Предоставляет полный контроль над бакетом bucket1 владельцу бакета user1 и права на чтение и запись для аутентифицированных пользователей.

Запрос
PUT /bucket1/?acl=null HTTP/1.1
Host: s3.k2.cloud
X-Amz-Content-Sha256: beaead3198f7da1e70d03ab969765e0821b24fc913697e929e726aeaebf0eba3
X-Amz-Date: 20220531T103904Z
Authorization: AWS4-HMAC-SHA256 Credential=project:user1@company/20220531/{region}/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=bc145fe2bd555a44119afcd01f538da372c3e9ee7159ecdb78f89d63092c1d4c
Content-Type: text/plain
Content-Length: 1249

<AccessControlPolicy xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <Owner>
        <ID>b5e1b8d4-4886-4d03-a1b4-e03682a4ed8e</ID>
        <DisplayName>user1@company</DisplayName>
    </Owner>
    <AccessControlList>
        <Grant>
            <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group">
                <URI>http://acs.amazonaws.com/groups/global/AuthenticatedUsers</URI>
            </Grantee>
            <Permission>READ</Permission>
        </Grant>
        <Grant>
            <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group">
                <URI>http://acs.amazonaws.com/groups/global/AuthenticatedUsers</URI>
            </Grantee>
            <Permission>WRITE</Permission>
        </Grant>
        <Grant>
            <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CanonicalUser">
                <ID>b5e1b8d4-4886-4d03-a1b4-e03682a4ed8e</ID>
                <DisplayName>user1@company</DisplayName>
            </Grantee>
            <Permission>FULL_CONTROL</Permission>
        </Grant>
    </AccessControlList>
</AccessControlPolicy>

Пример ответа#

Ответ
HTTP/1.1 200 OK
x-amz-request-id: tx000000000000003b96b32-006295f047-415d7a1d-default
content-type: application-xml
content-length: 0
date: Tue, 31 May 2022 10:39:03 GMT

PutObjectAcl#

Устанавливает ACL для существующего объекта. Для настройки ACL необходимо иметь права WRITE_ACP. Если ACL был задан ранее, то он заменяется на новый.

Пример запроса#

Предоставляет полный контроль над объектом picture.png в бакете bucket1 владельцу бакета user1 и права чтения и записи аутентифицированным пользователям.

Запрос
PUT /bucket1/picture.png?acl=null HTTP/1.1
Host: s3.k2.cloud
X-Amz-Content-Sha256: beaead3198f7da1e70d03ab969765e0821b24fc913697e929e726aeaebf0eba3
X-Amz-Date: 20220531T125146Z
Authorization: AWS4-HMAC-SHA256 Credential=project:user1@company/20220531/{region}/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=71b45463e753131c736a1f70c5469d4a1bbd98456d440848f05b203f26210aad
Content-Type: text/plain
Content-Length: 1249

<AccessControlPolicy xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <Owner>
         <DisplayName>user1@company</DisplayName>
    </Owner>
    <AccessControlList>
        <Grant>
            <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group">
                <URI>http://acs.amazonaws.com/groups/global/AuthenticatedUsers</URI>
            </Grantee>
            <Permission>READ</Permission>
        </Grant>
        <Grant>
            <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group">
                <URI>http://acs.amazonaws.com/groups/global/AuthenticatedUsers</URI>
            </Grantee>
            <Permission>WRITE</Permission>
        </Grant>
        <Grant>
            <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CanonicalUser">
                <ID>b5e1b8d4-4886-4d03-a1b4-e03682a4ed8e</ID>
                <DisplayName>user1@company</DisplayName>
            </Grantee>
            <Permission>FULL_CONTROL</Permission>
        </Grant>
    </AccessControlList>
</AccessControlPolicy>

Пример ответа#

Ответ
HTTP/1.1 200 OK
x-amz-request-id: tx000000000000003c8ffb2-0062960f61-41e6f988-default
content-type: application-xml
content-length: 0
date: Tue, 31 May 2022 12:51:45 GMT

GetBucketAcl#

Возвращает политику контроля доступа для бакета. Для выполнения запроса необходимы права READ_ACP.

Пример запроса#

Запрос
GET /bucket1?acl=null HTTP/1.1
Host: s3.k2.cloud
X-Amz-Content-Sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
X-Amz-Date: 20220531T132612Z
Authorization: AWS4-HMAC-SHA256 Credential=project:user1@company/20220531/{region}/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=b87b4f3d2900a9e199780d1fc9840ca87e63e9995d250855ded4307ec398e9ad

Пример ответа#

Ответ
HTTP/1.1 200 OK
x-amz-request-id: tx000000000000006fafe36-0062961774-37d64f12-default
content-type: application-xml
content-length: 1394
date: Tue, 31 May 2022 13:26:12 GMT

<?xml version="1.0" encoding="UTF-8"?>
<AccessControlPolicy xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <Owner>
        <ID>b5e1b8d4-4886-4d03-a1b4-e03682a4ed8e</ID>
        <DisplayName>user1@company</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>b5e1b8d4-4886-4d03-a1b4-e03682a4ed8e</ID>
                <DisplayName>user1@company</DisplayName>
            </Grantee>
            <Permission>FULL_CONTROL</Permission>
        </Grant>
    </AccessControlList>
</AccessControlPolicy>

GetObjectAcl#

Возвращает политику контроля доступа для бакета. Для выполнения запроса необходимы права READ_ACP.

Пример запроса#

Запрос
GET /bucket1/picture.png?acl=null HTTP/1.1
Host: s3.k2.cloud
X-Amz-Content-Sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
X-Amz-Date: 20220531T135448Z
Authorization: AWS4-HMAC-SHA256 Credential=project:user1@company/20220531/{region}/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=735bed2d244ab7a4a714dc111a442cbb3af63cc7ef0f22d93b1c8ae7df7bc783

Пример ответа#

Ответ
HTTP/1.1 200 OK
x-amz-request-id: tx00000000000000702e51a-0062961f74-40173986-default
content-type: application-xml
content-length: 721
date: Tue, 31 May 2022 14:00:20 GMT

<?xml version="1.0" encoding="UTF-8"?>
<AccessControlPolicy xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <Owner>
        <ID>b5e1b8d4-4886-4d03-a1b4-e03682a4ed8e</ID>
        <DisplayName>user1@company</DisplayName>
    </Owner>
    <AccessControlList>
        <Grant>
            <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group">
                <URI>http://acs.amazonaws.com/groups/global/AuthenticatedUsers</URI>
            </Grantee>
            <Permission>READ</Permission>
        </Grant>
    </AccessControlList>
</AccessControlPolicy>