Yandex Cloud
Статус: доступен · пакет wg-flow-plugin-yandex 0.1.0 · провайдер yandex · категория cloud.
Плагин читает один каталог Yandex Cloud. В инвентарь попадают виртуальные машины, диски, сети VPC, зарезервированные публичные IP, группы безопасности и балансировщики. Секрет остаётся в YAML агента.
Compute и VPC не принимают API-ключ. Агент сам получает IAM-токен и ходит с Authorization: Bearer. Для сервисного аккаунта он подписывает JWT ключом из JSON (yc iam key create) и обновляет IAM-токен, пока ключ жив. OAuth-токен обменивается так же. Готовый IAM-токен (t1.) принимается, но живёт около 12 часов и сам не обновляется.
Один source — один каталог. Идентификатор каталога виден в URL консоли. Сервисному аккаунту или пользователю OAuth нужна роль viewer на этот каталог.
Плагин только читает API.
Образы, снимки, группы ВМ, файловые хранилища, Managed Kubernetes, управляемые базы, Object Storage, Certificate Manager, Cloud DNS, Lockbox и KMS в 0.1.0 не читаются. Метаданные ВМ (SSH-ключи, user-data) в инвентарь не копируются. Если API балансировщика отвечает 403 или 404, этот список пустой и source не падает. Ошибка любого другого списка роняет весь source: частичный снимок не отправляется.
Установка
Агент должен быть подключён к API.
docker compose exec agent wg-flow-agent plugin install yandex
# или
wg-flow-agent plugin install yandexДальше — локальный UI → Connections → yandex или YAML.
Ключ сервисного аккаунта:
yc iam key create --service-account-id <id> --output key.jsonOAuth-токен для пользователя Яндекса описан в документации Yandex Cloud. Для CLI это страница https://oauth.yandex.ru/authorize?response_type=token&client_id=1a6990aa636648e9b2ef855fa7bec2fb — токен окажется в адресе после редиректа.
Что попадает в инвентарь
| Объект Yandex Cloud | resource_type | Заметки |
|---|---|---|
| Виртуальная машина | instance | provider_resource_id = instance:{id}. RUNNING → active, STOPPED → stopped, переходные состояния и DELETING → pending, ERROR и CRASHED → error. Регион — зона (ru-central1-a). Публичный IPv4 из one-to-one NAT → metadata.primary_ipv4, внутренние адреса → metadata.private_ips. vCPU, память и доля ядра — cpu_cores, mem_gb, core_fraction. Если диски собираются в том же запуске, размер загрузочного диска пишется в disk_gb |
| Диск | storage | disk:{id}. READY → active, CREATING → pending. Размер в metadata.disk_gb и metadata.size_gb. Тип — disk_type |
| Сеть | network | network:{id}. CIDR подсетей этого каталога в metadata.ip_ranges |
| Подсеть чужой сети | network | subnet:{id}, metadata.product = subnet. Так виден адресный план, если сеть лежит в другом каталоге |
| Публичный IP | network | address:{id}. metadata.product = public_ip. Адрес в metadata.primary_ipv4 |
| Группа безопасности | firewall | firewall:{id}. В metadata только число правил, не сами правила |
| Сетевой балансировщик | load_balancer | nlb:{id}. ACTIVE → active, STOPPED и INACTIVE → stopped |
| L7-балансировщик | load_balancer | alb:{id}. Те же статусы |
Отдельного типа ip в инвентаре нет, поэтому публичный адрес — это network.
Куски сбора можно выключить отдельно. Выключенный кусок не запрашивается и не попадает в следующий успешный sync, и инвентарь помечает эти строки неактивными. disk_gb у машины появляется только когда сбор дисков включён.
Несколько каталогов — несколько sources. provider_account — ваша метка.
YAML
plugins:
yandex:
enabled: true
sources:
- id: prod
provider_account: "yc-prod"
sync_interval_seconds: 300
folder_id: "b1g…"
auth_type: "authorized_key"
authorized_key: "{\"id\":\"aje…\",\"service_account_id\":\"aje…\",\"private_key\":\"-----BEGIN PRIVATE KEY-----\\n…\"}"
collect_instances: true
collect_disks: true
collect_networks: true
collect_addresses: true
collect_firewalls: true
collect_load_balancers: trueOAuth вместо ключа: auth_type: oauth и поле token. IAM-токен t1. кладётся в то же поле.
Поля source
| Поле | Обязательно | Описание |
|---|---|---|
id | да | Ключ в логах (yandex/prod) |
provider_account | да | Метка каталога в инвентаре |
folder_id | да | Идентификатор каталога |
auth_type | нет | oauth (по умолчанию) или authorized_key |
token | для oauth | OAuth-токен или IAM t1. |
authorized_key | для ключа | JSON авторизованного ключа целиком |
collect_* | нет | По умолчанию true |
sync_interval_seconds | нет | Минимум 300 |
Проверка
wg-flow-agent status
wg-flow-agent dry-runВ JSON provider: yandex. Health получает IAM-токен и вызывает список ВМ с pageSize=1. Ключ и токен в инвентарь не пишутся.
Частые ошибки
| Симптом | Что проверить |
|---|---|
| 401 | OAuth-токен ещё жив, либо JSON ключа содержит id, service_account_id и private_key. API-ключ сюда не подходит |
| 403 на каталог | У аккаунта есть viewer на этот folder_id |
| IAM-токен протух | t1. не обновляется. Нужен OAuth или авторизованный ключ |
| Пустой список ВМ | collect_instances включён и машины лежат в этом каталоге |
Нет disk_gb у машины | collect_disks выключен, размер диска не запрашивался |
| Нет балансировщиков | Нет роли на NLB или ALB — это не ошибка source |
| Диски пропали после sync | collect_disks выключили; инвентарь гасит пропущенные строки |