# Yandex Cloud API (IAM, Resource Manager, Compute Cloud): Получить IAM-токен для запросов к API

Сценарий из mcp-everything. Актуально на 2026-10-24.

Первый шаг любой автоматизации Yandex Cloud: обменять ключ сервисного аккаунта или OAuth-токен на IAM-токен.

1. Для скриптов и серверов создай сервисный аккаунт с нужными ролями и авторизованный ключ к нему. Подпиши им JWT (алгоритм PS256, aud = https://iam.api.cloud.yandex.net/iam/v1/tokens).
2. Обменяй: POST /iam/v1/tokens на iam.api.cloud.yandex.net с полем jwt. Для своего аккаунта на Яндексе вместо jwt передай yandexPassportOauthToken — ровно одно из полей.
3. Передавай токен во всех запросах: Authorization: Bearer <IAM-токен>. Токен живёт ограниченное время — получай новый заранее, например раз в час.

```python
import time, jwt, requests  # pip install pyjwt cryptography requests

key = {"service_account_id": "<id сервисного аккаунта>", "id": "<id ключа>", "private_key": open("private.pem").read()}
now = int(time.time())
token = jwt.encode({"aud": "https://iam.api.cloud.yandex.net/iam/v1/tokens", "iss": key["service_account_id"],
                    "iat": now, "exp": now + 3600},
                   key["private_key"], algorithm="PS256", headers={"kid": key["id"]})
iam = requests.post("https://iam.api.cloud.yandex.net/iam/v1/tokens", json={"jwt": token}).json()["iamToken"]
```

## Базовые URL

- IAM: `https://iam.api.cloud.yandex.net`
- Resource Manager: `https://resource-manager.api.cloud.yandex.net`
- Compute Cloud: `https://compute.api.cloud.yandex.net`
- Операции: `https://operation.api.cloud.yandex.net`

## Авторизация

Тип: Bearer-токен

Все запросы, кроме получения токена, передают IAM-токен в заголовке:

IAM-токен получают методом `POST /iam/v1/tokens` в обмен на OAuth-токен аккаунта на Яндексе или JWT сервисного аккаунта.

```
Authorization: Bearer <IAM-токен>
```

## Методы сценария

### POST /iam/v1/tokens — Получение IAM-токена

Хост `iam.api.cloud.yandex.net`. Передаётся ровно одно из полей.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `yandexPassportOauthToken` | body | string | нет | OAuth-токен аккаунта на Яндексе, до 4000 символов |
| `jwt` | body | string | нет | JWT сервисного аккаунта, до 8000 символов |

## Нюансы

- Каждая операция, изменяющая ресурс, возвращает объект Operation: `id`, `created_at`, `created_by`, `modified_at`, `done`, `metadata` и одно из полей `response`/`error`. Отслеживайте статус по `id`.
- `done: true` означает завершение операции, в том числе с ошибкой. Поле `error` может появиться раньше — пока сервис откатывает изменения.
- Для `Create`/`Update` поле `response` содержит созданный или изменённый ресурс.
- Числа int64 (`pageSize`, `memory`, `cores`) передаются строками.
- Пагинация: `pageSize` и `pageToken`, следующая страница — по `nextPageToken` из ответа.

## Другие сценарии

- [Найти каталог и посмотреть виртуальные машины](https://mcp-everything.ru/integrations/yandex-cloud/scenarios/nayti-katalog-i-posmotret-virtualnye.md)
- [Создать виртуальную машину и дождаться готовности](https://mcp-everything.ru/integrations/yandex-cloud/scenarios/sozdat-virtualnuyu-mashinu-i-dozhdatsya.md)
- [Выключать машины на ночь и включать утром](https://mcp-everything.ru/integrations/yandex-cloud/scenarios/vyklyuchat-mashiny-na-noch-i-vklyuchat.md)

---

Если этого недостаточно — официальная документация: https://yandex.cloud/ru/docs/api-design-guide/
Вся интеграция одним документом: https://mcp-everything.ru/integrations/yandex-cloud.md
