Назначение роли сервисному аккаунту
Этот раздел про назначение роли сервисному аккаунту на какой либо ресурс. Чтобы назначить другому пользователю роль на сервисный аккаунт как на ресурс, воспользуйтесь инструкцией Настройка прав доступа к сервисному аккаунту.
Сервисному аккаунту можно назначать роли только на ресурсы облака, которому принадлежит сервисный аккаунт.
Через консоль управления сервисному аккаунту можно назначить роль только на каталог, в котором он был создан. Чтобы назначить ему роль на другой ресурс, используйте CLI или API.
Чтобы назначить сервисному аккаунту роль на каталог, в котором он был создан:
- Выберите каталог.
- Выберите вкладку Сервисные аккаунты.
- Нажмите значок напротив сервисного аккаунта и выберите Редактировать сервисный аккаунт.
- Нажмите Добавить роль и выберите роль.
- Нажмите кнопку Сохранить.
По умолчанию используется каталог, указанный в профиле 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"