Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex Identity and Access Management
    • Все инструкции
    • Обработка секретов, попавших в открытый доступ
      • Создание сервисного аккаунта
      • Изменение сервисного аккаунта
      • Назначение роли сервисному аккаунту
      • Настройка прав доступа к сервисному аккаунту
      • Получение информации о сервисном аккаунте
      • Получение ID-токена сервисного аккаунта
      • Удаление сервисного аккаунта
  • Безопасное использование Yandex Cloud
  • Управление доступом
  • Правила тарификации
  • Справочник ролей
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • История изменений
  • Обучающие курсы

В этой статье:

  • Назначить роль на сервисный аккаунт
  • Примеры
  • Назначить несколько ролей
  • Настроить имперсонацию
  • Настроить доступ сервисного аккаунта к другому сервисному аккаунту
  1. Пошаговые инструкции
  2. Сервисные аккаунты
  3. Настройка прав доступа к сервисному аккаунту

Настройка прав доступа к сервисному аккаунту

Статья создана
Yandex Cloud
Улучшена
mmerihsesh
Обновлена 21 апреля 2025 г.
  • Назначить роль на сервисный аккаунт
  • Примеры
    • Назначить несколько ролей
    • Настроить имперсонацию
    • Настроить доступ сервисного аккаунта к другому сервисному аккаунту

Этот раздел про назначение роли на сервисный аккаунт как на ресурс. Чтобы выдать роль сервисному аккаунту на другой ресурс, воспользуйтесь инструкцией Назначение роли сервисному аккаунту.

Примечание

Чтобы назначить роль на сервисный аккаунт, нужна роль iam.serviceAccounts.admin.

Назначить роль на сервисный аккаунтНазначить роль на сервисный аккаунт

Консоль управления
CLI
Terraform
API
  1. В консоли управления перейдите в каталог, которому принадлежит сервисный аккаунт.
  2. В списке сервисов выберите Identity and Access Management.
  3. На панели слева выберите Сервисные аккаунты и выберите нужный сервисный аккаунт.
  4. Перейдите на вкладку Права доступа.
  5. Нажмите кнопку Назначить роли.
  6. В окне Настройка прав доступа нажмите кнопку Выбрать пользователя.
  7. Выберите пользователя из списка или воспользуйтесь поиском по пользователям.
  8. Нажмите кнопку Добавить роль.
  9. Выберите роль.
  10. Нажмите кнопку Сохранить.

Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.

По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.

  1. Посмотрите описание команды для назначения роли на сервисный аккаунт как на ресурс:

    yc iam service-account add-access-binding --help
    
  2. Выберите сервисный аккаунт, например my-robot:

    yc iam service-account list
    

    Результат:

    +----------------------+----------+------------------+
    |          ID          |   NAME   |   DESCRIPTION    |
    +----------------------+----------+------------------+
    | ajebqtreob2d******** | test-sa  | test-description |
    | aje6o61dvog2******** | my-robot |                  |
    +----------------------+----------+------------------+
    
  3. Выберите роль:

    yc iam role list
    

    Результат:

    +--------------------------------+-------------+
    |               ID               | DESCRIPTION |
    +--------------------------------+-------------+
    | admin                          |             |
    | compute.images.user            |             |
    | editor                         |             |
    | ...                            |             |
    +--------------------------------+-------------+
    
  4. Узнайте ID пользователя по логину или адресу электронной почты. Чтобы назначить роль не пользователю, а сервисному аккаунту или группе пользователей, воспользуйтесь примерами ниже.

    yc iam user-account get test-user
    

    Результат:

    id: gfei8n54hmfh********
    yandex_passport_user_account:
        login: test-user
        default_email: test-user@yandex.ru
    
  5. Назначьте пользователю test-user роль editor на сервисный аккаунт my-robot. В субъекте укажите тип userAccount и ID пользователя:

    yc iam service-account add-access-binding my-robot \
      --role editor \
      --subject userAccount:gfei8n54hmfh********
    

Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.

  1. Добавьте в конфигурационный файл параметры ресурса и укажите роль пользователей для доступа к сервисному аккаунту:

    • service_account_id — идентификатор сервисного аккаунта, к которому нужно настроить доступ.
    • role — назначаемая роль. Обязательный параметр.
    • members — список пользователей и сервисных аккаунтов, которым назначается роль. Указывается в виде userAccount:<идентификатор_пользователя> или serviceAccount:<идентификатор_сервисного_аккаунта>. Обязательный параметр.

    Пример структуры конфигурационного файла:

    resource "yandex_iam_service_account_iam_binding" "admin-account-iam" {
      service_account_id = "<идентификатор_сервисного_аккаунта>"
      role               = "<роль>"
      members            = [
        "federatedUser:<идентификатор_пользователя>",
      ]
    }
    

    Более подробную информацию о ресурсах, которые вы можете создать с помощью Terraform, см. в документации провайдера.

  2. Проверьте корректность конфигурационных файлов.

    1. В командной строке перейдите в папку, где вы создали конфигурационный файл.

    2. Выполните проверку с помощью команды:

      terraform plan
      

    Если конфигурация описана верно, в терминале отобразится список создаваемых ресурсов и их параметров. Если в конфигурации есть ошибки, Terraform на них укажет.

  3. Разверните облачные ресурсы.

    1. Если в конфигурации нет ошибок, выполните команду:

      terraform apply
      
    2. Подтвердите создание ресурсов: введите в терминал слово yes и нажмите Enter.

    После этого в указанном каталоге будут созданы все требуемые ресурсы. Проверить создание ресурса можно в консоли управления или с помощью команды CLI:

    yc resource-manager service-account list-access-bindings <имя_или_идентификатор_сервисного_аккаунта>
    

Воспользуйтесь методом REST API updateAccessBindings для ресурса ServiceAccount или вызовом gRPC API ServiceAccountService/UpdateAccessBindings. Вам понадобится ID сервисного аккаунта и ID пользователя, которому назначается роль на сервисный аккаунт.

  1. Узнайте ID сервисного аккаунта с помощью метода REST API list:

    curl \
      --header "Authorization: Bearer <IAM-токен>" \
      https://iam.api.cloud.yandex.net/iam/v1/serviceAccounts?folderId=b1gvmob95yys********
    

    Результат:

    {
    "serviceAccounts": [
        {
        "id": "aje6o61dvog2********",
        "folderId": "b1gvmob95yys********",
        "createdAt": "2018-10-19T13:26:29Z",
        "name": "my-robot"
        }
        ...
    ]
    }
    
  2. Узнайте ID пользователя по логину с помощью метода 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"
    }
    }
    
  3. Назначьте пользователю роль 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.cloud.yandex.net/iam/v1/serviceAccounts/aje6o61dvog2********:updateAccessBindings
    

ПримерыПримеры

  • Назначить несколько ролей.
  • Настроить имперсонацию.
  • Настроить доступ сервисного аккаунта к другому сервисному аккаунту.

Назначить несколько ролейНазначить несколько ролей

CLI
Terraform
API

Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.

Команда add-access-binding позволяет добавить только одну роль. Вы можете назначить несколько ролей с помощью команды set-access-binding.

Внимание

Команда set-access-binding полностью перезаписывает права доступа к ресурсу! Все текущие роли на ресурс будут удалены.

  1. Убедитесь, что на ресурс не назначены роли, которые вы не хотите потерять:

    yc iam service-account list-access-bindings my-robot
    
  2. Например, назначьте роль нескольким пользователям:

    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:

  1. Добавьте в конфигурационный файл параметры ресурса и укажите роль пользователей для доступа к сервисному аккаунту:

    • 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, см. в документации провайдера.

  2. Проверьте конфигурацию командой:

    terraform validate
    

    Если конфигурация является корректной, появится сообщение:

    Success! The configuration is valid.
    
  3. Выполните команду:

    terraform plan
    

    В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.

  4. Примените изменения конфигурации:

    terraform apply
    
  5. Подтвердите изменения: введите в терминал слово 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.cloud.yandex.net/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.cloud.yandex.net/iam/v1/serviceAccounts/aje6o61dvog2********:setAccessBindings

Настроить имперсонациюНастроить имперсонацию

Имперсонация позволяет пользователю выполнять действия от имени сервисного аккаунта с помощью флага --impersonate-service-account-id. Для этого у сервисного аккаунта должны быть нужные права, а у пользователя — роль iam.serviceAccounts.tokenCreator.

CLI

Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.

  1. Узнайте ID сервисного аккаунта, например, test-sa, которому вы хотите назначить роль. Чтобы узнать ID, получите список доступных сервисных аккаунтов (в профиле администратора):

    yc iam service-account list
    

    Результат:

    +----------------------+----------+------------------+
    |          ID          |   NAME   |   DESCRIPTION    |
    +----------------------+----------+------------------+
    | ajebqtreob2d******** | test-sa  | test-description |
    | aje6o61dvog2******** | my-robot |                  |
    +----------------------+----------+------------------+
    
  2. Назначьте сервисному аккаунту test-sa роль viewer на каталог my-folder. В типе субъекта укажите serviceAccount, а в значении — ID сервисного аккаунта (в профиле администратора):

    yc resource-manager folder add-access-binding my-folder \
      --role viewer \
      --subject serviceAccount:ajebqtreob2d********
    
  3. Получите ID пользователя и назначьте ему роль iam.serviceAccounts.tokenCreator на сервисный аккаунт test-sa (в профиле администратора):

    yc iam service-account add-access-binding test-sa \
      --role iam.serviceAccounts.tokenCreator \
      --subject userAccount:gfei8n54hmfh********
    
  4. Пользователь может выполнить команду от имени сервисного аккаунта test-sa с помощью флага --impersonate-service-account-id.

    Например, пользователь может получить список виртуальных машин в каталоге my-folder:

    yc compute instance list --folder-name my-folder \
      --impersonate-service-account-id ajebqtreob2d********
    

    Также пользователь может получить IAM-токен сервисного аккаунта test-sa для кратковременного доступа:

    yc iam create-token --impersonate-service-account-id ajebqtreob2d********
    

    Срок действия полученного токена закончится автоматически.

  5. Если доступ больше не нужен пользователю, отзовите роль у сервисного аккаунта (в профиле администратора):

    yc resource-manager folder remove-access-binding my-folder \
      --role viewer \
      --subject serviceAccount:ajebqtreob2d********
    
  6. Отзовите роль iam.serviceAccounts.tokenCreator у пользователя, получавшего права сервисного аккаунта:

    yc iam service-account remove-access-binding test-sa \
      --role iam.serviceAccounts.tokenCreator \
      --subject userAccount:gfei8n54hmfh********
    

Настроить доступ сервисного аккаунта к другому сервисному аккаунтуНастроить доступ сервисного аккаунта к другому сервисному аккаунту

Разрешите сервисному аккаунту test-sa управлять сервисным аккаунтом my-robot:

CLI
Terraform
API

Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.

  1. Узнайте ID сервисного аккаунта test-sa, которому вы хотите назначить роль. Чтобы узнать ID, получите список доступных сервисных аккаунтов:

    yc iam service-account list
    

    Результат:

    +----------------------+----------+------------------+
    |          ID          |   NAME   |   DESCRIPTION    |
    +----------------------+----------+------------------+
    | ajebqtreob2d******** | test-sa  | test-description |
    | aje6o61dvog2******** | my-robot |                  |
    +----------------------+----------+------------------+
    
  2. Назначьте роль 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:

  1. Добавьте в конфигурационный файл параметры ресурса и укажите роль пользователей для доступа к сервисному аккаунту:

    • 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, см. в документации провайдера.

  1. Проверьте конфигурацию командой:

    terraform validate
    

    Если конфигурация является корректной, появится сообщение:

    Success! The configuration is valid.
    
  2. Выполните команду:

    terraform plan
    

    В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.

  3. Примените изменения конфигурации:

    terraform apply
    
  4. Подтвердите изменения: введите в терминал слово yes и нажмите Enter.

    Проверить изменение каталога можно в консоли управления или с помощью команды CLI:

    yc resource-manager service-account list-access-bindings <имя_или_идентификатор_сервисного_аккаунта>
    
  1. Узнайте ID сервисного аккаунта test-sa, которому вы хотите назначить роль. Чтобы узнать ID, получите список доступных сервисных аккаунтов:

    curl \
      --header "Authorization: Bearer <IAM-токен>" \
      https://iam.api.cloud.yandex.net/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"
      }
     ]
    }
    
  2. Назначьте сервисному аккаунту test-sa роль editor на другой сервисный аккаунт my-robot. В свойстве subject укажите тип serviceAccount и ID test-sa. В URL запроса в качестве ресурса укажите ID my-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.cloud.yandex.net/iam/v1/serviceAccounts/aje6o61dvog2********:updateAccessBindings
    

Была ли статья полезна?

Предыдущая
Назначение роли сервисному аккаунту
Следующая
Получение информации о сервисном аккаунте
Проект Яндекса
© 2025 ООО «Яндекс.Облако»