Настройка прав доступа к облаку
Чтобы предоставить пользователю доступ к ресурсам в облаке, назначьте ему роль на это облако.
Назначить роль на облако
- В консоли управления
выберите облако. - Перейдите на вкладку Права доступа.
- Нажмите кнопку Настроить доступ.
- В открывшемся окне выберите раздел Пользовательские аккаунты.
- Выберите пользователя из списка или воспользуйтесь поиском по пользователям.
- Нажмите кнопку
Добавить роль и выберите роль из списка или воспользуйтесь поиском. - Нажмите кнопку Сохранить.
-
Посмотрите описание команды для назначения роли на облако:
yc resource-manager cloud add-access-binding --help
-
Получите список доступных облаков:
yc resource-manager cloud list
Результат:
+----------------------+----------+ | ID | NAME | +----------------------+----------+ | b1gg8sgd16g7******** | my-cloud | +----------------------+----------+
-
Получите список доступных ролей:
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-cloud
. В субъекте укажите типuserAccount
и идентификатор пользователя:yc resource-manager cloud add-access-binding my-cloud \ --role editor \ --subject userAccount:<идентификатор_пользователя>
Чтобы назначить роль не пользователю, а сервисному аккаунту, группе пользователей или системной группе, воспользуйтесь примерами.
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
-
Опишите в конфигурационном файле параметры прав доступа к облаку:
cloud_id
— идентификатор облака. Получить список доступных облаков можно с помощью команды CLI:yc resource-manager cloud list
.role
— роль, которую нужно назначить. Перечень ролей можно получить с помощью команды CLI:yc iam role list
. В одном ресурсеyandex_resourcemanager_cloud_iam_member
можно назначить только одну роль.member
— пользователь или группа, которым нужно назначить роль. Каждый ресурсyandex_resourcemanager_cloud_iam_member
может иметь одно из следующих значений:userAccount:<идентификатор_пользователя>
— идентификатор пользователя.serviceAccount:<идентификатор_сервисного_аккаунта>
— идентификатор сервисного аккаунта.federatedUser:<идентификатор_федеративного_аккаунта>
— идентификатор федеративного аккаунта.system:group:organization:<идентификатор_организации>:users
— идентификатор организации, чтобы назначить роль системной группеAll users in organization X
.system:group:federation:<идентификатор_федерации>:users
— идентификатор федерации удостоверений, чтобы назначить роль системной группеAll users in federation N
.
Пример структуры конфигурационного файла:
data "yandex_resourcemanager_cloud" "project1" { name = "Project 1" } resource "yandex_resourcemanager_cloud_iam_member" "editor" { cloud_id = "${data.yandex_resourcemanager_cloud.project1.id}" role = "editor" member = "userAccount:<идентификатор_пользователя>" }
Более подробную информацию о параметрах ресурса
yandex_resourcemanager_cloud_iam_member
в Terraform, см. в документации провайдера . -
В командной строке перейдите в папку, где вы создали конфигурационный файл.
-
Проверьте корректность конфигурационного файла с помощью команды:
terraform validate
Если конфигурация является корректной, появится сообщение:
Success! The configuration is valid.
-
Выполните команду:
terraform plan
В терминале будет выведен список создаваемых ресурсов и их параметров. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply
-
Подтвердите изменения: введите в терминале слово
yes
и нажмите Enter.После этого будут назначены права доступа к облаку.
Воспользуйтесь методом REST API updateAccessBindings для ресурса Cloud или вызовом gRPC API CloudService/UpdateAccessBindings.
Вам понадобится идентификатор облака и идентификатор пользователя, которому назначается роль на облако.
-
Узнайте идентификатор облака с помощью метода REST API list:
curl \ --header "Authorization: Bearer <IAM-токен>" \ https://resource-manager.api.cloud.yandex.net/resource-manager/v1/clouds
Результат:
{ "clouds": [ { "id": "b1gg8sgd16g7********", "createdAt": "2018-09-23T12:14:45Z", "name": "cloud-b1gg8sgd16g7qc" } ] }
-
Узнайте идентификатор пользователя по логину с помощью метода 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-cloud
. В свойствеaction
укажитеADD
, а в свойствеsubject
- типuserAccount
и идентификатор пользователя:curl \ --request POST \ --header 'Content-Type: application/json' \ --header "Authorization: Bearer <IAM-токен>" \ --data '{ "accessBindingDeltas": [{ "action": "ADD", "accessBinding": { "roleId": "editor", "subject": { "id": "<идентификатор_пользователя>", "type": "userAccount" }}}]}' \ https://resource-manager.api.cloud.yandex.net/resource-manager/v1/clouds/b1gg8sgd16g7********:updateAccessBindings
Назначить несколько ролей
- В консоли управления
выберите облако. - Перейдите на вкладку Права доступа.
- Нажмите кнопку Назначить роли.
- В окне Настройка прав доступа нажмите кнопку Выбрать пользователя.
- Выберите пользователя из списка или воспользуйтесь поиском по пользователям.
- Нажмите кнопку Добавить роль.
- Выберите роль в облаке.
- Добавьте еще роль через кнопку Добавить роль.
- Нажмите кнопку Сохранить.
Команда add-access-binding
позволяет добавить только одну роль. Вы можете назначить несколько ролей с помощью команды set-access-binding
.
Внимание
Команда set-access-binding
полностью перезаписывает права доступа к ресурсу! Все текущие роли на ресурс будут удалены.
-
Убедитесь, что на ресурс не назначены роли, которые вы не хотите потерять:
yc resource-manager cloud list-access-binding my-cloud
-
Например, назначьте роль нескольким пользователям:
yc resource-manager cloud set-access-bindings my-cloud \ --access-binding role=editor,subject=userAccount:<идентификатор_первого_пользователя> --access-binding role=viewer,subject=userAccount:<идентификатор_второго_пользователя>
Чтобы назначить роль не пользователю, а сервисному аккаунту, группе пользователей или системной группе, воспользуйтесь примерами.
-
Опишите в конфигурационном файле параметры прав доступа к облаку. Назначьте одному пользователю роль
editor
, а другомуviewer
:data "yandex_resourcemanager_cloud" "project1" { name = "Project 1" } resource "yandex_resourcemanager_cloud_iam_member" "editor" { cloud_id = "${data.yandex_resourcemanager_cloud.project1.id}" role = "editor" member = "userAccount:<идентификатор_первого_пользователя>" } resource "yandex_resourcemanager_cloud_iam_member" "viewer" { cloud_id = "${data.yandex_resourcemanager_cloud.project1.id}" role = "viewer" member = "userAccount:<идентификатор_второго_пользователя>" }
-
В командной строке перейдите в папку, где вы создали конфигурационный файл.
-
Проверьте корректность конфигурационного файла с помощью команды:
terraform validate
Если конфигурация является корректной, появится сообщение:
Success! The configuration is valid.
-
Выполните команду:
terraform plan
В терминале будет выведен список создаваемых ресурсов и их параметров. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply
-
Подтвердите изменения: введите в терминале слово
yes
и нажмите Enter.После этого будут назначены права доступа к облаку.
Назначьте одному пользователю роль editor
, а другому viewer
:
curl \
--request POST \
--header 'Content-Type: application/json' \
--header "Authorization: Bearer <IAM-токен>" \
--data '{
"accessBindingDeltas": [{
"action": "ADD",
"accessBinding": {
"roleId": "editor",
"subject": {
"id": "<идентификатор_первого_пользователя>",
"type": "userAccount"
}
}
},{
"action": "ADD",
"accessBinding": {
"roleId": "viewer",
"subject": {
"id": "<идентификатор_второго_пользователя>",
"type": "userAccount"
}}}]}' \
https://resource-manager.api.cloud.yandex.net/resource-manager/v1/clouds/b1gg8sgd16g7********:updateAccessBindings
Вы также можете назначать роли с помощью метода REST API setAccessBindings для ресурса Cloud или вызова gRPC API CloudService/SetAccessBindings.
Внимание
Метод setAccessBindings
полностью перезаписывает права доступа к ресурсу! Все текущие роли на ресурс будут удалены.
curl \
--request POST \
--header 'Content-Type: application/json' \
--header "Authorization: Bearer <IAM-токен>" \
--data '{
"accessBindings": [{
"roleId": "editor",
"subject": { "id": "<идентификатор_первого_пользователя>", "type": "userAccount" }
},{
"roleId": "viewer",
"subject": { "id": "<идентификатор_второго_пользователя>", "type": "userAccount" }
}]}' \
https://resource-manager.api.cloud.yandex.net/resource-manager/v1/clouds/b1gg8sgd16g7********:setAccessBindings
Доступ к облаку для сервисного аккаунта
Сервисному аккаунту можно назначать роли на любые облака и каталоги в рамках организации, к которой он принадлежит.
Разрешите сервисному аккаунту test-sa
управлять облаком my-cloud
и ресурсами в нем:
Роли сервисному аккаунту назначаются так же, как пользовательскому аккаунту.
Чтобы назначить сервисному аккаунту роль на облако:
- В консоли управления
слева выберите облако. - Перейдите на вкладку Права доступа.
- Нажмите кнопку Настроить доступ.
- В открывшемся окне выберите раздел Сервисные аккаунты.
- Выберите сервисный аккаунт из списка или воспользуйтесь поиском.
- Нажмите кнопку
Добавить роль и выберите роль. - Нажмите кнопку Сохранить.
-
Узнайте идентификатор сервисного аккаунта
test-sa
, которому вы хотите назначить роль. Чтобы узнать идентификатор, получите список доступных сервисных аккаунтов:yc iam service-account list
Результат:
+----------------------+----------+------------------+ | ID | NAME | DESCRIPTION | +----------------------+----------+------------------+ | ajebqtreob2d******** | test-sa | test-description | +----------------------+----------+------------------+
-
Назначьте роль
editor
сервисному аккаунтуtest-sa
, указав его идентификатор. В типе субъекта укажитеserviceAccount
:yc resource-manager cloud add-access-binding my-cloud \ --role editor \ --subject serviceAccount:<идентификатор_сервисного_аккаунта>
-
Назначьте роль
editor
сервисному аккаунту:data "yandex_resourcemanager_cloud" "project1" { name = "Project 1" } resource "yandex_resourcemanager_cloud_iam_member" "editor" { cloud_id = "${data.yandex_resourcemanager_cloud.project1.id}" role = "editor" member = "serviceAccount:<идентификатор_сервисного_аккаунта>" }
-
В командной строке перейдите в папку, где вы создали конфигурационный файл.
-
Проверьте корректность конфигурационного файла с помощью команды:
terraform validate
Если конфигурация является корректной, появится сообщение:
Success! The configuration is valid.
-
Выполните команду:
terraform plan
В терминале будет выведен список создаваемых ресурсов и их параметров. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply
-
Подтвердите изменения: введите в терминале слово
yes
и нажмите Enter.После этого будут назначены права доступа к облаку.
-
Узнайте идентификатор сервисного аккаунта
test-sa
, которому вы хотите назначить роль. Чтобы узнать идентификатор, получите список доступных сервисных аккаунтов:curl \ --header "Authorization: Bearer <IAM-токен>" \ https://iam.api.cloud.yandex.net/iam/v1/serviceAccounts?folderId=b1gvmob95yys********
Результат:
{ "serviceAccounts": [ { "id": "ajebqtreob2d********", "folderId": "b1gvmob95yys********", "createdAt": "2018-10-18T13:42:40Z", "name": "test-sa", "description": "test-description" } ] }
-
Назначьте сервисному аккаунту
test-sa
рольeditor
на облакоmy-cloud
. В свойствеsubject
укажите типserviceAccount
и идентификаторtest-sa
. В URL запроса в качестве ресурса укажите идентификаторmy-cloud
:curl \ --request POST \ --header 'Content-Type: application/json' \ --header "Authorization: Bearer <IAM-токен>" \ --data '{ "accessBindingDeltas": [{ "action": "ADD", "accessBinding": { "roleId": "editor", "subject": { "id": "<идентификатор_сервисного_аккаунта>", "type": "serviceAccount" }}}]}' \ https://resource-manager.api.cloud.yandex.net/resource-manager/v1/clouds/b1gg8sgd16g7********:updateAccessBindings