Настройка прав доступа к сервисному аккаунту
Этот раздел про назначение роли на сервисный аккаунт как на ресурс. Чтобы выдать роль сервисному аккаунту на другой ресурс, воспользуйтесь инструкцией Назначение роли сервисному аккаунту.
Через консоль управления нельзя установить права доступа к сервисному аккаунту. Вы можете назначить роль на каталог, которому принадлежит сервисный аккаунт.
Назначить роль на сервисный аккаунт
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
-
Посмотрите описание команды для назначения роли на сервисный аккаунт как на ресурс:
$ yc iam service-account add-access-binding --help
-
Выберите сервисный аккаунт, например
my-robot
:$ yc iam service-account list +----------------------+----------+------------------+ | ID | NAME | DESCRIPTION | +----------------------+----------+------------------+ | ajebqtreob2dpblin8pe | test-sa | test-description | | aje6o61dvog2h6g9a33s | my-robot | | +----------------------+----------+------------------+
-
Выберите роль:
$ yc iam role list +--------------------------------+-------------+ | ID | DESCRIPTION | +--------------------------------+-------------+ | admin | | | compute.images.user | | | editor | | | ... | | +--------------------------------+-------------+
-
Узнайте ID пользователя по логину или адресу электронной почты. Чтобы назначить роль не пользователю, а сервисному аккаунту или группе пользователей, воспользуйтесь примерами ниже.
$ yc iam user-account get test-user id: gfei8n54hmfhuk5nogse yandex_passport_user_account: login: test-user default_email: test-user@yandex.ru
-
Назначьте пользователю
test-user
рольeditor
на сервисный аккаунтmy-robot
. В субъекте укажите типuserAccount
и ID пользователя:$ yc iam service-account add-access-binding my-robot \ --role editor \ --subject userAccount:gfei8n54hmfhuk5nogse
Воспользуйтесь методом updateAccessBindings для ресурса ServiceAccount. Вам понадобится ID сервисного аккаунта и ID пользователя, которому назначается роль на сервисный аккаунт.
-
Узнайте ID сервисного аккаунта с помощью метода list:
$ curl -H "Authorization: Bearer <IAM-TOKEN>" \ https://iam.api.cloud.yandex.net/iam/v1/serviceAccounts?folderId=b1gvmob95yysaplct532 { "serviceAccounts": [ { "id": "aje6o61dvog2h6g9a33s", "folderId": "b1gvmob95yysaplct532", "createdAt": "2018-10-19T13:26:29Z", "name": "my-robot" } ... ] }
-
Узнайте ID пользователя по логину с помощью метода getByLogin:
$ curl -H "Authorization: Bearer <IAM-TOKEN>" \ https://iam.api.cloud.yandex.net/iam/v1/yandexPassportUserAccounts:byLogin?login=test-user { "id": "gfei8n54hmfhuk5nogse", "yandexPassportUserAccount": { "login": "test-user", "defaultEmail": "test-user@yandex.ru" } }
-
Назначьте пользователю роль
editor
на сервисный аккаунтmy-robot
. В свойствеaction
укажитеADD
, а в свойствеsubject
- типuserAccount
и ID пользователя:$ curl -X POST \ -H 'Content-Type: application/json' \ -H "Authorization: Bearer <IAM-TOKEN>" \ -d '{ "accessBindingDeltas": [{ "action": "ADD", "accessBinding": { "roleId": "editor", "subject": { "id": "gfei8n54hmfhuk5nogse", "type": "userAccount" }}}]}' \ https://iam.api.cloud.yandex.net/iam/v1/serviceAccounts/aje6o61dvog2h6g9a33s:updateAccessBindings
Примеры
- Назначить несколько ролей
- Доступ сервисного аккаунта к другому сервисному аккаунту
- Доступ к ресурсу всем пользователям
Назначить несколько ролей
Команда add-access-binding
позволяет добавить только одну роль. Вы можете назначить несколько ролей с помощью команды set-access-binding
.
Внимание
Команда set-access-binding
полностью перезаписывает права доступа к ресурсу! Все текущие роли на ресурс будут удалены.
- Убедитесь, что на ресурс не назначено ролей, которые вы не хотите потерять:
$ yc iam service-account list-access-bindings my-robot
- Например, назначьте роль нескольким пользователям:
$ yc iam service-account set-access-bindings my-robot \ --access-binding role=editor,subject=userAccount:gfei8n54hmfhuk5nogse --access-binding role=viewer,subject=userAccount:helj89sfj80aj24nugsz
Назначьте одному пользователю роль editor
, а другому viewer
:
$ curl -X POST \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer <IAM-TOKEN>" \
-d '{
"accessBindingDeltas": [{
"action": "ADD",
"accessBinding": {
"roleId": "editor",
"subject": {
"id": "gfei8n54hmfhuk5nogse",
"type": "userAccount"
}
}
},{
"action": "ADD",
"accessBinding": {
"roleId": "viewer",
"subject": {
"id": "helj89sfj80aj24nugsz",
"type": "userAccount"
}}}]}' \
https://iam.api.cloud.yandex.net/iam/v1/serviceAccounts/aje6o61dvog2h6g9a33s:updateAccessBindings
Вы также можете назначать роли с помощью метода setAccessBindings.
Внимание
Метод setAccessBindings
полностью перезаписывает права доступа к ресурсу! Все текущие роли на ресурс будут удалены.
curl -X POST \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer <IAM-TOKEN>" \
-d '{
"accessBindings": [{
"roleId": "editor",
"subject": { "id": "ajei8n54hmfhuk5nog0g", "type": "userAccount" }
},{
"roleId": "viewer",
"subject": { "id": "helj89sfj80aj24nugsz", "type": "userAccount" }
}]}' \
https://iam.api.cloud.yandex.net/iam/v1/serviceAccounts/aje6o61dvog2h6g9a33s:setAccessBindings
Доступ сервисного аккаунта к другому сервисному аккаунту
Разрешите сервисному аккаунту test-sa
управлять сервисным аккаунтом my-robot
:
-
Узнайте ID сервисного аккаунта
test-sa
, которому вы хотите назначить роль. Чтобы узнать ID, получите список доступных сервисных аккаунтов:$ yc iam service-account list +----------------------+----------+------------------+ | ID | NAME | DESCRIPTION | +----------------------+----------+------------------+ | ajebqtreob2dpblin8pe | test-sa | test-description | | aje6o61dvog2h6g9a33s | my-robot | | +----------------------+----------+------------------+
-
Назначьте роль
editor
сервисному аккаунтуtest-sa
, указав его ID. В типе субъекта укажитеserviceAccount
:$ yc iam service-account add-access-binding my-robot \ --role editor \ --subject serviceAccount:ajebqtreob2dpblin8pe
-
Узнайте ID сервисного аккаунта
test-sa
, которому вы хотите назначить роль. Чтобы узнать ID, получите список доступных сервисных аккаунтов:$ curl -H "Authorization: Bearer <IAM-TOKEN>" \ https://iam.api.cloud.yandex.net/iam/v1/serviceAccounts?folderId=b1gvmob95yysaplct532 { "serviceAccounts": [ { "id": "ajebqtreob2dpblin8pe", "folderId": "b1gvmob95yysaplct532", "createdAt": "2018-10-18T13:42:40Z", "name": "test-sa", "description": "test-description" }, { "id": "aje6o61dvog2h6g9a33s", "folderId": "b1gvmob95yysaplct532", "createdAt": "2018-10-15T18:01:25Z", "name": "my-robot" } ] }
-
Назначьте сервисному аккаунту
test-sa
рольeditor
на другой сервисный аккаунтmy-robot
. В свойствеsubject
укажите типserviceAccount
и IDtest-sa
. В URL запроса в качестве ресурса укажите IDmy-robot
:
$ curl -X POST \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer <IAM-TOKEN>" \
-d '{
"accessBindingDeltas": [{
"action": "ADD",
"accessBinding": {
"roleId": "editor",
"subject": {
"id": "ajebqtreob2dpblin8pe",
"type": "serviceAccount"
}}}]}' \
https://iam.api.cloud.yandex.net/iam/v1/serviceAccounts/aje6o61dvog2h6g9a33s:updateAccessBindings
Доступ к ресурсу всем пользователям
Вы можете предоставить публичный доступ к ресурсу. Для этого назначьте роль системной группе allAuthenticatedUsers
или allUsers
.
Системной группе можно назначить любые роли, кроме resource-manager.clouds.owner
и resource-manager.clouds.member
.
Внимание
Не назначайте системной группе роли editor
и admin
на каталог или облако. Это позволит любому, кто узнает идентификатор каталога, пользоваться ресурсами Yandex.Cloud за ваш счет.
Например, разрешите любому прошедшему аутентификацию пользователю просматривать информацию о сервисном аккаунте my-robot
:
Назначьте роль viewer
системной группе allAuthenticatedUsers
. В типе субъекта укажите system
:
$ yc iam service-account add-access-binding my-robot \
--role viewer \
--subject system:allAuthenticatedUsers
Назначьте роль viewer
системной группе allAuthenticatedUsers
. В свойстве subject
укажите тип system
:
$ curl -X POST \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer <IAM-TOKEN>" \
-d '{
"accessBindingDeltas": [{
"action": "ADD",
"accessBinding": {
"roleId": "viewer",
"subject": {
"id": "allAuthenticatedUsers",
"type": "system"
}}}]}' \
https://iam.api.cloud.yandex.net/iam/v1/serviceAccounts/aje6o61dvog2h6g9a33s:updateAccessBindings