Токен сервисного аккаунта можно получить без его ключей следующими способами:
по ключу доступа инициатора;
по токену доступа инициатора.
Чтобы получить токен:
Убедитесь, что вам выдано право на impersonate сервисного аккаунта.
Узнайте идентификатор сервисного аккаунта, токен которого нужно получить.
Подготовьте нужные учетные данные инициатора:
Получите токен:
Выполните запрос на получение токена и укажите в нем идентификатор сервисного аккаунта:
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 не передано, будет выдан обычный токен владельца ключа доступа.
Оба метода вернут токен сервисного аккаунта.
Используйте полученный токен при каждом API-запросе к сервису — передайте его в заголовке Authorization в формате:
Authorization: Bearer <access_token>
По истечении срока действия токена запросите новый тем же способом.
Срок действия 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 | Сервисный аккаунт не существует или удален |