ACL
In this article:
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>