Настройка прав доступа к каталогу
Чтобы предоставить пользователю доступ к ресурсам в каталоге, назначьте ему роль на этот каталог.
Примечание
Для доступа пользователя к консоли управленияresource-manager.clouds.member
, но также можно назначить и другие роли, если вы знаете, какие права вы хотите предоставить приглашенным пользователям.
Чтобы дать эти права сразу всем пользователям в организации, назначьте роль системной группе All users in organization X
. При работе с CLI или API назначение дополнительных ролей не требуется.
Назначить роль на каталог
- В консоли управления
перейдите в нужный каталог. - Перейдите на вкладку Права доступа.
- Нажмите кнопку Настроить доступ.
- В открывшемся окне выберите раздел Пользовательские аккаунты.
- Выберите пользователя из списка или воспользуйтесь поиском по пользователям.
- Нажмите кнопку
Добавить роль и выберите роль из списка или воспользуйтесь поиском. - Нажмите кнопку Сохранить.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
-
Посмотрите описание команды для назначения роли на каталог:
yc resource-manager folder add-access-binding --help
-
Выберите каталог, например
my-folder
:yc resource-manager folder list
Результат:
+----------------------+-----------+--------+--------+ | ID | NAME | LABELS | STATUS | +----------------------+-----------+--------+--------+ | b1gd129pp9ha******** | my-folder | | ACTIVE | +----------------------+-----------+--------+--------+
-
Выберите роль:
yc iam role list
Результат:
+--------------------------------+-------------+ | ID | DESCRIPTION | +--------------------------------+-------------+ | admin | | | compute.images.user | | | editor | | | ... | | +--------------------------------+-------------+
-
Узнайте идентификатор пользователя по логину или адресу электронной почты.
yc iam user-account get test-user
Результат:
id: gfei8n54hmfh******** yandex_passport_user_account: login: test-user default_email: test-user@yandex.ru
-
Назначьте пользователю
test-user
рольeditor
на каталогmy-folder
. В субъекте укажите типuserAccount
и ID пользователя:yc resource-manager folder add-access-binding my-folder \ --role editor \ --subject userAccount:gfei8n54hmfh********
Чтобы назначить роль не пользователю, а сервисному аккаунту, группе пользователей или системной группе, воспользуйтесь примерами.
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
Внимание
Не создавайте ресурс совместно с ресурсом yandex_resourcemanager_folder_iam_policy
. Они будут конфликтовать.
Чтобы назначить роль на каталог, созданный с помощью Terraform:
-
Опишите в конфигурационном файле параметры роли каталога:
-
folder_id
— идентификатор каталога, на который назначаются права. Обязательный параметр. -
role
— назначаемая роль. Обязательный параметр.Примечание
Для каждой роли можно использовать только один ресурс
yandex_resourcemanager_folder_iam_member
. -
member
— пользователь, которому будет присвоена роль. Обязательный параметр. Может иметь одно из следующих значений:userAccount:<идентификатор_пользователя>
— ID пользователя.serviceAccount:<идентификатор_сервисного_аккаунта>
— ID сервисного аккаунта.federatedUser:<идентификатор_пользовательского_аккаунта>
— ID пользовательского аккаунта.system:group:organization:<идентификатор_организации>:users
— идентификатор организации, чтобы назначить роль системной группеAll users in organization X
.system:group:federation:<идентификатор_федерации>:users
— идентификатор федерации удостоверений, чтобы назначить роль системной группеAll users in federation N
.
Пример назначения роли на каталог с помощью Terraform
... data "yandex_resourcemanager_folder" "project1" { folder_id = "<идентификатор_каталога>" } resource "yandex_resourcemanager_folder_iam_member" "editor" { folder_id = "${data.yandex_resourcemanager_folder_iam_member.project1.id}" role = "editor" member = "userAccount:<login@yandex.ru>" } ...
Более подробную информацию о параметрах ресурса
yandex_resourcemanager_folder_iam_member
в Terraform, см. в документации провайдера . -
-
Проверьте конфигурацию командой:
terraform validate
Если конфигурация является корректной, появится сообщение:
Success! The configuration is valid.
-
Выполните команду:
terraform plan
В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply
-
Подтвердите изменения: введите в терминал слово
yes
и нажмите Enter.Проверить изменение каталога можно в консоли управления
или с помощью команды CLI:yc resource-manager folder list-access-bindings <имя_или_идентификатор_каталога>
Воспользуйтесь методом REST API updateAccessBindings для ресурса Folder или вызовом gRPC API FolderService/UpdateAccessBindings. Вам понадобится ID каталога и ID пользователя, которому назначается роль на каталог.
-
Узнайте ID каталога с помощью метода REST API list:
curl \ --header "Authorization: Bearer <IAM-токен>" \ https://resource-manager.api.cloud.yandex.net/resource-manager/v1/folders?cloudId=b1gg8sgd16g7********
Результат:
{ "folders": [ { "id": "b1g66mft1vop********", "cloudId": "b1gd129pp9ha********", "createdAt": "2018-10-17T12:44:31Z", "name": "my-folder", "status": "ACTIVE" } ] }
-
Узнайте ID пользователя по логину с помощью метода REST API getByLogin:
curl \ --header "Authorization: Bearer <IAM-токен>" \ https://iam.api.cloud.yandex.net/iam/v1/yandexPassportUserAccounts:byLogin?login=test-user
Результат:
{ "id": "gfei8n54hmfh********", "yandexPassportUserAccount": { "login": "test-user", "defaultEmail": "test-user@yandex.ru" } }
-
Назначьте пользователю роль
editor
на каталогmy-folder
. В свойствеaction
укажитеADD
, а в свойствеsubject
- типuserAccount
и ID пользователя:curl \ --request POST \ --header 'Content-Type: application/json' \ --header "Authorization: Bearer <IAM-токен>" \ --data '{ "accessBindingDeltas": [{ "action": "ADD", "accessBinding": { "roleId": "editor", "subject": { "id": "gfei8n54hmfh********", "type": "userAccount" }}}]}' \ https://resource-manager.api.cloud.yandex.net/resource-manager/v1/folders/b1gd129pp9ha********:updateAccessBindings
Назначить несколько ролей
- В консоли управления
перейдите в нужный каталог. - Перейдите на вкладку Права доступа.
- Нажмите кнопку Настроить доступ.
- В открывшемся окне выберите раздел Пользовательские аккаунты.
- Выберите пользователя из списка или воспользуйтесь поиском по пользователям.
- Нажмите кнопку
Добавить роль и выберите роль из списка или воспользуйтесь поиском. - Выполните предыдущее действие необходимое количество раз, чтобы добавить все нужные роли.
- Нажмите кнопку Сохранить.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
Команда add-access-binding
позволяет добавить только одну роль. Вы можете назначить несколько ролей с помощью команды set-access-binding
.
Внимание
Команда set-access-binding
полностью перезаписывает права доступа к ресурсу! Все текущие роли на ресурс будут удалены.
-
Убедитесь, что на ресурс не назначены роли, которые вы не хотите потерять:
yc resource-manager folder list-access-bindings my-folder
-
Например, назначьте роль нескольким пользователям:
yc resource-manager folder set-access-bindings my-folder \ --access-binding role=editor,subject=userAccount:gfei8n54hmfh******** --access-binding role=viewer,subject=userAccount:helj89sfj80a********
Чтобы назначить роль не пользователю, а сервисному аккаунту, группе пользователей или системной группе, воспользуйтесь примерами.
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
Внимание
Не создавайте ресурс совместно с ресурсом yandex_resourcemanager_folder_iam_policy
. Они будут конфликтовать.
Чтобы назначить несколько ролей на каталог, созданный с помощью Terraform:
-
Опишите в конфигурационном файле параметры роли каталога:
-
folder_id
— идентификатор каталога, на который назначаются права. Обязательный параметр. -
role
— назначаемая роль. Обязательный параметр.Примечание
Для каждой роли можно использовать только один ресурс
yandex_resourcemanager_folder_iam_member
. -
member
— пользователь, которому будет присвоена роль. Чтобы добавить пользователя в список, создайте запись в форматеuserAccount:<идентификатор_пользователя>
, где<идентификатор_пользователя>
— email-адрес аккаунта Яндекс (например,ivan@yandex.ru
). Обязательный параметр.
Пример назначения роли на каталог с помощью Terraform
... data "yandex_resourcemanager_folder" "project1" { folder_id = "<идентификатор_каталога>" } resource "yandex_resourcemanager_folder_iam_member" "editor" { folder_id = "${data.yandex_resourcemanager_folder.project1.id}" role = "editor" member = "userAccount:<login1@yandex.ru>" } resource "yandex_resourcemanager_folder_iam_member" "operator" { folder_id = "${data.yandex_resourcemanager_folder.project1.id}" role = "operator" member = "userAccount:<login1@yandex.ru>" } ...
Более подробную информацию о параметрах ресурса
yandex_resourcemanager_folder_iam_member
в Terraform, см. в документации провайдера . -
-
Проверьте конфигурацию командой:
terraform validate
Если конфигурация является корректной, появится сообщение:
Success! The configuration is valid.
-
Выполните команду:
terraform plan
В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply
-
Подтвердите изменения: введите в терминал слово
yes
и нажмите Enter.Проверить изменение каталога можно в консоли управления
или с помощью команды CLI:yc resource-manager folder list-access-bindings <имя_или_идентификатор_каталога>
Назначьте одному пользователю роль editor
, а другому viewer
:
curl \
--request POST \
--header 'Content-Type: application/json' \
--header "Authorization: Bearer <IAM-токен>" \
--data '{
"accessBindingDeltas": [{
"action": "ADD",
"accessBinding": {
"roleId": "editor",
"subject": {
"id": "gfei8n54hmfh********",
"type": "userAccount"
}
}
},{
"action": "ADD",
"accessBinding": {
"roleId": "viewer",
"subject": {
"id": "helj89sfj80a********",
"type": "userAccount"
}}}]}' \
https://resource-manager.api.cloud.yandex.net/resource-manager/v1/folders/b1gd129pp9ha********:updateAccessBindings
Вы также можете назначать роли с помощью метода REST API setAccessBindings для ресурса Folder или вызова gRPC API FolderService/SetAccessBindings.
Внимание
Метод setAccessBindings
полностью перезаписывает права доступа к ресурсу! Все текущие роли на ресурс будут удалены.
curl \
--request POST \
--header 'Content-Type: application/json' \
--header "Authorization: Bearer <IAM-токен>" \
--data '{
"accessBindings": [{
"roleId": "editor",
"subject": { "id": "ajei8n54hmfh********", "type": "userAccount" }
},{
"roleId": "viewer",
"subject": { "id": "helj89sfj80a********", "type": "userAccount" }
}]}' \
https://resource-manager.api.cloud.yandex.net/resource-manager/v1/folders/b1gd129pp9ha********:setAccessBindings
Доступ к каталогу для сервисного аккаунта
- В консоли управления
выберите каталог. - Перейдите на вкладку Права доступа.
- Нажмите кнопку Настроить доступ.
- В открывшемся окне выберите раздел Сервисные аккаунты.
- Выберите сервисный аккаунт из списка или воспользуйтесь поиском.
- Нажмите кнопку
Добавить роль и выберите роль в каталоге. - Нажмите кнопку Сохранить.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
-
Выберите роль, которую хотите назначить сервисному аккаунту. Описание ролей можно найти в документации Yandex Identity and Access Management в справочнике ролей Yandex Cloud.
-
Узнайте идентификатор сервисного аккаунта по его имени:
yc iam service-account get my-robot
Результат:
id: aje6o61dvog2******** folder_id: b1gvmob95yys******** created_at: "2018-10-15T18:01:25Z" name: my-robot
Если вы не знаете имя сервисного аккаунта, получите список сервисных аккаунтов с их идентификаторами:
yc iam service-account list
Результат:
+----------------------+------------------+-----------------+ | ID | NAME | DESCRIPTION | +----------------------+------------------+-----------------+ | aje6o61dvog2******** | my-robot | my description | +----------------------+------------------+-----------------+
-
Назначьте роль
viewer
сервисному аккаунтуmy-robot
, используя его идентификатор:yc resource-manager folder add-access-binding my-folder \ --role viewer \ --subject serviceAccount:aje6o61dvog2********
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
Внимание
Не создавайте ресурс совместно с ресурсом yandex_resourcemanager_folder_iam_policy
. Они будут конфликтовать.
Чтобы назначить роль для сервисного аккаунта на каталог, созданный с помощью Terraform:
-
Опишите в конфигурационном файле параметры роли каталога:
-
folder_id
— идентификатор каталога, на который назначаются права. Обязательный параметр. -
role
— назначаемая роль. Обязательный параметр.Примечание
Для каждой роли можно использовать только один ресурс
yandex_resourcemanager_folder_iam_member
. -
member
— пользователь, которому будет присвоена роль. Чтобы добавить пользователя в список, создайте запись в форматеserviceAccount:<идентификатор_сервисного_аккаунта>
, где<идентификатор_сервисного_аккаунта>
— идентификатор сервисного аккаунта. Вы можете перечислить несколько сервисных аккаунтов. Обязательный параметр.
Пример назначения роли на каталог с помощью Terraform
... data "yandex_resourcemanager_folder" "project1" { folder_id = "<идентификатор_каталога>" } resource "yandex_resourcemanager_folder_iam_member" "editor" { folder_id = "${data.yandex_resourcemanager_folder.project1.id}" role = "editor" member = "serviceAccount:<идентификатор_сервисного_аккаунта>" } ...
Более подробную информацию о параметрах ресурса
yandex_resourcemanager_folder_iam_member
в Terraform, см. в документации провайдера . -
-
Проверьте конфигурацию командой:
terraform validate
Если конфигурация является корректной, появится сообщение:
Success! The configuration is valid.
-
Выполните команду:
terraform plan
В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply
-
Подтвердите изменения: введите в терминал слово
yes
и нажмите Enter.Проверить изменение каталога можно в консоли управления
или с помощью команды CLI:yc resource-manager folder list-access-bindings <имя_или_идентификатор_каталога>
Чтобы назначить сервисному аккаунту роль на облако или каталог, воспользуйтесь методом REST API updateAccessBindings
для ресурса Cloud или Folder:
-
Выберите роль, которую хотите назначить сервисному аккаунту. Описание ролей можно найти в документации Yandex Identity and Access Management в справочнике ролей Yandex Cloud.
-
Узнайте ID каталога с сервисными аккаунтами.
-
Получите IAM-токен для авторизации в API Yandex Cloud.
-
Получите список сервисных аккаунтов в каталоге, чтобы узнать их идентификаторы:
export FOLDER_ID=b1gvmob95yys******** export IAM_TOKEN=CggaATEVAgA... curl \ --header "Authorization: Bearer ${IAM_TOKEN}" \ "https://iam.api.cloud.yandex.net/iam/v1/serviceAccounts?folderId=${FOLDER_ID}"
Результат:
{ "serviceAccounts": [ { "id": "ajebqtreob2d********", "folderId": "b1gvmob95yys********", "createdAt": "2018-10-18T13:42:40Z", "name": "my-robot", "description": "my description" } ] }
-
Сформируйте тело запроса, например в файле
body.json
. В свойствеaction
укажитеADD
, в свойствеroleId
— нужную роль, напримерeditor
, а в свойствеsubject
— типserviceAccount
и идентификатор сервисного аккаунта:body.json:
{ "accessBindingDeltas": [{ "action": "ADD", "accessBinding": { "roleId": "editor", "subject": { "id": "ajebqtreob2d********", "type": "serviceAccount" } } }] }
-
Назначьте роль сервисному аккаунту. Например, на каталог с идентификатором
b1gvmob95yys********
:export FOLDER_ID=b1gvmob95yys******** export IAM_TOKEN=CggaAT******** curl \ --request POST \ --header "Content-Type: application/json" \ --header "Authorization: Bearer ${IAM_TOKEN}" \ --data '@body.json' \ "https://resource-manager.api.cloud.yandex.net/resource-manager/v1/folders/${FOLDER_ID}:updateAccessBindings"
Доступ к каталогу для федеративного пользователя
Назначение роли происходит так же, как назначение роли пользователю с аккаунтом на Яндексе. Рядом с именем пользователя будет указано имя федерации, к которой он относится.
- В консоли управления
перейдите в нужный каталог. - Перейдите на вкладку Права доступа.
- Нажмите кнопку Настроить доступ.
- В открывшемся окне выберите раздел Пользовательские аккаунты.
- Выберите пользователя из списка или воспользуйтесь поиском по пользователям.
- Нажмите кнопку
Добавить роль и выберите роль из списка или воспользуйтесь поиском. - Нажмите кнопку Сохранить.
-
Выберите роль из справочника ролей Yandex Cloud.
-
Назначьте роль с помощью команды:
yc resource-manager folder add-access-binding <имя_или_идентификатор_каталога> \ --role <идентификатор_роли> \ --subject federatedUser:<идентификатор_пользователя>
Где:
<имя_или_идентификатор_каталога>
— имя или идентификатор каталога.--role
— идентификатор роли, напримерeditor
.--subject
— идентификатор аккаунта пользователя, которому назначается роль.
Например, назначьте федеративному пользователю с идентификатором
aje6o61dvog2********
рольeditor
на каталогmy-folder
:yc resource-manager folder add-access-binding my-folder \ --role editor \ --subject federatedUser:aje6o61dvog2********