[Документация Yandex Cloud](../../index.md) > [Yandex Object Storage](../index.md) > [Концепции](index.md) > Список управления доступом (ACL)

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

В Object Storage реализовано несколько механизмов для управления доступом к ресурсам. Алгоритм взаимодействия этих механизмов приведен в [Обзор способов управления доступом в Object Storage](../security/overview.md).

ACL Object Storage — список разрешений для каждого объекта и бакета, хранящийся непосредственно в Object Storage.

Разрешения, выданные на бакет, распространяются на все находящиеся в нем объекты. Также ACL позволяет расширить доступы к отдельному объекту.

{% note warning %}

Бакет [наследует](#inheritance) такие же права доступа в сервисе IAM, как у каталога и облака, в котором он находится.

{% endnote %}

> Например, если у пользователя в сервисе IAM есть роль `viewer` на каталог с бакетом, то он может просматривать его содержимое, даже если это не отражено в ACL бакета.

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

С помощью ACL можно выдать разрешения пользователю Yandex Cloud, [сервисному аккаунту](../../iam/concepts/users/service-accounts.md), [группе пользователей](../../organization/concepts/groups.md) или [публичной группе](#public-groups) (группе всех пользователей интернета, группе всех аутентифицированных пользователей Yandex Cloud), при этом необходимо знать [идентификатор получателя разрешений](#accounts-ids). При выдаче разрешений вы можете использовать [предопределенные ACL](#predefined-acls), которые содержат популярные наборы доступов.


В консоли управления разрешения можно выдать только тем сервисным аккаунтам, которые созданы в том же каталоге, что и сам бакет. Выдать разрешения для сервисных аккаунтов, относящихся к другим каталогам, можно с помощью Yandex Cloud CLI (только для ACL бакета), AWS CLI, Terraform или API.

Описание структуры ACL смотрите в разделе [XML-схема ACL](../s3/api-ref/acl/xml-config.md). В одном ACL вы можете задать не более 100 правил.

{% note info %}

ACL, загруженный для объектов, применяется мгновенно. ACL, загруженный для бакетов, и доступы, измененные в IAM, применяются с задержкой. Подробнее про задержки читайте в [документации IAM](../../iam/concepts/access-control/index.md).

{% endnote %}

## Идентификатор получателя разрешений {#accounts-ids}

* Пользователь Yandex Cloud

  Идентификатор можно получить:
  * В разделе [IAM](https://kz.console.yandex.cloud/iam) консоли управления.
  * С помощью [CLI или API IAM](../../organization/operations/users-get.md).
* [Сервисный аккаунт](../../iam/concepts/users/service-accounts.md)

  Для получения идентификатора в консоли управления в списке сервисов выберите **Identity and Access Management**, на панели слева выберите ![FaceRobot](../../_assets/console-icons/face-robot.svg) **Сервисные аккаунты** и выберите нужный сервисный аккаунт.

* [Публичная группа](#public-groups)

  Для выдачи разрешений используйте URI публичной группы.

* [Группа пользователей](../../organization/concepts/groups.md)

  Для получения идентификатора перейдите на вкладку [**Группы**](https://kz.center.yandex.cloud/organization/groups) в интерфейсе Cloud Center.

## Операции с ACL {#acl-operations}

* В консоли управления вы можете редактировать ACL для [бакетов](../operations/buckets/edit-acl.md) и [объектов](../operations/objects/edit-acl.md).
* С помощью [API](../../glossary/rest-api.md), совместимого с Amazon S3, вы можете [загрузить или скачать](../s3/api-ref/acl.md) ACL для бакета или объекта.

  Удалить ACL невозможно. Чтобы удалить все разрешения, загрузите пустой ACL.

## Виды разрешений {#permissions-types}

Разрешения соответствуют ролям пользователей в IAM.

Название разрешения | Роль в IAM | Описание
--- |--- |---
`READ` | `viewer` | Для бакета: разрешение на получение списка объектов в бакете, чтение различных настроек бакета (жизненный цикл, CORS, статический хостинг), чтение всех объектов в бакете.<br>Для объекта: разрешение на чтение.
`WRITE` | `editor` | Для бакета: запись, перезапись и удаление объектов в бакете.<br>Используется обязательно вместе с `READ`, отдельно указать разрешение `WRITE` нельзя.<br>Для объекта: разрешение не имеет смысла, при записи объекта проверяются разрешения для бакета.
`FULL_CONTROL` | `admin` | Полный доступ к объектам и бакетам.
`READ_ACP` | `viewer` | Разрешение на чтение ACL. Только для объектов.
`WRITE_ACP` | `editor` | Разрешение на запись ACL. Только для объектов.

{% note info %}

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

{% endnote %}

## Предопределенные ACL {#predefined-acls}

ACL | Описание
--- |---
`private`<br>`bucket-owner-full-control` | Пользователи Yandex Cloud получают разрешения в соответствии со своими ролями в IAM.
`public-read` | Публичная группа `AllUsers` получает разрешение `READ`.
`public-read-write` | Публичная группа `AllUsers` получает разрешения `READ` и `WRITE`.
`authenticated-read` | Публичная группа `AuthenticatedUsers` получает разрешение `READ`.

Предопределенные ACL могут применяться как к объектам, так и к бакетам. ACL `public-read-write`, примененный к объекту, эквивалентен `public-read`.

Загрузить предопределенный ACL можно только с помощью [HTTP API, совместимого с Amazon S3](../s3/api-ref/acl.md). При загрузке ACL используйте HTTP-заголовок `X-Amz-Acl`.

## Публичные группы {#public-groups}

### AllUsers {#all-users}

Включает в себя всех пользователей интернета.

Разрешение для `AllUsers` выглядит следующим образом:

```xml
<Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group">
    <URI>http://acs.amazonaws.com/groups/global/AllUsers</URI>
</Grantee>
```

### AuthenticatedUsers {#authenticated-users}

Включает в себя всех аутентифицированных пользователей Yandex Cloud: как из вашего облака, так и из облаков других пользователей.

Разрешение для `AuthenticatedUsers` выглядит следующим образом:

```xml
<Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group">
    <URI>http://acs.amazonaws.com/groups/global/AuthenticatedUsers</URI>
</Grantee>
```

## Наследование прав доступа к бакету публичными группами Yandex Cloud {#inheritance}

Бакет наследует такие же права доступа в сервисе IAM, как у каталога и облака, в котором он находится. Если у пользователя есть права доступа к каталогу или облаку, которым принадлежит бакет, то у него будут права доступа и к самому бакету.

{% note warning %}

Назначение ролей [публичным группам](../../iam/concepts/access-control/public-group.md) `All users` и `All authenticated users` на каталог или облако, которым принадлежит бакет, эквивалентно выдаче **публичного доступа** к бакету:
* `All authenticated users` — доступ к бакету получат все аутентифицированные пользователи Yandex Cloud: как из вашего облака, так и из облаков других пользователей.
* `All users` — доступ получат все пользователи.

Аналогичный доступ к бакету можно выдать, добавив в ACL бакета права для групп `AuthenticatedUsers` и `AllUsers`.

{% endnote %}

### Как посмотреть права на бакет, наследуемые от каталога {#examples}

Бакет наследует права от каталога. Если вы хотите знать, какие именно права унаследовал бакет, получите список ролей на каталог. Также вы можете в любой момент отозвать эти роли.

* Чтобы получить список ролей на каталог, выполните команду:

  ```bash
  yc resource-manager folder list-access-bindings \
    --id b1g7gvsi89m3********
  ```

  Результат:

  ```text
  +---------+--------------+-----------------------+
  | ROLE ID | SUBJECT TYPE |      SUBJECT ID       |
  +---------+--------------+-----------------------+
  | viewer  | system       | allAuthenticatedUsers |
  | viewer  | system       | allUsers              |
  +---------+--------------+-----------------------+
  ```

  В выводе присутствует `allAuthenticatedUsers` и `allUsers`. Это значит, что пользователи этих групп имеют права на данный каталог и все содержащиеся в нем ресурсы, в том числе бакеты.

* Чтобы отозвать роль у публичной группы `All authenticated users` выполните команду:

  ```bash
  yc resource-manager folder remove-access-binding \
    --id b1g7gvsi89m3******** \
    --role viewer \
    --allAuthenticatedUsers
  ```

* Чтобы отозвать роль у публичной группы `All users` выполните команду:

  ```bash
  yc resource-manager folder remove-access-binding \
    --id b1g7gvsi89m3******** \
    --role viewer \
    --subject system:allUsers
  ```

### Полезные ссылки {#see-also}

* [Редактирование ACL бакета](../operations/buckets/edit-acl.md)
* [Редактирование ACL объекта](../operations/objects/edit-acl.md)