Назначение роли
Чтобы предоставить доступ к ресурсу, назначьте субъекту роль на сам ресурс или ресурс, от которого наследуются права доступа, например на каталог или облако. Подробнее читайте в разделе Как устроено управление доступом в Yandex Cloud.
Назначить роль пользователю
В этом разделе описывается, как назначить роль пользователю с аккаунтом на Яндексе. В примерах ниже описано, как назначить роль сервисному аккаунту, пользователю федерации или всем пользователям сразу.
В консоли управления можно назначить роль только на облако или каталог:
- Добавьте пользователя в облако через Консоль управления или Yandex Cloud Organization.
- Назначьте пользователю роль в облаке:
- Выберите облако.
- Перейдите на вкладку Права доступа.
- Установите переключатель Наследуемые роли в активное состояние, чтобы в списке отобразились пользователи, добавленные в организацию.
- Выберите пользователя в списке и нажмите значок напротив имени пользователя.
- Нажмите кнопку Изменить роли.
- В окне Настройка прав доступа облака нажмите кнопку Добавить роль.
- Выберите роль в облаке.
- Нажмите кнопку Сохранить.
- Назначьте пользователю роль в каталоге:
- Откройте страницу каталога. Вы можете выбрать каталог на стартовой странице консоли управления. На этой странице отображаются каталоги для выбранного облака.
- Перейдите в раздел Права доступа в каталоге (кнопка Права доступа на панели слева).
- Нажмите кнопку Назначить роли.
- В окне Настройка прав доступа каталога нажмите кнопку Добавить пользователя.
- Выберите пользователя из списка или воспользуйтесь поиском по пользователям.
- Нажмите кнопку Добавить роль.
- Выберите роль в каталоге.
- Нажмите Сохранить.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
-
Выберите роль из списка в разделе Роли.
-
Назначьте роль с помощью команды:
yc <service-name> <resource> add-access-binding <resource-name>|<resource-id> \ --role <role-id> \ --subject userAccount:<user-account-id>
Где:
<service-name>
— имя сервиса, на чей ресурс назначается роль, напримерresource-manager
.<resource>
— категория ресурса, напримерcloud
.<resource-name>
— имя ресурса. Вы можете указать ресурс по имени или идентификатору.<resource-id>
— идентификатор ресурса.<role-id>
— идентификатор роли, напримерresource-manager.clouds.owner
.<user-account-id>
— идентификатор аккаунта пользователя, которому назначается роль.
Например, назначьте роль
viewer
на облакоmycloud
:yc resource-manager cloud add-access-binding mycloud \ --role viewer \ --subject userAccount:aje6o61dvog2h6g9a33s
yc resource-manager cloud add-access-binding mycloud \ --role viewer \ --subject federatedUser:aje6o61dvog2h6g9a33s
Воспользуйтесь методом updateAccessBindings
для соответствующего ресурса.
-
Выберите роль из списка в разделе Роли.
-
Сформируйте тело запроса, например в файле
body.json
. В свойствеaction
укажитеADD
, а в свойствеsubject
- типuserAccount
и идентификатор пользователя:body.json:
{ "accessBindingDeltas": [{ "action": "ADD", "accessBinding": { "roleId": "editor", "subject": { "id": "gfei8n54hmfhuk5nogse", "type": "userAccount" } } } ] }
-
Назначьте роль, например на каталог с идентификатором
b1gvmob95yysaplct532
:export FOLDER_ID=b1gvmob95yysaplct532 export IAM_TOKEN=CggaATEVAgA... curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer ${IAM_TOKEN}" \ -d '@body.json' \ "https://resource-manager.api.cloud.yandex.net/resource-manager/v1/folders/${FOLDER_ID}:updateAccessBindings"
Вы можете ознакомиться с подробной инструкцией назначения роли для соответствующего ресурса:
Если у вас ещё нет Terraform, установите его и настройте провайдер Yandex Cloud.
-
Добавьте в конфигурационный файл параметры ресурса, укажите нужную роль и перечень пользователей облака:
cloud_id
— идентификатор облака. Вы также можете назначить роль внутри отдельного каталога. Для этого вместоcloud_id
укажитеfolder_id
и нужный идентификатор каталога в параметрах ресурса.role
— назначаемая роль. Обязательный параметр.members
— список пользователей и сервисных аккаунтов, которым назначается роль. Указывается в видеuserAccount:<идентификатор пользователя>
илиserviceAccount:<идентификатор сервисного аккаунта>
. Обязательный параметр.
resource "yandex_resourcemanager_cloud_iam_binding" "admin" { cloud_id = "<идентификатор облака>" role = "<роль>" members = [ "serviceAccount:<идентификатор сервисного аккаунта>", "userAccount:<идентификатор пользователя>", ] }
Более подробную информацию о параметрах ресурса
yandex_resourcemanager_cloud_iam_binding
, см. в документации провайдера. -
Проверьте корректность конфигурационных файлов.
-
В командной строке перейдите в папку, где вы создали конфигурационный файл.
-
Выполните проверку с помощью команды:
terraform plan
Если конфигурация описана верно, в терминале отобразится список создаваемых ресурсов и их параметров. Если в конфигурации есть ошибки, Terraform на них укажет.
-
-
Разверните облачные ресурсы.
-
Если в конфигурации нет ошибок, выполните команду:
terraform apply
-
Подтвердите создание ресурсов: введите в терминал слово
yes
и нажмите Enter.
После этого в указанном каталоге будут созданы все требуемые ресурсы. Проверить создание ресурса можно в консоли управления или с помощью команды CLI:
yc resource-manager folder list-access-bindings <имя каталога>|<идентификатор каталога>
-
Примеры
- Назначить несколько ролей
- Доступ к ресурсу для сервисного аккаунта
- Доступ к ресурсу для федеративного пользователя
- Доступ к ресурсу всем пользователям
Назначить несколько ролей
Воспользуйтесь инструкцией в начале раздела и назначьте пользователю несколько ролей.
Чтобы назначить роль другому пользователю, выполните заново все шаги инструкции.
Команда add-access-binding
позволяет добавить только одну роль. Вы можете назначить несколько ролей с помощью команды set-access-binding
.
Внимание
Команда set-access-binding
полностью перезаписывает права доступа к ресурсу! Все текущие роли на ресурс будут удалены.
Например, чтобы назначить несколько ролей на каталог:
-
Убедитесь, что на ресурс не назначено ролей, которые вы не хотите потерять:
yc resource-manager folder list-access-binding my-folder
-
Назначьте роли. Например, назначьте одному пользователю роль
editor
, а другомуviewer
:yc resource-manager folder set-access-bindings my-folder \ --access-binding role=editor,subject=userAccount:gfei8n54hmfhuk5nogse --access-binding role=viewer,subject=userAccount:helj89sfj80aj24nugsz
-
Чтобы назначить одному пользователю роль
editor
, а другомуviewer
, в файл с телом запроса добавьте несколько привязок прав доступа вaccessBindingDeltas
.body.json:
{ "accessBindingDeltas": [{ "action": "ADD", "accessBinding": { "roleId": "editor", "subject": { "id": "gfei8n54hmfhuk5nogse", "type": "userAccount" } } },{ "action": "ADD", "accessBinding": { "roleId": "viewer", "subject": { "id": "helj89sfj80aj24nugsz", "type": "userAccount" } } }] }
-
Назначьте указанные роли, например на каталог с идентификатором
b1gvmob95yysaplct532
:export FOLDER_ID=b1gvmob95yysaplct532 export IAM_TOKEN=CggaATEVAgA... curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer ${IAM_TOKEN}" \ -d '@body.json' \ "https://resource-manager.api.cloud.yandex.net/resource-manager/v1/folders/${FOLDER_ID}:updateAccessBindings"
Вы также можете назначать роли с помощью метода setAccessBindings
.
Внимание
Метод setAccessBindings
полностью перезаписывает права доступа к ресурсу! Все текущие роли на ресурс будут удалены.
-
В теле запроса укажите список новых привязок прав доступа.
body.json:
{ "accessBindings": [{ "roleId": "editor", "subject": { "id": "ajei8n54hmfhuk5nog0g", "type": "userAccount" } },{ "roleId": "viewer", "subject": { "id": "helj89sfj80aj24nugsz", "type": "userAccount" } }] }
-
Назначьте роли:
export FOLDER_ID=b1gvmob95yysaplct532 export IAM_TOKEN=CggaATEVAgA... curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer ${IAM_TOKEN}" \ -d '@body.json' \ "https://resource-manager.api.cloud.yandex.net/resource-manager/v1/folders/${FOLDER_ID}:setAccessBindings"
Доступ к ресурсу для сервисного аккаунта
Сервисному аккаунту можно назначать роли только на ресурсы облака, которому принадлежит каталог сервисного аккаунта.
Через консоль управления сервисному аккаунту можно назначить роль только на каталоги, которые находятся в том же облаке, что и каталог, в котором был создан сервисный аккаунт. Чтобы назначить ему роль на другой ресурс, используйте CLI или API.
Чтобы назначить сервисному аккаунту роль на каталог:
- В консоли управления откройте страницу каталога, на который будет назначена роль.
- Перейдите в раздел Права доступа в каталоге (кнопка Права доступа на панели слева).
- Установите переключатель Наследуемые роли в активное состояние, чтобы в списке отобразились сервисные аккаунты, которые не принадлежат текущему каталогу.
- Нажмите значок напротив имени сервисного аккаунта.
- Нажмите кнопку Изменить роли.
- Нажмите кнопку Добавить роль и выберите роль, которую хотите добавить.
- Нажмите кнопку Сохранить.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы назначить сервисному аккаунту роль на ресурс, выполните команду:
yc <service-name> <resource> add-access-binding <resource-name>|<resource-id> \
--role <role-id> \
--subject serviceAccount:<service-account-id>
Где:
<service-name>
— имя сервиса, на чей ресурс назначается роль, напримерresource-manager
.<resource>
— категория ресурса, напримерcloud
.<resource-name>
— имя ресурса. Вы можете указать ресурс по имени или идентификатору.<resource-id>
— идентификатор ресурса.<role-id>
— идентификатор роли, напримерresource-manager.clouds.owner
.<service-account-id>
— идентификатор сервисного аккаунта, которому назначается роль.
Например, чтобы назначить сервисному аккаунту роль viewer
на каталог my-folder
:
-
Узнайте идентификатор сервисного аккаунта по его имени:
yc iam service-account get my-robot
Результат:
id: aje6o61dvog2h6g9a33s folder_id: b1gvmob95yysaplct532 created_at: "2018-10-15T18:01:25Z" name: my-robot
Если вы не знаете имя сервисного аккаунта, получите список сервисных аккаунтов с их идентификаторами:
yc iam service-account list
Результат:
+----------------------+------------------+-----------------+ | ID | NAME | DESCRIPTION | +----------------------+------------------+-----------------+ | aje6o61dvog2h6g9a33s | my-robot | my description | +----------------------+------------------+-----------------+
-
Назначьте роль сервисному аккаунту
my-robot
, используя его идентификатор:yc resource-manager folder add-access-binding my-folder \ --role viewer \ --subject serviceAccount:aje6o61dvog2h6g9a33s
-
Узнайте ID каталога с сервисными аккаунтами.
-
Получите список сервисных аккаунтов в каталоге, чтобы узнать их идентификаторы:
export FOLDER_ID=b1gvmob95yysaplct532 export IAM_TOKEN=CggaATEVAgA... curl -H "Authorization: Bearer ${IAM_TOKEN}" \ "https://iam.api.cloud.yandex.net/iam/v1/serviceAccounts?folderId=${FOLDER_ID}"
Результат:
{ "serviceAccounts": [ { "id": "ajebqtreob2dpblin8pe", "folderId": "b1gvmob95yysaplct532", "createdAt": "2018-10-18T13:42:40Z", "name": "my-robot", "description": "my description" } ] }
-
Сформируйте тело запроса, например в файле
body.json
. В свойствеaction
укажитеADD
, а в свойствеsubject
- типserviceAccount
и ID сервисного аккаунта:body.json:
{ "accessBindingDeltas": [{ "action": "ADD", "accessBinding": { "roleId": "editor", "subject": { "id": "ajebqtreob2dpblin8pe", "type": "serviceAccount" } } } ] }
-
Назначьте роль, например на каталог с идентификатором
b1gvmob95yysaplct532
:export FOLDER_ID=b1gvmob95yysaplct532 export IAM_TOKEN=CggaATEVAgA... curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer ${IAM_TOKEN}" \ -d '@body.json' \ "https://resource-manager.api.cloud.yandex.net/resource-manager/v1/folders/${FOLDER_ID}:updateAccessBindings"
Если у вас ещё нет Terraform, установите его и настройте провайдер Yandex Cloud.
-
Опишите в конфигурационном файле параметры ресурсов, которые необходимо создать:
folder_id
— идентификатор каталога. Обязательный параметр.role
— назначаемая роль. Обязательный параметр.members
— список пользователей и сервисных аккаунтов, которым назначается роль. Указывается в видеuserAccount:<идентификатор пользователя>
илиserviceAccount:<идентификатор сервисного аккаунта>
. Обязательный параметр.
resource "yandex_resourcemanager_folder_iam_binding" "admin-account-iam" { folder_id = "<идентификатор каталога>" role = "<роль>" members = [ "serviceAccount:<идентификатор сервисного аккаунта>", ] }
Более подробную информацию о параметрах ресурса
yandex_resourcemanager_folder_iam_binding
, см. в документации провайдера. -
Проверьте корректность конфигурационных файлов.
-
В командной строке перейдите в папку, где вы создали конфигурационный файл.
-
Выполните проверку с помощью команды:
terraform plan
Если конфигурация описана верно, в терминале отобразится список создаваемых ресурсов и их параметров. Если в конфигурации есть ошибки, Terraform на них укажет.
-
-
Разверните облачные ресурсы.
-
Если в конфигурации нет ошибок, выполните команду:
terraform apply
-
Подтвердите создание ресурсов: введите в терминал слово
yes
и нажмите Enter.
После этого в указанном каталоге будут созданы все требуемые ресурсы. Проверить создание ресурса можно в консоли управления или с помощью команды CLI:
yc resource-manager folder list-access-bindings <имя каталога>|<идентификатор каталога>
-
Доступ к ресурсу для федеративного пользователя
Федеративному пользователю можно назначать роли только на ресурсы облака, которому принадлежит федерация.
В консоли управления федеративному пользователю можно назначить роль на отдельное облако или каталог.
Назначение роли происходит так же, как назначение роли пользователю с аккаунтом на Яндексе. Рядом с именем пользователя будет указано имя федерации, к которой он относится.
В консоли управления можно назначить роль только на облако или каталог:
- Назначьте пользователю роль в облаке:
- Выберите облако.
- Перейдите на вкладку Права доступа.
- Выберите пользователя в списке и нажмите значок напротив имени пользователя.
- Нажмите кнопку Изменить роли.
- В окне Настройка прав доступа облака нажмите кнопку Добавить роль.
- Выберите роль в облаке.
- Нажмите кнопку Сохранить.
- Назначьте пользователю роль в каталоге:
- Откройте страницу каталога. Вы можете выбрать каталог на стартовой странице консоли управления. На этой странице отображаются каталоги для выбранного облака.
- Перейдите в раздел Права доступа в каталоге (кнопка Права доступа на панели слева).
- Нажмите кнопку Назначить роли.
- В окне Настройка прав доступа каталога нажмите кнопку Добавить пользователя.
- Выберите пользователя из списка или воспользуйтесь поиском по пользователям.
- Нажмите кнопку Добавить роль.
- Выберите роль в каталоге.
- Нажмите Сохранить.
Доступ к ресурсу всем пользователям
Вы можете предоставить публичный доступ к ресурсу. Для этого назначьте роль системной группе allAuthenticatedUsers
или allUsers
.
Системной группе можно назначить любые роли, кроме resource-manager.clouds.owner
и resource-manager.clouds.member
.
Внимание
Не назначайте системной группе роли editor
и admin
на каталог или облако. Это позволит любому, кто узнает идентификатор каталога, пользоваться ресурсами Yandex Cloud за ваш счет.
Например, разрешите любому прошедшему аутентификацию пользователю просматривать информацию о каталоге и ресурсах в нем:
- Откройте страницу каталога. Вы можете выбрать каталог на стартовой странице консоли управления. На этой странице отображаются каталоги для выбранного облака.
- Перейдите в раздел Права доступа в каталоге (кнопка Права доступа на панели слева).
- Нажмите кнопку Назначить роли.
- В окне Настройка прав доступа каталога нажмите кнопку Выбрать пользователя.
- Выберите раздел Группы.
- Выберите группу All authenticated users.
- Нажмите кнопку Добавить роль.
- Выберите роль в каталоге.
- Нажмите Сохранить.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
Назначьте роль viewer
на каталог my-folder
. В качестве субъекта укажите тип system
и идентификатор allAuthenticatedUsers
:
yc resource-manager folder add-access-binding my-folder \
--role viewer \
--subject system:allAuthenticatedUsers
-
Сформируйте тело запроса, например в файле
body.json
. ВroleId
назначьте рольviewer
. В свойствеsubject
укажите типsystem
и идентификаторallAuthenticatedUsers
:body.json:
{ "accessBindingDeltas": [{ "action": "ADD", "accessBinding": { "roleId": "viewer", "subject": { "id": "allAuthenticatedUsers", "type": "system" } } }] }
-
Назначьте роль, например на каталог с идентификатором
b1gvmob95yysaplct532
:export FOLDER_ID=b1gvmob95yysaplct532 export IAM_TOKEN=CggaATEVAgA... curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer ${IAM_TOKEN}" \ -d '@body.json' \ "https://resource-manager.api.cloud.yandex.net/resource-manager/v1/folders/${FOLDER_ID}:updateAccessBindings"
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
Внимание
Не создавайте ресурс совместно с ресурсом yandex_resourcemanager_folder_iam_policy
. Они будут конфликтовать.
Чтобы назначить роль на каталог, созданный с помощью Terraform:
-
Опишите в конфигурационном файле параметры роли каталога:
-
folder_id
— идентификатор каталога, на который назначаются права. Обязательный параметр. -
role
— назначаемая роль. Обязательный параметр.Примечание
Для каждой роли можно использовать только один ресурс
yandex_resourcemanager_folder_iam_binding
. -
members
— список пользователей, которым будет присвоена роль. Чтобы добавить всех пользователей, создайте запись в форматеsystem:<allUsers|allAuthenticatedUsers>
, где<allUsers|allAuthenticatedUsers>
— одна из системных групп. Обязательный параметр.
Пример назначения роли на каталог с помощью Terraform... data "yandex_resourcemanager_folder" "project1" { folder_id = "<идентификатор каталога>" } resource "yandex_resourcemanager_folder_iam_binding" "viewer" { folder_id = "${data.yandex_resourcemanager_folder_iam_member.project1.id}" role = "viewer" members = [ "system:allUsers", ] } ...
Более подробную информацию о параметрах ресурса
yandex_resourcemanager_folder_iam_binding
в Terraform, см. в документации провайдера. -
-
Проверьте конфигурацию командой:
terraform validate
Если конфигурация является корректной, появится сообщение:
Success! The configuration is valid.
-
Выполните команду:
terraform plan
В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply
-
Подтвердите изменения: введите в терминал слово
yes
и нажмите Enter.Проверить изменение каталога можно в консоли управления или с помощью команды CLI:
yc resource-manager folder list-access-bindings <имя каталога>|<ID каталога>