Назначение роли сервисному аккаунту

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

    Через консоль управления сервисному аккаунту можно назначить роль только на каталог, в котором он был создан. Чтобы назначить ему роль на другой ресурс, используйте CLI или API.

    Чтобы назначить сервисному аккаунту роль на каталог, в котором он был создан:

    1. Выберите каталог.
    2. Выберите вкладку Сервисные аккаунты.
    3. Нажмите значок image напротив сервисного аккаунта и выберите Редактировать сервисный аккаунт.
    4. Нажмите Добавить роль и выберите роль.
    5. Нажмите кнопку Сохранить.

    По умолчанию используется каталог, указанный в профиле 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:

    1. Узнайте идентификатор сервисного аккаунта по его имени:

      $ 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  |
      +----------------------+------------------+-----------------+
      
    2. Назначьте роль сервисному аккаунту my-robot, используя его идентификатор:

      $ yc resource-manager folder add-access-binding my-folder \
          --role viewer \
          --subject serviceAccount:aje6o61dvog2h6g9a33s
      
    1. Узнайте ID каталога с сервисными аккаунтами.

    2. Получите список сервисных аккаунтов в каталоге, чтобы узнать их идентификаторы:

      $ 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"
        }
       ]
      }
      
    3. Сформируйте тело запроса, например в файле body.json. В свойстве action укажите ADD, а в свойстве subject - тип serviceAccount и ID сервисного аккаунта:

      body.json:

      {
          "accessBindingDeltas": [{
              "action": "ADD",
              "accessBinding": {
                  "roleId": "editor",
                  "subject": {
                      "id": "ajebqtreob2dpblin8pe",
                      "type": "serviceAccount"
                      }
                  }
              }
          ]
      }
      
    4. Назначьте роль, например на каталог с идентификатором 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"
      

    Что дальше