Облачная платформаEvolution

Получить токен сервисного аккаунта без его ключей


Токен сервисного аккаунта можно получить без его ключей следующими способами:

  • по ключу доступа инициатора;

  • по токену доступа инициатора.

Получить токен

Чтобы получить токен:

  1. Убедитесь, что вам выдано право на impersonate сервисного аккаунта.

  2. Узнайте идентификатор сервисного аккаунта, токен которого нужно получить.

  3. Подготовьте нужные учетные данные инициатора:

  4. Получите токен:


    Выполните запрос на получение токена и укажите в нем идентификатор сервисного аккаунта:

    curl --location 'https://iam.api.cloud.ru/api/v2/auth/token' \
    --header 'Content-Type: application/json' \
    --data '{
    "keyId": "<key_id>",
    "secret": "<secret>",
    "serviceAccountId": "<service_account_id>"
    }'

    Где:

    • keyId — Key ID (логин) ключа доступа инициатора.

    • secret — Key Secret (пароль) ключа доступа инициатора.

    • serviceAccountId — идентификатор сервисного аккаунта в формате UUID, токен которого запрашивается. Если сервисный аккаунт передает собственный идентификатор, поле будет проигнорировано. Будет выдан обычный токен по ключу. Если поле serviceAccountId не передано, будет выдан обычный токен владельца ключа доступа.

    Оба метода вернут токен сервисного аккаунта.

  5. Используйте полученный токен при каждом API-запросе к сервису — передайте его в заголовке Authorization в формате:

    Authorization: Bearer <access_token>
  6. По истечении срока действия токена запросите новый тем же способом.

    Примечание

    Срок действия impersonation-токена по умолчанию 1 ч. Refresh-токен для такого токена не выдается.

Ошибки при получении токена

Если не удалось выполнить запрос, в ответе внутри массива details вернется HTTP-код, в поле message — текст ошибки, в поле reason — код ошибки.

HTTP-код

Код ошибки

Сообщение

Причина ошибки

400

invalid_id

provided service account id is not valid

Значение serviceAccountId не является UUID

400

self_impersonation

service account cannot impersonate itself

В запросе к /api/v2/auth/impersonate сервисный аккаунт указал собственный идентификатор

400

–

invalid request: key_id and secret must be provided

В запросе к /api/v2/auth/token не передан keyId или secret

401

invalid_client

invalid_client: invalid credentials

Неверный keyId или secret инициатора. Если сервисный аккаунт инициатора отключен, в сообщении будет invalid_client: service_account is inactive

403

–

RBAC: access denied

В запросе к /api/v2/auth/impersonate нет заголовка Authorization с токеном доступа

403

permission_denied

operation is not allowed

У инициатора нет права на impersonate этого сервисного аккаунта

403

permission_denied

impersonated token cannot be used to impersonate a service account

Запрос выполнен токеном, который получен через impersonate

403

–

failed to get token

Не удалось выпустить токен по запросу к /api/v2/auth/token, например, сервисный аккаунт отключен

403

–

failed to impersonate service account

Не удалось выпустить токен по запросу к /api/v2/auth/impersonate, например, сервисный аккаунт отключен

404

resource_not_found

object does not exist

Сервисный аккаунт не существует или удален