Списки управления доступом (ACL)

Объектное хранилище S3 позволяет управлять доступом к бакетам и объектам с помощью списков контроля доступа ACL (Access control list). ACL определяет, каким учетным записям или группам хранилища предоставляется доступ к ресурсам, а также тип этого доступа. При получении запроса к ресурсу объектное хранилище S3 проверяет соответствующий ACL, чтобы убедиться, что запрашивающая сторона имеет необходимые разрешения.

Для каждого нового объекта или бакета в хранилище создается пустой ACL. По умолчанию создаваемый бакет и объект максимально ограничены в доступе — только владелец бакета / объекта может иметь доступ к нему и работать с ним. ACL позволяет изменить это поведение.

Управлять ACL может только пользователь с соответствующими правами (например, владелец бакета). Загрузить ACL и получить список существующих ACL можно только через S3 API.

Виды разрешений ACL

В таблице ниже перечислены все доступные ACL с указанием уровней доступа к объекту или бакету.

Разрешение

Как влияет на бакет

Как влияет на объект

READ

Разрешение на чтение всех объектов в бакете

Разрешение на чтение объектов и его метаданных

WRITE

Разрешение создавать новые объекты в бакете Владельцу бакета и объекта разрешает удаление или перезапись этих объектов.

Не применимо

READ_ACP

Разрешение на чтение ACL бакета

Разрешение на чтение ACL объекта

WRITE_ACP

Разрешение на запись ACL для бакета

Разрешение на запись ACL для объекта

FULL_CONTROL

Разрешения READ, WRITE, READ_ACP и WRITE_ACP для бакета

Разрешения READ, READ_ACP и WRITE_ACP для объекта

Примечание

Если в ACL указать доступ WRITE, но при этом не указать READ, то хранилище ответит с кодом 501 Not Implemented.

Пример ACL

В этом примере ACL для бакета определяет владельца ресурса и набор разрешений:

<?xml version="1.0" encoding="UTF-8"?>
<AccessControlPolicy xmlns="https://s3pd01.sbercloud.ru/<название бакета>">
  <Owner>
    <ID>access-key-name</ID>
    <DisplayName></DisplayName>
  </Owner>
  <AccessControlList>
    <Grant>
      <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:type="Canonical User">
        <ID>access-key-name</ID>
        <DisplayName></DisplayName>
      </Grantee>
      <Permission>FULL_CONTROL</Permission>
    </Grant>
  </AccessControlList>
</AccessControlPolicy>

Элемент

Описание

AccessControlPolicy

Корневой элемент

Owner

Владелец бакета

ID

Учетная запись владельца бакета (Access Key)

AccessControlList

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

Grant

Определяет идентификатор пользователя для предоставления разрешения

Grantee

Пользователь или группа для которой выдается доступ

Permission

Тип доступа для пользователя

Базовый ACL, показанный выше, имеет один элемент <Grant>. Чтобы описать несколько получателей, для каждого надо добавить свой элемент <Grant>. ACL может содержать не более 100 разрешений.

Стандартные списки ACL

Хранилище S3 поддерживает набор предопределенных разрешений, известных как стандартные списки ACL. Каждый такой ACL имеет предопределенный набор получателей и разрешений.

Предопределенные ACL могут применяться как к объектам, так и к бакетам. В следующей таблице перечислены стандартные списки ACL и связанные с ними предопределенные разрешения.

ACL

Описание

private

Владелец получает FULL_CONTROL. Больше ни у кого нет прав доступа (по умолчанию).

full-control

И владелец объекта, и владелец бакета получают FULL_CONTROL над объектом.

public-read

Системная группа AllUsers получает разрешение READ

public-read-write

Системная группа AllUsers получает разрешения READ и WRITE

authenticated-read

Системная группа AuthenticatedUsers получает разрешение READ

Загрузить предопределенный ACL можно только через S3 API. При загрузке ACL используется HTTP-заголовок X-Amz-Acl.

В запросе можно указать только один из этих готовых списков ACL, например:

**PUT /?acl HTTP/1.1**
Authorization: authorization string
Connection: close
Date: Mon, 21 Nov 2022 09:00:17 GMT
Host: https://s3pd01/mynamespace/mybucket/
X-amz-content-sha256: UNSIGNED-PAYLOAD
X-amz-acl: public-read
Масштабная конференция
GoCloud 2024:
облачные грани будущего