Список управления доступом (ACL)
В Object Storage реализовано несколько механизмов для управления доступом к ресурсам. Алгоритм взаимодействия этих механизмов см. в Обзор способов управления доступом в Object Storage.
ACL Object Storage — список разрешений для каждого объекта и бакета, хранящийся непосредственно в Object Storage.
Разрешения, выданные на бакет, распространяются на все находящиеся в нем объекты. Также ACL позволяет расширить доступы к отдельному объекту.
Важно
Бакет наследует такие же права доступа в сервисе IAM, как у каталога и облака, в котором он находится.
Например, если у пользователя в сервисе IAM есть роль
viewer
на каталог с бакетом, то он может просматривать его содержимое, даже если это не отражено в ACL бакета.
По умолчанию для каждого нового объекта или бакета Object Storage создает пустой ACL. Пользователь, обладающий соответствующими правами, может отредактировать или загрузить ACL для бакетов и объектов Object Storage.
С помощью ACL можно выдать разрешения пользователю Yandex Cloud, сервисному аккаунту, группе пользователей или публичной группе (группе всех пользователей интернета, группе всех аутентифицированных пользователей Yandex Cloud), при этом необходимо знать идентификатор получателя разрешений. При выдаче разрешений вы можете использовать предопределенные ACL, которые содержат популярные наборы доступов.
В консоли управления разрешения можно выдать только тем сервисным аккаунтам, которые созданы в том же каталоге, что и сам бакет. Выдать разрешения для сервисных аккаунтов, относящихся к другим каталогам, можно с помощью YC CLI (только для ACL бакета), AWS CLI, Terraform или API.
Описание структуры ACL смотрите в разделе XML-схема ACL. В одном ACL вы можете задать не более 100 правил.
Примечание
ACL, загруженный для объектов, применяется мгновенно. ACL, загруженный для бакетов, и доступы, измененные в IAM, применяются с задержкой. Подробнее про задержки читайте в документации IAM.
Идентификатор получателя разрешений
-
Пользователь Yandex Cloud
Идентификатор можно получить:
- В разделе IAM
консоли управления. - С помощью CLI или API IAM.
- В разделе IAM
-
Для получения идентификатора в консоли управления в списке сервисов выберите Identity and Access Management, на панели слева выберите
Сервисные аккаунты и выберите нужный сервисный аккаунт. -
Для выдачи разрешений используйте URI публичной группы.
-
Для получения идентификатора перейдите на вкладку Группы
в интерфейсе Cloud Center.Задать группу пользователей можно с помощью Yandex Cloud CLI, AWS CLI, Terraform и API. Подробнее см. на страницах Редактирование ACL бакета и Редактирование ACL объекта.
Операции с ACL
-
В консоли управления вы можете редактировать ACL для бакетов и объектов.
-
С помощью API, совместимого с Amazon S3, вы можете загрузить или скачать ACL для бакета или объекта.
Удалить ACL невозможно. Чтобы удалить все разрешения, загрузите пустой ACL.
Виды разрешений
Разрешения соответствуют ролям пользователей в IAM.
Название разрешения | Роль в IAM | Описание |
---|---|---|
READ |
viewer |
Для бакета: разрешение на получение списка объектов в бакете, чтение различных настроек бакета (жизненный цикл, CORS, статический хостинг), чтение всех объектов в бакете. Для объекта: разрешение на чтение. |
WRITE |
editor |
Для бакета: запись, перезапись и удаление объектов в бакете. Используется обязательно вместе с READ , отдельно указать разрешение WRITE нельзя.Для объекта: разрешение не имеет смысла, при записи объекта проверяются разрешения для бакета. |
FULL_CONTROL |
admin |
Полный доступ к объектам и бакетам. |
READ_ACP |
viewer |
Разрешение на чтение ACL. Только для объектов. |
WRITE_ACP |
editor |
Разрешение на запись ACL. Только для объектов. |
Примечание
Если при оформлении ACL указать доступ WRITE
, но при этом не указать READ
, то Object Storage ответит с кодом 501 Not Implemented
.
Предопределенные ACL
ACL | Описание |
---|---|
private 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. При загрузке ACL используйте HTTP-заголовок X-Amz-Acl
.
Публичные группы
AllUsers
Включает в себя всех пользователей интернета.
Разрешение для AllUsers
выглядит следующим образом:
<Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group">
<URI>http://acs.amazonaws.com/groups/global/AllUsers</URI>
</Grantee>
AuthenticatedUsers
Включает в себя всех аутентифицированных пользователей Yandex Cloud: как из вашего облака, так и из облаков других пользователей.
Разрешение для AuthenticatedUsers
выглядит следующим образом:
<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
Бакет наследует такие же права доступа в сервисе IAM, как у каталога и облака, в котором он находится. Если у пользователя есть права доступа к каталогу или облаку, которым принадлежит бакет, то у него будут права доступа и к самому бакету.
Важно
Назначение ролей публичным группам All users
и All authenticated users
на каталог или облако, которым принадлежит бакет, эквивалентно выдаче публичного доступа к бакету:
All authenticated users
— доступ к бакету получат все аутентифицированные пользователи Yandex Cloud: как из вашего облака, так и из облаков других пользователей.All users
— доступ получат все пользователи.
Аналогичный доступ к бакету можно выдать, добавив в ACL бакета права для групп AuthenticatedUsers
и AllUsers
.
Как посмотреть права на бакет, наследуемые от каталога
Бакет наследует права от каталога. Если вы хотите знать, какие именно права унаследовал бакет, получите список ролей на каталог. Также вы можете в любой момент отозвать эти роли.
-
Чтобы получить список ролей на каталог, выполните команду:
yc resource-manager folder list-access-bindings \ --id b1g7gvsi89m3********
Результат:
+---------+--------------+-----------------------+ | ROLE ID | SUBJECT TYPE | SUBJECT ID | +---------+--------------+-----------------------+ | viewer | system | allAuthenticatedUsers | | viewer | system | allUsers | +---------+--------------+-----------------------+
В выводе присутствует
allAuthenticatedUsers
иallUsers
. Это значит, что пользователи этих групп имеют права на данный каталог и все содержащиеся в нем ресурсы, в том числе бакеты. -
Чтобы отозвать роль у публичной группы
All authenticated users
выполните команду:yc resource-manager folder remove-access-binding \ --id b1g7gvsi89m3******** \ --role viewer \ --allAuthenticatedUsers
-
Чтобы отозвать роль у публичной группы
All users
выполните команду:yc resource-manager folder remove-access-binding \ --id b1g7gvsi89m3******** \ --role viewer \ --allUsers