Документация

Yandex Cloud

Полная интеграция: Managed Kubernetes, Compute, Network, Billing.

Обзор

Коннектор Yandex Cloud обеспечивает глубокую интеграцию платформы Oopps.ai с инфраструктурой Yandex Cloud. После подключения платформа автоматически обнаруживает и анализирует ресурсы в указанном каталоге (folder).

Поддерживаемые возможности:

Необходимые права

Для работы коннектора необходимо назначить сервисному аккаунту минимальный набор ролей. Все роли — только на чтение, Oopps.ai не изменяет и не удаляет ресурсы.

Роль Область Назначение
viewer Каталог (folder) Чтение ресурсов Compute, Network, Storage
compute.viewer Каталог (folder) Чтение виртуальных машин, дисков, образов
k8s.cluster-api.viewer Каталог (folder) Read-only доступ к K8s API кластера (поды, сервисы, ворклоады). Для полного аудита нод — см. шаг 2б
billing.accounts.viewer Billing Account Чтение данных о расходах
Внимание

Роль billing.accounts.viewer назначается отдельно на уровне Billing Account, а не на каталоге (folder). Откройте Все сервисы → Cloud Center → Billing → платёжный аккаунт → Управление доступом, чтобы добавить сервисный аккаунт.

Пошаговая инструкция

Найти Folder ID

Откройте Yandex Cloud Console, выберите нужный каталог. На странице Дашборд каталога Folder ID отображается в шапке под названием каталога (формат: b1g...). Нажмите на ID, чтобы скопировать.

Альтернативно через CLI:

yc config list

В выводе найдите строку folder-id — это и есть идентификатор каталога.

Создать сервисный аккаунт и назначить роли

  1. В левом меню консоли нажмите Все сервисы.
  2. Прокрутите вниз до раздела «Управление ресурсами» и выберите Identity and Access Management.
  3. В левом меню нажмите Сервисные аккаунты.
  4. Нажмите Создать сервисный аккаунт (кнопка в правом верхнем углу).
  5. Укажите имя, например oopps-reader. Описание — «Read-only service account for Oopps.ai audit».
  6. В поле Роли в каталоге нажмите + Добавить роль и добавьте три роли: viewer, k8s.cluster-api.viewer, compute.viewer.
  7. Нажмите Создать.

Или через CLI:

# Создать сервисный аккаунт
yc iam service-account create \
  --name oopps-reader \
  --description "Read-only SA for Oopps.ai"

# Назначить роли на каталоге (подставьте свои folder_id и sa_id)
yc resource-manager folder add-access-binding \
  --id <folder_id> --role viewer --service-account-id <sa_id>
yc resource-manager folder add-access-binding \
  --id <folder_id> --role k8s.cluster-api.viewer --service-account-id <sa_id>
yc resource-manager folder add-access-binding \
  --id <folder_id> --role compute.viewer --service-account-id <sa_id>

2б. (Опционально) Расширить доступ для аудита нод

Роль k8s.cluster-api.viewer даёт read-only доступ к подам, сервисам и ворклоадам. Для полного аудита (ноды, persistent volumes, метрики утилизации) нужен дополнительный ClusterRole внутри кластера. Это строго read-only — только get, list, watch.

Примените YAML от имени администратора кластера:

cat <<'EOF' | kubectl apply -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: oopps-reader
rules:
- apiGroups: [""]
  resources: ["nodes", "persistentvolumes"]
  verbs: ["get", "list", "watch"]
- apiGroups: ["metrics.k8s.io"]
  resources: ["nodes", "pods"]
  verbs: ["get", "list"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: oopps-reader
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: oopps-reader
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: Group
  name: yc:viewer
EOF
Примечание

Без этого шага аудит всё равно работает — показывает ворклоады, поды, PVC и namespace-разбивку. Секция «Ноды» и topology будут недоступны.

Назначить роль для биллинга и скопировать Billing Account ID

  1. В левом меню консоли нажмите Все сервисы.
  2. В верхней части выберите Cloud CenterBilling (Потребление и оплата).
  3. Выберите нужный платёжный аккаунт.
  4. Скопируйте Billing Account ID — он отображается под названием аккаунта (формат: dn...). Он понадобится при настройке коннектора.
  5. В левом меню нажмите Управление доступом.
  6. Нажмите кнопку Назначить роли (в правом верхнем углу). Откроется диалог Выдача доступа.
  7. В левой колонке выберите Сервисные аккаунты, найдите oopps-reader и выберите его.
  8. В поле Роли добавьте billing.accounts.viewer и нажмите Сохранить.
Примечание

Billing Account ID и назначение ролей на биллинг доступны только через консоль — в yc CLI нет команды billing.

Создать ключ авторизации

Yandex Cloud поддерживает три способа аутентификации сервисного аккаунта. Выберите подходящий:

a) IAM-токен (для тестирования)

yc iam create-token

Токен действует 12 часов. Подходит для быстрой проверки, но не для постоянной работы.

b) OAuth-токен (долгоживущий)

Получите токен на oauth.yandex.ru. Подходит для тестирования и небольших сред, где допустимо хранить долгоживущий токен.

c) Service Account Key (JSON) — рекомендуется для прода

Через консоль:

  1. Все сервисыIdentity and Access ManagementСервисные аккаунты.
  2. Нажмите на аккаунт oopps-reader.
  3. Сверху нажмите Создать новый ключСоздать авторизованный ключ.
  4. В диалоге нажмите Создать и скачайте JSON-файл с ключом.

Через CLI:

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

Файл key.json содержит авторизованный ключ. Это наиболее безопасный и надёжный способ аутентификации для production-среды.

Рекомендация

Для production-окружения всегда используйте Service Account Key. IAM-токен истекает через 12 часов, а OAuth-токен привязан к пользователю, а не к сервисному аккаунту.

Вставить credentials в Oopps.ai

Откройте платформу Oopps.ai → КоннекторыДобавить → выберите Yandex Cloud.

Заполните поле folder_id и выберите способ аутентификации из списка. Вставьте соответствующий ключ или токен. Нажмите Подключить.

После успешного подключения Oopps.ai начнёт обнаружение кластеров и сбор инвентаря в течение нескольких минут.

Поля формы

Поле Обязательное Где взять Формат
folder_id Да Console → Каталог → Дашборд → ID в шапке b1gxxxxxxxxxx
cloud_id Нет Console → Облако → ID в шапке b1gxxxxxxxxxx
billing_account_id Нет (нужен для биллинга) Cloud Center → Billing → ID под названием аккаунта dnxxxxxxxxxx
auth_method Да Выбор из списка iam_token | oauth_token | service_account_key
iam_token Только при auth_method=iam_token yc iam create-token Строка токена
oauth_token Только при auth_method=oauth_token oauth.yandex.ru Строка токена
service_account_key Только при auth_method=service_account_key yc iam key create --output key.json JSON целиком (содержимое key.json)

Возможные проблемы

Ошибка Причина Решение
403 Forbidden Нет роли viewer на каталоге Назначьте роль viewer через Права доступа каталога
401 Unauthorized Истёк IAM-токен (срок жизни — 12 часов) Обновите токен командой yc iam create-token или переключитесь на Service Account Key
Биллинг пуст Не указан billing_account_id или нет роли Добавьте billing_account_id в настройках коннектора и назначьте billing.accounts.viewer
Кластеры не найдены Нет роли viewer на каталоге Роль viewer покрывает листинг кластеров Managed Kubernetes
Аудит K8s: ноды недоступны Роль k8s.cluster-api.viewer не покрывает cluster-scoped ресурсы (nodes, PV, metrics) Примените кастомный ClusterRole из шага 2б — он даёт строго read-only доступ к нодам и метрикам. Без него аудит работает, но показывает только поды и ворклоады.

Если выдать доступ к K8s API невозможно по политике безопасности — установите Oopps Agent прямо в кластер (Helm-чарт). Агент работает изнутри: собирает метрики, формирует рекомендации по rightsizing и может применять оптимизации автоматически — но только с явным подтверждением (approve) через UI, Telegram или webhook. Без вашего разрешения никакие изменения в кластере не выполняются.
Ресурсы без стоимости Yandex Billing API не возвращает поресурсные данные для вашего аккаунта Oopps.ai автоматически использует данные по SKU и распределяет затраты по типам ресурсов. Убедитесь, что роль billing.accounts.viewer назначена
Нет связи с API Сетевая проблема (DNS, firewall, VPN) Проверьте доступность api.cloud.yandex.net, настройки DNS и VPN

Ограничения

Примечание

Если у вас возникли вопросы по настройке коннектора, обратитесь в раздел FAQ или напишите в поддержку через платформу.