Настройка прав доступа к бакету с помощью Identity and Access Management
В Object Storage реализовано несколько механизмов для управления доступом к ресурсам. Алгоритм взаимодействия этих механизмов приведен в Обзор способов управления доступом в Object Storage.
Чтобы настроить доступ к бакету с помощью Identity and Access Management, назначьте пользователю, группе пользователей или сервисному аккаунту роль на бакет:
- В консоли управления
выберите каталог. - Перейдите в сервис Object Storage.
- Нажмите на имя бакета, к которому вы хотите выдать доступ.
- В меню слева выберите Безопасность.
- Перейдите на вкладку Права доступа.
- Нажмите кнопку Назначить роли.
- Выберите пользователя из списка или воспользуйтесь поиском по пользователям.
- Нажмите кнопку Добавить роль.
- Выберите роль для пользователя.
- Нажмите кнопку Сохранить.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id. Если вы обращаетесь к ресурсу по имени, поиск будет выполнен в каталоге по умолчанию. Если вы обращаетесь к ресурсу по идентификатору, поиск будет выполнен глобально — во всех каталогах с учетом прав доступа.
-
Посмотрите описание команды CLI для изменения настроек бакета:
yc storage bucket update --help -
Назначьте роль на бакет:
yc storage bucket update \ --name <имя_бакета> \ --grants grantee-id=<идентификатор_аккаунта>,grant-type=<тип_субъекта>,permission=<разрешение>Где:
--name— имя бакета.--grants— параметры настройки прав доступа ACL:grantee-id— идентификатор аккаунта, которому выдаются права. Используется при значении параметраgrant-type=grant-type-account.grant-type— тип субъекта, которому выдаются права. Возможные значения:grant-type-account— пользовательский или сервисный аккаунт;grant-type-all-authenticated-users— все аутентифицированные пользователи;grant-type-all-users— все пользователи.
permission— выдаваемое разрешение. Возможные значения:permission-full-control— полный доступ к бакету и объектам в нем;permission-write— запись объектов в бакет;permission-write-acp— изменение ACL бакета;permission-read— чтение объектов в бакете;permission-read-acp— чтение ACL бакета.
При вызове команды yc storage bucket update назначенные роли ACL бакета перезаписываются, а не дополняются. Чтобы сохранить существующие настройки прав доступа, их необходимо перечислить заново в параметре --grants.
Подробнее о команде yc storage bucket update в Справочнике YC CLI.
Пример
Чтобы назначить сервисному аккаунту права для полного доступа к бакету с помощью CLI:
-
Получите список бакетов в каталоге по умолчанию:
yc storage bucket listРезультат:
+------------------+----------------------+----------+-----------------------+---------------------+ | NAME | FOLDER ID | MAX SIZE | DEFAULT STORAGE CLASS | CREATED AT | +------------------+----------------------+----------+-----------------------+---------------------+ | my-bucket | b1gmit33ngp3******** | 10 | STANDARD | 2022-12-16 13:58:18 | +------------------+----------------------+----------+-----------------------+---------------------+ -
Получите список сервисных аккаунтов в каталоге по умолчанию:
yc iam service-account listРезультат:
+----------------------+--------------+--------+---------------------+-----------------------+ | ID | NAME | LABELS | CREATED AT | LAST AUTHENTICATED AT | +----------------------+--------------+--------+---------------------+-----------------------+ | ajeg2b2et02f******** | my-robot | | 2024-09-08 18:59:45 | 2025-02-18 10:10:00 | | ajegtlf2q28a******** | account-name | | 2023-06-27 16:18:18 | 2025-02-18 10:20:00 | +----------------------+--------------+--------+---------------------+-----------------------+ -
Назначьте роль на бакет:
yc storage bucket update \ --name my-bucket \ --grants grantee-id=ajeg2b2et02f********,grant-type=grant-type-account,permission=permission-full-control
Результат:
name: my-bucket
folder_id: b1g0ijbfaqsn********
default_storage_class: STANDARD
versioning: VERSIONING_DISABLED
max_size: "53687091200"
acl:
grants:
- permission: PERMISSION_FULL_CONTROL
grant_type: GRANT_TYPE_ACCOUNT
grantee_id: ajeg2b2et02f********
created_at: "2026-04-30T09:48:38.836171Z"
resource_id: e3ev6mif5rb1********
Terraform
Terraform распространяется под лицензией Business Source License
Подробная информация о ресурсах провайдера в документации на сайте Terraform
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
Чтобы управлять инфраструктурой с помощью Terraform от имени сервисного аккаунта или пользовательских аккаунтов: аккаунта на Яндексе, федеративного аккаунта и локального пользователя, аутентифицируйтесь соответствующим способом.
Чтобы назначить роль на бакет с помощью Terraform:
-
Опишите в конфигурационном файле Terraform параметры ресурсов, которые необходимо создать:
resource "yandex_storage_bucket_iam_binding" "mybucket-viewers" { bucket = "<имя_бакета>" role = "<роль>" members = [ "<тип_субъекта>:<идентификатор_субъекта>", "serviceAccount:<идентификатор_сервисного_аккаунта>", "userAccount:<идентификатор_пользователя>" ] } # Пример назначения роли storage.editor для сервисных аккаунтов resource "yandex_storage_bucket_iam_binding" "sa-editors" { bucket = "<имя_бакета>" role = "storage.editor" members = [ "serviceAccount:<идентификатор_сервисного_аккаунта_1>", "serviceAccount:<идентификатор_сервисного_аккаунта_2>" ] } # Пример назначения роли storage.admin для пользователей resource "yandex_storage_bucket_iam_binding" "users-admins" { bucket = "<имя_бакета>" role = "storage.admin" members = [ "userAccount:<идентификатор_пользователя_1>", "userAccount:<идентификатор_пользователя_2>" ] }Где:
-
bucket— имя бакета. -
role— назначаемая роль.Важно
Ресурс yandex_storage_bucket_iam_binding нельзя использовать для назначения примитивных ролей (
viewer,editorиadmin) на бакет, если одновременно используется ресурс yandex_storage_bucket_grant или параметрыaclиgrantресурса yandex_storage_bucket. -
members— список типов и идентификаторов субъектов, которым назначается роль. Указывается в форматеuserAccount:<идентификатор_пользователя>илиserviceAccount:<идентификатор_сервисного_аккаунта>.
Подробнее о параметрах ресурса
yandex_storage_bucket_iam_bindingчитайте в документации провайдера. -
-
Если вы совместно с ресурсом yandex_storage_bucket_iam_binding планируете использовать ресурс yandex_storage_bucket_grant для одного и того же бакета, рекомендуем выполнять создание ресурсов последовательно. Для этого добавьте в блок
yandex_storage_bucket_iam_bindingзависимость от наличия ресурсаyandex_storage_bucket_grant:resource "yandex_storage_bucket_iam_binding" "mybucket-viewers" { ... depends_on = [ yandex_storage_bucket_grant.my_bucket_grant ] } -
Примените конфигурацию:
-
В терминале перейдите в директорию с конфигурационным файлом.
-
Проверьте корректность конфигурации с помощью команды:
terraform validateЕсли конфигурация является корректной, появится сообщение:
Success! The configuration is valid. -
Выполните команду:
terraform planВ терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply -
Подтвердите изменения: введите в терминале слово
yesи нажмите Enter.
Проверить изменения ресурсов можно в консоли управления
. -
Воспользуйтесь методом REST API updateAccessBindings для ресурса Bucket или вызовом gRPC API BucketService/UpdateAccessBindings.
Также вы можете назначить роль на бакет в сервисе Identity and Access Management.