Skip to content

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.

bash
docker compose exec agent wg-flow-agent plugin install yandex
# или
wg-flow-agent plugin install yandex

Дальше — локальный UI → Connections → yandex или YAML.

Ключ сервисного аккаунта:

bash
yc iam key create --service-account-id <id> --output key.json

OAuth-токен для пользователя Яндекса описан в документации Yandex Cloud. Для CLI это страница https://oauth.yandex.ru/authorize?response_type=token&client_id=1a6990aa636648e9b2ef855fa7bec2fb — токен окажется в адресе после редиректа.

Что попадает в инвентарь ​

Объект Yandex Cloudresource_typeЗаметки
Виртуальная машинаinstanceprovider_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
Дискstoragedisk:{id}. READY → active, CREATING → pending. Размер в metadata.disk_gb и metadata.size_gb. Тип — disk_type
Сетьnetworknetwork:{id}. CIDR подсетей этого каталога в metadata.ip_ranges
Подсеть чужой сетиnetworksubnet:{id}, metadata.product = subnet. Так виден адресный план, если сеть лежит в другом каталоге
Публичный IPnetworkaddress:{id}. metadata.product = public_ip. Адрес в metadata.primary_ipv4
Группа безопасностиfirewallfirewall:{id}. В metadata только число правил, не сами правила
Сетевой балансировщикload_balancernlb:{id}. ACTIVE → active, STOPPED и INACTIVE → stopped
L7-балансировщикload_balanceralb:{id}. Те же статусы

Отдельного типа ip в инвентаре нет, поэтому публичный адрес — это network.

Куски сбора можно выключить отдельно. Выключенный кусок не запрашивается и не попадает в следующий успешный sync, и инвентарь помечает эти строки неактивными. disk_gb у машины появляется только когда сбор дисков включён.

Несколько каталогов — несколько sources. provider_account — ваша метка.

YAML ​

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: true

OAuth вместо ключа: auth_type: oauth и поле token. IAM-токен t1. кладётся в то же поле.

Поля source ​

ПолеОбязательноОписание
idдаКлюч в логах (yandex/prod)
provider_accountдаМетка каталога в инвентаре
folder_idдаИдентификатор каталога
auth_typeнетoauth (по умолчанию) или authorized_key
tokenдля oauthOAuth-токен или IAM t1.
authorized_keyдля ключаJSON авторизованного ключа целиком
collect_*нетПо умолчанию true
sync_interval_secondsнетМинимум 300

Проверка ​

bash
wg-flow-agent status
wg-flow-agent dry-run

В JSON provider: yandex. Health получает IAM-токен и вызывает список ВМ с pageSize=1. Ключ и токен в инвентарь не пишутся.

Частые ошибки ​

СимптомЧто проверить
401OAuth-токен ещё жив, либо JSON ключа содержит id, service_account_id и private_key. API-ключ сюда не подходит
403 на каталогУ аккаунта есть viewer на этот folder_id
IAM-токен протухt1. не обновляется. Нужен OAuth или авторизованный ключ
Пустой список ВМcollect_instances включён и машины лежат в этом каталоге
Нет disk_gb у машиныcollect_disks выключен, размер диска не запрашивался
Нет балансировщиковНет роли на NLB или ALB — это не ошибка source
Диски пропали после synccollect_disks выключили; инвентарь гасит пропущенные строки