Список управления доступом (ACL)
В Object Storage реализовано несколько механизмов для управления доступом к ресурсам. Алгоритм взаимодействия этих механизмов см. в Обзор способов управления доступом в Object Storage.
ACL Object Storage — список разрешений для каждого объекта и бакета, хранящийся непосредственно в Object Storage.
Разрешения, выданные на бакет, распространяются на все находящиеся в нем объекты. Также ACL позволяет расширить доступы к отдельному объекту.
Важно
Бакет наследует такие же права доступа в сервисе IAM, как у каталога и облака, в котором он находится.
Например, если у пользователя в сервисе IAM есть роль
viewer
на каталог с бакетом, то он может просматривать его содержимое, даже если это не отражено в ACL бакета.
По умолчанию для каждого нового объекта или бакета Object Storage создает пустой ACL. Пользователь, обладающий соответствующими правами, может отредактировать или загрузить ACL для бакетов и объектов Object Storage.
С помощью ACL можно выдать разрешения пользователю 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
-
Для получения идентификатора перейдите в раздел Сервисные аккаунты консоли управления.
-
Для выдачи разрешений используйте URI системной группы.
-
Для получения идентификатора перейдите на вкладку Группы
в интерфейсе Cloud Organization.Указать группу пользователей можно с помощью Yandex Cloud CLI, AWS CLI, Terraform и API.
Операции с 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, как у каталога и облака, в котором он находится. Если у пользователя есть права доступа на каталог или облако, которым принадлежит бакет, то у него будут права и на сам бакет.
Важно
Назначение ролей системным группам allUsers
и allAuthenticatedUsers
на каталог или облако, которым принадлежит бакет, эквивалентно выдаче публичного доступа к бакету:
allAuthenticatedUsers
— доступ к бакету получат все аутентифицированные пользователи Yandex Cloud: как из вашего облака, так и из облаков других пользователей.allUsers
— доступ получат все пользователи.
Аналогичный доступ к бакету можно выдать, добавив в 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
. Это значит, что пользователи этих групп имеют права на данный каталог и все содержащиеся в нем ресурсы, в том числе бакеты. -
Чтобы отозвать роль у системной группы
allAuthenticatedUsers
выполните команду:yc resource-manager folder remove-access-binding \ --id b1g7gvsi89m3******** \ --role viewer \ --allAuthenticatedUsers
-
Чтобы отозвать роль у системной группы
allUsers
выполните команду:yc resource-manager folder remove-access-binding \ --id b1g7gvsi89m3******** \ --role viewer \ --allUsers