Настройка прав доступа к каталогу
Чтобы предоставить пользователю доступ к ресурсам в каталоге, назначьте ему роль на этот каталог.
Примечание
Для доступа пользователя к консоли управленияresource-manager.clouds.member, но также можно назначить и другие роли, если вы знаете, какие права вы хотите предоставить приглашенным пользователям.
Чтобы дать эти права сразу всем пользователям в организации, назначьте роль системной группе All users in organization X. При работе с CLI или API назначение дополнительных ролей не требуется.
Назначить роль на каталог
- В консоли управления
перейдите в нужный каталог. - Перейдите на вкладку Права доступа.
- Нажмите кнопку Настроить доступ.
- В открывшемся окне выберите раздел Пользовательские аккаунты.
- Выберите пользователя из списка или воспользуйтесь поиском по пользователям.
- Нажмите кнопку
Добавить роль и выберите роль из списка или воспользуйтесь поиском. - Нажмите кнопку Сохранить.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
-
Посмотрите описание команды для назначения роли на каталог:
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.yandexcloud.kz/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.yandexcloud.kz/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.yandexcloud.kz/resource-manager/v1/folders/b1gd129pp9ha********:updateAccessBindings
Назначить несколько ролей
- В консоли управления
перейдите в нужный каталог. - Перейдите на вкладку Права доступа.
- Нажмите кнопку Настроить доступ.
- В открывшемся окне выберите раздел Пользовательские аккаунты.
- Выберите пользователя из списка или воспользуйтесь поиском по пользователям.
- Нажмите кнопку
Добавить роль и выберите роль из списка или воспользуйтесь поиском. - Выполните предыдущее действие необходимое количество раз, чтобы добавить все нужные роли.
- Нажмите кнопку Сохранить.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
Команда 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.yandexcloud.kz/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.yandexcloud.kz/resource-manager/v1/folders/b1gd129pp9ha********:setAccessBindings
Доступ к каталогу для сервисного аккаунта
- В консоли управления
выберите каталог. - Перейдите на вкладку Права доступа.
- Нажмите кнопку Настроить доступ.
- В открывшемся окне выберите раздел Сервисные аккаунты.
- Выберите сервисный аккаунт из списка или воспользуйтесь поиском.
- Нажмите кнопку
Добавить роль и выберите роль в каталоге. - Нажмите кнопку Сохранить.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
-
Выберите роль, которую хотите назначить сервисному аккаунту. Описание ролей можно найти в документации 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.yandexcloud.kz/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.yandexcloud.kz/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********