Настройка прав доступа к сервисному аккаунту
Этот раздел про назначение роли на сервисный аккаунт как на ресурс. Чтобы выдать роль сервисному аккаунту на другой ресурс, воспользуйтесь инструкцией Назначение роли сервисному аккаунту.
Примечание
Чтобы назначить роль на сервисный аккаунт, нужна роль iam.serviceAccounts.admin.
Назначить роль на сервисный аккаунт
- В консоли управления
перейдите в каталог, которому принадлежит сервисный аккаунт. - В списке сервисов выберите Identity and Access Management.
- На панели слева выберите
Сервисные аккаунты и выберите нужный сервисный аккаунт. - Перейдите на вкладку Права доступа.
- Нажмите кнопку Назначить роли.
- В окне Настройка прав доступа нажмите кнопку Выбрать пользователя.
- Выберите пользователя из списка или воспользуйтесь поиском по пользователям.
- Нажмите кнопку Добавить роль.
- Выберите роль.
- Нажмите кнопку Сохранить.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.
-
Посмотрите описание команды для назначения роли на сервисный аккаунт как на ресурс:
yc iam service-account add-access-binding --help -
Выберите сервисный аккаунт, например
my-robot:yc iam service-account listРезультат:
+----------------------+----------+------------------+ | ID | NAME | DESCRIPTION | +----------------------+----------+------------------+ | ajebqtreob2d******** | test-sa | test-description | | aje6o61dvog2******** | my-robot | | +----------------------+----------+------------------+ -
Выберите роль:
yc iam role listРезультат:
+--------------------------------+-------------+ | ID | DESCRIPTION | +--------------------------------+-------------+ | admin | | | compute.images.user | | | editor | | | ... | | +--------------------------------+-------------+ -
Узнайте ID пользователя по логину или адресу электронной почты. Чтобы назначить роль не пользователю, а сервисному аккаунту или группе пользователей, воспользуйтесь примерами ниже.
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-robot. В субъекте укажите типuserAccountи ID пользователя:yc iam service-account add-access-binding my-robot \ --role editor \ --subject userAccount:gfei8n54hmfh********
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
-
Добавьте в конфигурационный файл параметры ресурса и укажите роль пользователей для доступа к сервисному аккаунту:
service_account_id— идентификатор сервисного аккаунта, к которому нужно настроить доступ.role— назначаемая роль. Обязательный параметр.members— список пользователей и сервисных аккаунтов, которым назначается роль. Указывается в видеuserAccount:<идентификатор_пользователя>илиserviceAccount:<идентификатор_сервисного_аккаунта>. Обязательный параметр.
Пример структуры конфигурационного файла:
resource "yandex_iam_service_account_iam_binding" "admin-account-iam" { service_account_id = "<идентификатор_сервисного_аккаунта>" role = "<роль>" members = [ "federatedUser:<идентификатор_пользователя>", ] }Более подробную информацию о ресурсах, которые вы можете создать с помощью Terraform, см. в документации провайдера.
-
Проверьте корректность конфигурационных файлов.
-
В командной строке перейдите в папку, где вы создали конфигурационный файл.
-
Выполните проверку с помощью команды:
terraform plan
Если конфигурация описана верно, в терминале отобразится список создаваемых ресурсов и их параметров. Если в конфигурации есть ошибки, Terraform на них укажет.
-
-
Разверните облачные ресурсы.
-
Если в конфигурации нет ошибок, выполните команду:
terraform apply -
Подтвердите создание ресурсов: введите в терминал слово
yesи нажмите Enter.
После этого в указанном каталоге будут созданы все требуемые ресурсы. Проверить создание ресурса можно в консоли управления
или с помощью команды CLI:yc resource-manager service-account list-access-bindings <имя_или_идентификатор_сервисного_аккаунта> -
Воспользуйтесь методом REST API updateAccessBindings для ресурса ServiceAccount или вызовом gRPC API ServiceAccountService/UpdateAccessBindings. Вам понадобится ID сервисного аккаунта и ID пользователя, которому назначается роль на сервисный аккаунт.
-
Узнайте ID сервисного аккаунта с помощью метода REST API list:
curl \ --header "Authorization: Bearer <IAM-токен>" \ https://iam.api.yandexcloud.kz/iam/v1/serviceAccounts?folderId=b1gvmob95yys********Результат:
{ "serviceAccounts": [ { "id": "aje6o61dvog2********", "folderId": "b1gvmob95yys********", "createdAt": "2018-10-19T13:26:29Z", "name": "my-robot" } ... ] } -
Узнайте ID пользователя по логину с помощью метода REST API getByLogin:
curl \ --header "Authorization: Bearer <IAM-токен>" \ https://iam.api.yandexcloud.kz/iam/v1/yandexPassportUserAccounts:byLogin?login=test-userРезультат:
{ "id": "gfei8n54hmfh********", "yandexPassportUserAccount": { "login": "test-user", "defaultEmail": "test-user@yandex.ru" } } -
Назначьте пользователю роль
editorна сервисный аккаунтmy-robot. В свойствеactionукажитеADD, а в свойствеsubject- типuserAccountи ID пользователя:curl \ --request POST \ --header 'Content-Type: application/json' \ --header "Authorization: Bearer <IAM-токен>" \ --data '{ "accessBindingDeltas": [{ "action": "ADD", "accessBinding": { "roleId": "editor", "subject": { "id": "gfei8n54hmfh********", "type": "userAccount" }}}]}' \ https://iam.api.yandexcloud.kz/iam/v1/serviceAccounts/aje6o61dvog2********:updateAccessBindings
Примеры
Назначить несколько ролей
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
Команда 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:gfei8n54hmfh******** \ --access-binding role=viewer,subject=userAccount:helj89sfj80a********
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
Чтобы назначить несколько ролей на сервисный аккаунт, созданный с помощью Terraform:
-
Добавьте в конфигурационный файл параметры ресурса и укажите роль пользователей для доступа к сервисному аккаунту:
service_account_id— идентификатор сервисного аккаунта, к которому нужно настроить доступ.role— назначаемая роль. Обязательный параметр.
Примечание
Для каждой роли можно использовать только один ресурс
yandex_iam_service_account_iam_binding.members— список пользователей и сервисных аккаунтов, которым назначается роль. Указывается в видеuserAccount:<идентификатор_пользователя>илиserviceAccount:<идентификатор_сервисного_аккаунта>. Обязательный параметр.
Пример назначения нескольких ролей на сервисный аккаунт с помощью Terraform
... resource "yandex_iam_service_account_iam_binding" "admin-account-iam" { service_account_id = "aje82upckiqh********" role = "admin" members = [ "userAccount:aje82upckiqh********", ] } resource "yandex_iam_service_account_iam_binding" "admin-account-iam2" { service_account_id = "aje82upckiqh********" role = "viewer" members = [ "userAccount:aje82upckiqh********", ] } ...Более подробную информацию о ресурсах, которые вы можете создать с помощью Terraform, см. в документации провайдера.
-
Проверьте конфигурацию командой:
terraform validateЕсли конфигурация является корректной, появится сообщение:
Success! The configuration is valid. -
Выполните команду:
terraform planВ терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply -
Подтвердите изменения: введите в терминал слово
yesи нажмите Enter.Проверить изменение каталога можно в консоли управления
или с помощью команды CLI:yc resource-manager service-account list-access-bindings <имя_или_идентификатор_сервисного_аккаунта>
Назначьте одному пользователю роль editor, а другому viewer:
curl \
--request POST \
--header 'Content-Type: application/json' \
--header "Authorization: Bearer <IAM-токен>" \
--data '{
"accessBindingDeltas": [{
"action": "ADD",
"accessBinding": {
"roleId": "editor",
"subject": {
"id": "gfei8n54hmfh********",
"type": "userAccount"
}
}
},{
"action": "ADD",
"accessBinding": {
"roleId": "viewer",
"subject": {
"id": "helj89sfj80a********",
"type": "userAccount"
}}}]}' \
https://iam.api.yandexcloud.kz/iam/v1/serviceAccounts/aje6o61dvog2********:updateAccessBindings
Вы также можете назначать роли с помощью метода REST API setAccessBindings для ресурса ServiceAccount или вызовом gRPC API ServiceAccountService/SetAccessBindings.
Внимание
Метод setAccessBindings полностью перезаписывает права доступа к ресурсу! Все текущие роли на ресурс будут удалены.
curl \
--request POST \
--header 'Content-Type: application/json' \
--header "Authorization: Bearer <IAM-токен>" \
--data '{
"accessBindings": [{
"roleId": "editor",
"subject": { "id": "ajei8n54hmfh********", "type": "userAccount" }
},{
"roleId": "viewer",
"subject": { "id": "helj89sfj80a********", "type": "userAccount" }
}]}' \
https://iam.api.yandexcloud.kz/iam/v1/serviceAccounts/aje6o61dvog2********:setAccessBindings
Настроить доступ сервисного аккаунта к другому сервисному аккаунту
Разрешите сервисному аккаунту test-sa управлять сервисным аккаунтом my-robot:
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
-
Узнайте ID сервисного аккаунта
test-sa, которому вы хотите назначить роль. Чтобы узнать ID, получите список доступных сервисных аккаунтов:yc iam service-account listРезультат:
+----------------------+----------+------------------+ | ID | NAME | DESCRIPTION | +----------------------+----------+------------------+ | ajebqtreob2d******** | test-sa | test-description | | aje6o61dvog2******** | my-robot | | +----------------------+----------+------------------+ -
Назначьте роль
editorсервисному аккаунтуtest-sa, указав его ID. В типе субъекта укажитеserviceAccount:yc iam service-account add-access-binding my-robot \ --role editor \ --subject serviceAccount:ajebqtreob2d********
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
Чтобы разрешить сервисному аккаунту test-sa управлять сервисным аккаунтом my-robot, созданным при помощи Terraform:
-
Добавьте в конфигурационный файл параметры ресурса и укажите роль пользователей для доступа к сервисному аккаунту:
service_account_id— идентификатор сервисного аккаунта, к которому нужно настроить доступ.role— назначаемая роль. Обязательный параметр.members— список пользователей и сервисных аккаунтов, которым назначается роль. Указывается в видеuserAccount:<идентификатор_пользователя>илиserviceAccount:<идентификатор_сервисного_аккаунта>. Обязательный параметр.
Пример разрешения сервисному аккаунту test-sa управлять сервисным аккаунтом my-robot с помощью Terraform
...
resource "yandex_iam_service_account_iam_binding" "admin-account-iam" {
service_account_id = "aje82upckiqh********"
role = "admin"
members = [
"serviceAccount:aje82upckiqh********",
]
}
...
Более подробную информацию о ресурсах, которые вы можете создать с помощью Terraform, см. в документации провайдера.
-
Проверьте конфигурацию командой:
terraform validateЕсли конфигурация является корректной, появится сообщение:
Success! The configuration is valid. -
Выполните команду:
terraform planВ терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply -
Подтвердите изменения: введите в терминал слово
yesи нажмите Enter.Проверить изменение каталога можно в консоли управления
или с помощью команды CLI:yc resource-manager service-account list-access-bindings <имя_или_идентификатор_сервисного_аккаунта>
-
Узнайте ID сервисного аккаунта
test-sa, которому вы хотите назначить роль. Чтобы узнать ID, получите список доступных сервисных аккаунтов:curl \ --header "Authorization: Bearer <IAM-токен>" \ https://iam.api.yandexcloud.kz/iam/v1/serviceAccounts?folderId=b1gvmob95yys********Результат:
{ "serviceAccounts": [ { "id": "ajebqtreob2d********", "folderId": "b1gvmob95yys********", "createdAt": "2018-10-18T13:42:40Z", "name": "test-sa", "description": "test-description" }, { "id": "aje6o61dvog2********", "folderId": "b1gvmob95yys********", "createdAt": "2018-10-15T18:01:25Z", "name": "my-robot" } ] } -
Назначьте сервисному аккаунту
test-saрольeditorна другой сервисный аккаунтmy-robot. В свойствеsubjectукажите типserviceAccountи IDtest-sa. В URL запроса в качестве ресурса укажите IDmy-robot:curl \ --request POST \ --header 'Content-Type: application/json' \ --header "Authorization: Bearer <IAM-токен>" \ --data '{ "accessBindingDeltas": [{ "action": "ADD", "accessBinding": { "roleId": "editor", "subject": { "id": "ajebqtreob2d********", "type": "serviceAccount" }}}]}' \ https://iam.api.yandexcloud.kz/iam/v1/serviceAccounts/aje6o61dvog2********:updateAccessBindings