Настройка прав доступа к облаку
Важно
Даже если операция с ресурсами сервисов Yandex Cloud разрешена ролью, ее выполнение может быть заблокировано, если для организации, облака или каталога создана политика авторизации, запрещающая эту операцию.
Чтобы предоставить пользователю доступ к ресурсам в облаке, назначьте ему роль на это облако.
Назначить роль на облако
- В консоли управления
выберите облако. - Перейдите на вкладку Права доступа.
- Нажмите кнопку Настроить доступ.
- В открывшемся окне выберите раздел Пользовательские аккаунты.
- Выберите пользователя из списка или воспользуйтесь поиском по пользователям.
- Нажмите кнопку
Добавить роль и выберите роль из списка или воспользуйтесь поиском. - Нажмите кнопку Сохранить.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id. Если вы обращаетесь к ресурсу по имени, поиск будет выполнен в каталоге по умолчанию. Если вы обращаетесь к ресурсу по идентификатору, поиск будет выполнен глобально — во всех каталогах с учетом прав доступа.
-
Посмотрите описание команды для назначения роли на облако:
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 -
Назначьте пользователю роль на облако. В субъекте укажите тип
userAccountи идентификатор пользователя:yc resource-manager cloud add-access-binding my-cloud \ --role editor \ --subject userAccount:<идентификатор_пользователя>Где:
-
--role— идентификатор роли, которую нужно назначить, напримерresource-manager.clouds.owner. -
--subject— обозначение субъекта, которому назначается роль.Обозначения субъектов
Для обозначения субъекта используется параметр
--subjectсо значением в формате<тип_субъекта>:<идентификатор>. Для некоторых типов субъектов в Yandex Cloud CLI вместо--subjectдоступны отдельные параметры, в которых достаточно указать имя или идентификатор субъекта без типа. Возможные обозначения субъектов и соответствующие параметры CLI:Тип субъекта
Обозначение субъекта
Параметр Yandex Cloud CLI
userAccountuserAccount:<идентификатор_пользователя>--user-account-idили--user-yandex-loginserviceAccountserviceAccount:<идентификатор_сервисного_аккаунта>--service-account-idили--service-account-namefederatedUserfederatedUser:<идентификатор_пользователя>--user-account-idgroupgroup:<идентификатор_группы>--group-memberssystemsystem:allAuthenticatedUsers(группа
All authenticated users)--all-authenticated-userssystem:allUsers(группа
All users)—
system:group:organization:<идентификатор_организации>:users(группа
All users in organization X)--organization-userssystem:group:federation:<идентификатор_федерации>:users(группа
All users in federation N)--federation-userssystem:group:userpool:<идентификатор_пула>:users(группа
All users in userpool P)—
-
Чтобы назначить роль не пользователю, а сервисному аккаунту, группе пользователей или системной группе, воспользуйтесь примерами.
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
Чтобы управлять инфраструктурой с помощью Terraform от имени сервисного аккаунта или пользовательских аккаунтов: аккаунта на Яндексе, федеративного аккаунта и локального пользователя, аутентифицируйтесь соответствующим способом.
-
Опишите в конфигурационном файле параметры назначаемых ролей.
Пример структуры конфигурационного файла:
data "yandex_resourcemanager_cloud" "project1" { name = "Project 1" } resource "yandex_resourcemanager_cloud_iam_member" "editor" { cloud_id = "${data.yandex_resourcemanager_cloud.project1.id}" role = "<роль>" member = "userAccount:<идентификатор_пользователя>" }Где:
-
cloud_id— идентификатор облака. Получить список доступных облаков можно с помощью команды CLI:yc resource-manager cloud list. Обязательный параметр. -
role— роль, которую нужно назначить. Перечень ролей можно получить с помощью команды CLI:yc iam role list. В одном ресурсеyandex_resourcemanager_cloud_iam_memberможно назначить только одну роль. Обязательный параметр. -
member— обозначение субъекта, которому назначается роль. Обязательный параметр.Обозначения субъектов
Для обозначения субъекта используется комбинация типа и уникального идентификатора —
<тип_субъекта>:<идентификатор>. Возможные обозначения субъектов:Тип субъекта
Обозначение субъекта
userAccountuserAccount:<идентификатор_пользователя>serviceAccountserviceAccount:<идентификатор_сервисного_аккаунта>federatedUserfederatedUser:<идентификатор_пользователя>groupgroup:<идентификатор_группы>systemsystem:allAuthenticatedUsers(группа
All authenticated users)system:allUsers(группа
All users)system:group:organization:<идентификатор_организации>:users(группа
All users in organization X)system:group:federation:<идентификатор_федерации>:users(группа
All users in federation N)system:group:userpool:<идентификатор_пула>:users(группа
All users in userpool P)
Подробнее о параметрах ресурса
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" } } -
Назначьте пользователю роль на облако. В свойстве
actionукажитеADD, а в свойствеsubject— типuserAccountи идентификатор пользователя:curl \ --request POST \ --header 'Content-Type: application/json' \ --header "Authorization: Bearer <IAM-токен>" \ --data '{ "accessBindingDeltas": [ { "action": "ADD", "accessBinding": { "roleId": "<роль>", "subject": { "id": "<идентификатор_пользователя>", "type": "userAccount" } } } ] }' \ https://resource-manager.api.cloud.yandex.net/resource-manager/v1/clouds/<идентификатор_облака>:updateAccessBindingsГде:
-
roleId— назначаемая роль. -
subject— субъект, которому назначается роль.Обозначения субъектов
Для обозначения субъекта используется комбинация типа и уникального идентификатора в полях запроса
subject.typeиsubject.id. Возможные комбинации:subject.type
subject.id
userAccount<идентификатор_пользователя>serviceAccount<идентификатор_сервисного_аккаунта>federatedUser<идентификатор_пользователя>group<идентификатор_группы>systemallAuthenticatedUsers(группа
All authenticated users)allUsers(группа
All users)group:organization:<идентификатор_организации>:users(группа
All users in organization X)group:federation:<идентификатор_федерации>:users(группа
All users in federation N)group:userpool:<идентификатор_пула>:users(группа
All users in userpool P)
-
Назначить несколько ролей
- В консоли управления
выберите облако. - Перейдите на вкладку Права доступа.
- Нажмите кнопку Назначить роли.
- В окне Настройка прав доступа нажмите кнопку Выбрать пользователя.
- Выберите пользователя из списка или воспользуйтесь поиском по пользователям.
- Нажмите кнопку Добавить роль.
- Выберите роль в облаке.
- Добавьте еще роль через кнопку Добавить роль.
- Нажмите кнопку Сохранить.
Команда add-access-binding позволяет добавить только одну роль. Вы можете назначить несколько ролей с помощью команды set-access-bindings.
Внимание
Команда set-access-bindings для назначения нескольких ролей полностью перезаписывает права доступа к ресурсу. Все текущие роли на ресурс будут удалены.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id. Если вы обращаетесь к ресурсу по имени, поиск будет выполнен в каталоге по умолчанию. Если вы обращаетесь к ресурсу по идентификатору, поиск будет выполнен глобально — во всех каталогах с учетом прав доступа.
-
Убедитесь, что на ресурс не назначены роли, которые вы не хотите потерять:
yc resource-manager cloud list-access-bindings <имя_или_идентификатор_облака> -
Чтобы назначить роль, выполните команду:
yc resource-manager cloud set-access-bindings <имя_или_идентификатор_облака> \ --access-binding role=<роль>,subject=<тип_субъекта>:<идентификатор_субъекта>Где:
-
role— идентификатор роли, которую нужно назначить. -
subject— обозначение субъекта, которому назначается роль.Обозначения субъектов
Для обозначения субъекта используется комбинация типа и уникального идентификатора —
<тип_субъекта>:<идентификатор>. Возможные обозначения субъектов:Тип субъекта
Обозначение субъекта
userAccountuserAccount:<идентификатор_пользователя>serviceAccountserviceAccount:<идентификатор_сервисного_аккаунта>federatedUserfederatedUser:<идентификатор_пользователя>groupgroup:<идентификатор_группы>systemsystem:allAuthenticatedUsers(группа
All authenticated users)system:allUsers(группа
All users)system:group:organization:<идентификатор_организации>:users(группа
All users in organization X)system:group:federation:<идентификатор_федерации>:users(группа
All users in federation N)system:group:userpool:<идентификатор_пула>:users(группа
All users in userpool P)
Для каждой роли передайте отдельный параметр
--access-binding. Например:yc resource-manager cloud set-access-bindings my-cloud \ --access-binding role=editor,subject=userAccount:gfei8n54hmfh******** \ --access-binding role=viewer,subject=userAccount:helj89sfj80a******** -
Чтобы назначить роль не пользователю, а сервисному аккаунту, группе пользователей или системной группе, воспользуйтесь примерами.
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
Чтобы управлять инфраструктурой с помощью Terraform от имени сервисного аккаунта или пользовательских аккаунтов: аккаунта на Яндексе, федеративного аккаунта и локального пользователя, аутентифицируйтесь соответствующим способом.
-
Опишите в конфигурационном файле параметры прав доступа к облаку.
Пример структуры конфигурационного файла:
data "yandex_resourcemanager_cloud" "project1" { name = "Project 1" } resource "yandex_resourcemanager_cloud_iam_member" "member1" { cloud_id = "${data.yandex_resourcemanager_cloud.project1.id}" role = "<роль_1>" member = "userAccount:<идентификатор_пользователя>" } resource "yandex_resourcemanager_cloud_iam_member" "member2" { cloud_id = "${data.yandex_resourcemanager_cloud.project1.id}" role = "<роль_2>" member = "userAccount:<идентификатор_пользователя>" }Где:
-
cloud_id— идентификатор облака. Получить список доступных облаков можно с помощью команды CLI:yc resource-manager cloud list. Обязательный параметр. -
role— роль, которую нужно назначить. Перечень ролей можно получить с помощью команды CLI:yc iam role list. В одном ресурсеyandex_resourcemanager_cloud_iam_memberможно назначить только одну роль. Обязательный параметр. -
member— обозначение субъекта, которому назначается роль. Обязательный параметр.Обозначения субъектов
Для обозначения субъекта используется комбинация типа и уникального идентификатора —
<тип_субъекта>:<идентификатор>. Возможные обозначения субъектов:Тип субъекта
Обозначение субъекта
userAccountuserAccount:<идентификатор_пользователя>serviceAccountserviceAccount:<идентификатор_сервисного_аккаунта>federatedUserfederatedUser:<идентификатор_пользователя>groupgroup:<идентификатор_группы>systemsystem:allAuthenticatedUsers(группа
All authenticated users)system:allUsers(группа
All users)system:group:organization:<идентификатор_организации>:users(группа
All users in organization X)system:group:federation:<идентификатор_федерации>:users(группа
All users in federation N)system:group:userpool:<идентификатор_пула>:users(группа
All users in userpool P)
-
-
Создайте ресурсы:
-
В терминале перейдите в директорию с конфигурационным файлом.
-
Проверьте корректность конфигурации с помощью команды:
terraform validateЕсли конфигурация является корректной, появится сообщение:
Success! The configuration is valid. -
Выполните команду:
terraform planВ терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply -
Подтвердите изменения: введите в терминале слово
yesи нажмите Enter.
После этого будут назначены права доступа к облаку.
-
Назначьте роли пользователям:
curl \
--request POST \
--header 'Content-Type: application/json' \
--header "Authorization: Bearer <IAM-токен>" \
--data '{
"accessBindingDeltas": [
{
"action": "ADD",
"accessBinding": {
"roleId": "<роль_1>",
"subject": {
"id": "<идентификатор_пользователя>",
"type": "userAccount"
}
}
},
{
"action": "ADD",
"accessBinding": {
"roleId": "<роль_2>",
"subject": {
"id": "<идентификатор_пользователя>",
"type": "userAccount"
}
}
}
]
}' \
https://resource-manager.api.cloud.yandex.net/resource-manager/v1/clouds/<идентификатор_облака>:updateAccessBindings
Где:
-
roleId— назначаемая роль. -
subject— субъект, которому назначается роль.Обозначения субъектов
Для обозначения субъекта используется комбинация типа и уникального идентификатора в полях запроса
subject.typeиsubject.id. Возможные комбинации:subject.type
subject.id
userAccount<идентификатор_пользователя>serviceAccount<идентификатор_сервисного_аккаунта>federatedUser<идентификатор_пользователя>group<идентификатор_группы>systemallAuthenticatedUsers(группа
All authenticated users)allUsers(группа
All users)group:organization:<идентификатор_организации>:users(группа
All users in organization X)group:federation:<идентификатор_федерации>:users(группа
All users in federation N)group:userpool:<идентификатор_пула>:users(группа
All users in userpool P)
Вы также можете назначать роли с помощью метода REST API setAccessBindings для ресурса Cloud или вызова gRPC API CloudService/SetAccessBindings.
Внимание
Метод setAccessBindings для назначения нескольких ролей полностью перезаписывает права доступа к ресурсу. Все текущие роли на ресурс будут удалены.
Доступ к облаку для сервисного аккаунта
Сервисному аккаунту можно назначать роли на любые облака и каталоги в рамках организации, к которой он принадлежит.
Разрешите сервисному аккаунту test-sa управлять облаком my-cloud и ресурсами в нем:
Роли сервисному аккаунту назначаются так же, как пользовательскому аккаунту.
Чтобы назначить сервисному аккаунту роль на облако:
- В консоли управления
слева выберите облако. - Перейдите на вкладку Права доступа.
- Нажмите кнопку Настроить доступ.
- В открывшемся окне выберите раздел Сервисные аккаунты.
- Выберите сервисный аккаунт из списка или воспользуйтесь поиском.
- Нажмите кнопку
Добавить роль и выберите роль. - Нажмите кнопку Сохранить.
-
Узнайте идентификатор сервисного аккаунта, которому вы хотите назначить роль. Чтобы узнать идентификатор, получите список доступных сервисных аккаунтов:
yc iam service-account listРезультат:
+----------------------+----------+------------------+ | ID | NAME | DESCRIPTION | +----------------------+----------+------------------+ | ajebqtreob2d******** | test-sa | test-description | +----------------------+----------+------------------+ -
Назначьте роль сервисному аккаунту, используя его идентификатор:
yc resource-manager cloud add-access-binding my-cloud \ --role <роль> \ --service-account-id <идентификатор_сервисного_аккаунта>Где:
--role— идентификатор роли, которую нужно назначить, напримерresource-manager.clouds.owner.--service-account-id— идентификатор сервисного аккаунта. Также вы можете использовать параметр--service-account-nameи указать имя сервисного аккаунта вместо идентификатора.
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
Чтобы управлять инфраструктурой с помощью Terraform от имени сервисного аккаунта или пользовательских аккаунтов: аккаунта на Яндексе, федеративного аккаунта и локального пользователя, аутентифицируйтесь соответствующим способом.
-
Опишите в конфигурационном файле параметры ресурсов, которые необходимо создать.
Пример структуры конфигурационного файла:
resource "yandex_resourcemanager_cloud_iam_member" "editor" { cloud_id = "<идентификатор_облака>" role = "<роль>" member = "serviceAccount:<идентификатор_сервисного_аккаунта>" }Где:
-
cloud_id— идентификатор облака. Обязательный параметр. -
role— назначаемая роль. Описание ролей можно найти в документации Yandex Identity and Access Management в справочнике ролей Yandex Cloud. Обязательный параметр. -
member— обозначение субъекта, которому назначается роль. Для сервисного аккаунта укажитеserviceAccount:<идентификатор_сервисного_аккаунта>. Обязательный параметр.Обозначения субъектов
Для обозначения субъекта используется комбинация типа и уникального идентификатора —
<тип_субъекта>:<идентификатор>. Возможные обозначения субъектов:Тип субъекта
Обозначение субъекта
userAccountuserAccount:<идентификатор_пользователя>serviceAccountserviceAccount:<идентификатор_сервисного_аккаунта>federatedUserfederatedUser:<идентификатор_пользователя>groupgroup:<идентификатор_группы>systemsystem:allAuthenticatedUsers(группа
All authenticated users)system:allUsers(группа
All users)system:group:organization:<идентификатор_организации>:users(группа
All users in organization X)system:group:federation:<идентификатор_федерации>:users(группа
All users in federation N)system:group:userpool:<идентификатор_пула>:users(группа
All users in userpool P)
-
-
Создайте ресурсы:
-
В терминале перейдите в директорию с конфигурационным файлом.
-
Проверьте корректность конфигурации с помощью команды:
terraform validateЕсли конфигурация является корректной, появится сообщение:
Success! The configuration is valid. -
Выполните команду:
terraform planВ терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply -
Подтвердите изменения: введите в терминале слово
yesи нажмите Enter.
После этого будут назначены права доступа к облаку.
-
-
Узнайте идентификатор сервисного аккаунта, которому вы хотите назначить роль. Чтобы узнать идентификатор, получите список доступных сервисных аккаунтов:
curl \ --header "Authorization: Bearer <IAM-токен>" \ https://iam.api.cloud.yandex.net/iam/v1/serviceAccounts?folderId=<идентификатор_каталога>Результат:
{ "serviceAccounts": [ { "id": "ajebqtreob2d********", "folderId": "b1gvmob95yys********", "createdAt": "2018-10-18T13:42:40Z", "name": "test-sa", "description": "test-description" } ] } -
Назначьте сервисному аккаунту роль на облако. В свойстве
subjectукажите типserviceAccountи идентификатор сервисного аккаунта. В URL запроса в качестве ресурса укажите идентификатор облака:curl \ --request POST \ --header 'Content-Type: application/json' \ --header "Authorization: Bearer <IAM-токен>" \ --data '{ "accessBindingDeltas": [ { "action": "ADD", "accessBinding": { "roleId": "<роль>", "subject": { "id": "<идентификатор_сервисного_аккаунта>", "type": "serviceAccount" } } } ] }' \ https://resource-manager.api.cloud.yandex.net/resource-manager/v1/clouds/<идентификатор_облака>:updateAccessBindingsГде:
-
roleId— назначаемая роль. -
subject— субъект, которому назначается роль.Обозначения субъектов
Для обозначения субъекта используется комбинация типа и уникального идентификатора в полях запроса
subject.typeиsubject.id. Возможные комбинации:subject.type
subject.id
userAccount<идентификатор_пользователя>serviceAccount<идентификатор_сервисного_аккаунта>federatedUser<идентификатор_пользователя>group<идентификатор_группы>systemallAuthenticatedUsers(группа
All authenticated users)allUsers(группа
All users)group:organization:<идентификатор_организации>:users(группа
All users in organization X)group:federation:<идентификатор_федерации>:users(группа
All users in federation N)group:userpool:<идентификатор_пула>:users(группа
All users in userpool P)
-