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

Документация/Безопасность и данные

Доступ агента к базам, кластерам и очередям

Как задать уровень доступа агента к каждой базе данных, кластеру Kubernetes и брокеру сообщений, что значат метки окружений dev, stage и prod и какие действия вы подтверждаете на каждый вызов.

Подключения к базам, кластерам и брокерам сообщений вы заводите в приложении. Что агенту можно делать с каждым из них, решает уровень доступа на вкладке «Подключения». Приложение проверяет его при каждом обращении агента и отклоняет любое действие выше уровня, что бы агент ни прислал. Самые рискованные действия — запись в базу, чтение логов и секретов рабочего кластера — вы подтверждаете каждый раз, и только за компьютером.

Как открыть

  1. Откройте «Настройки → Безопасность агента», вкладку «Подключения».
  2. На вкладке — блоки «Базы данных» и «Кластеры Kubernetes». Брокеры сообщений, браузер, Jira и маскирование — в свёрнутом блоке «Ещё: брокеры сообщений, браузер, Jira, скрытие данных…».
  3. Выберите уровень у нужного подключения. Он сохраняется сразу.

Сами подключения вы заводите в других местах. Базы — на вкладке «БД», кнопкой «Добавить подключение»; по умолчанию эта вкладка стоит в левой колонке окна. Брокеры — в виде «Queues»: этот вид открывают в шапке окна через «Другие инструменты → Queues». Кластеры приложение берёт из вашего kubeconfig. Чтобы агент получил для них инструменты, включите модуль «Databases», «Kubernetes» или «Queues» в «Настройки → Модули»: по умолчанию эти модули выключены (см. Модули). Уровень можно выбрать и раньше: он заработает, когда вы включите модуль.

Базы данных

УровеньЧто агенту доступно
«Закрыто»Агент видит только название подключения.
«Только схема»Таблицы, столбцы, индексы, DDL — ни одной строки данных.
«Чтение»Схема и данные. Всё, что агент прочитает, уходит в модель.
«Чтение и запись»Плюс изменения данных и схемы — каждое после вашего подтверждения.

По умолчанию — «Чтение и запись»: «По умолчанию — всё; каждое изменение подтверждается на своей карточке.» Если не хотите, чтобы агент видел данные, поставьте «Только схема» или «Закрыто». У подключения «только для чтения» уровень не поднять выше «Чтение».

Кластеры Kubernetes

УровеньЧто агенту доступно
«Закрыт»Агент видит только название кластера.
«Чтение»Списки и статусы — без подтверждения; логи и содержимое Secret и ConfigMap — после вашего подтверждения. Что именно вы подтверждаете, зависит от метки окружения (о ней ниже).
«Чтение и действия»Плюс изменения: масштабирование, перезапуск, удаление. На prod каждое — после вашего подтверждения. На stage — после подтверждения в режиме агента «Авто» (см. Режимы агента), а в режиме «Полный» агент меняет stage сам.

По умолчанию — «Чтение и действия». Чтобы сузить доступ, нажмите «Ограничить namespace и типы ресурсов…» и заполните «Namespaces» и «Типы ресурсов». После этого приложение отклоняет любой вызов без namespace.

Метки окружений

У каждого кластера есть метка. От неё зависит, что агент делает сам, а что — после вашего подтверждения: «dev — без вопросов, stage — спросит в Авто, prod — спросит всегда».

МеткаПоведение
devЛоги и действия без карточки.
stageЛоги без карточки. Действия — с подтверждением в режиме «Авто», в режиме «Полный» — без карточки.
prodЛоги, Secret и действия с подтверждением.

Метки dev, stage и prod встроены: их нельзя переименовать или удалить. Можно добавить готовую метку pre-prod, она ведёт себя как prod. Можно завести и свою: новая метка тоже ведёт себя как prod, пока вы не выберете ей другое поведение.

Метку выбирают на вкладке «Подключения», в блоке «Кластеры Kubernetes»: рядом с именем каждого кластера стоит список меток. Свою метку добавляют через «Добавить метку» внизу этого списка, а меняют и удаляют кнопками «Изменить» и «Удалить» в блоке «Метки окружений» под списком кластеров. Ещё метку можно выбрать в виде «Kubernetes»: меню кластера → «Метка окружения».

Пока вы не выбрали метку, приложение угадывает её по имени кластера и пишет «определено по адресу и имени»:

  • prod, prd, live в имени → prod;
  • stage, staging, stg → stage;
  • dev, test, qa, local, sandbox, minikube, kind, Docker Desktop, OrbStack → dev;
  • всё остальное, в том числе кластер на 127.0.0.1, → prod.

Проверьте метки своих кластеров: угаданная метка бывает строже или мягче, чем нужно. Метка привязана к адресу API-сервера кластера.

Брокеры сообщений

Уровни для подключений Kafka и RabbitMQ — в блоке «Брокеры сообщений»:

УровеньЧто агенту доступно
«Закрыто»Агент видит имя подключения и больше ничего.
«Метаданные»Топики, группы, отставание, счётчики DLQ (очередей необработанных сообщений) — ни тел, ни ключей, ни заголовков сообщений.
«Сообщения»Плюс сами сообщения и примеры из DLQ — в маскированном виде.
«Сообщения и запросы»Плюс запросы к вам на действия; решаете их вы, в виде «Queues».

По умолчанию брокер закрыт — в отличие от баз и кластеров. Когда уровень выше «Закрыто», доступ можно сузить списками «Vhosts» (виртуальные хосты RabbitMQ), «Очереди» или «Топики», «Exchanges» (пустой список — все) и сохранить их кнопкой «Сохранить списки». Сам агент ничего в брокере изменить не может: на уровне «Сообщения и запросы» он только присылает вам запрос с планом (см. Очереди).

Браузер и Jira

  • «Браузер»: «Закрыт», «Смотреть» (открывает страницы, делает снимки, читает текст и консоль) или «Смотреть и действовать» (вдобавок нажимает и вводит текст на странице). По умолчанию — «Смотреть и действовать». Куда браузер может заходить, решают сетевые настройки агента (см. Браузер агента).
  • «Jira (Zephyr Copilot)»: «Закрыто», «Чтение» или «Полный доступ» (по умолчанию). Новые тест-кейсы агент создаёт только при полном доступе, и каждую пачку вы подтверждаете на карточке. Удалять и менять кейсы агент не может.

Что подтверждается на каждый вызов

Эти действия агент выполняет, только когда вы нажмёте «Разрешить» на карточке именно этого вызова:

  • запись в базу данных;
  • логи пода — на кластерах с поведением prod;
  • содержимое Secret и ConfigMap, значения переменных окружения контейнера;
  • изменения в кластере — на кластерах с поведением prod, а с поведением stage — только в режиме «Авто»;
  • чтение сообщений RabbitMQ и трассировка.

Одно «Разрешить» — одно действие. Галочки «Больше не спрашивать» у таких карточек нет. Подтвердить такую карточку можно только за этим компьютером, а с телефона — лишь отклонить.

Важно

Если вы перевели чат в режим «Без ограничений», приложение подтверждает эти вызовы само и отмечает это в журнале: запись в базы и изменения рабочих кластеров проходят без карточки. Уровни доступа в этом режиме всё равно действуют.

Команды в обход модуля

Агент может обратиться к подключению напрямую из терминала, например psql -h … или docker exec … mongosh. Тогда он показывает карточку «Выполнить команду в обход модуля?» с пояснением «Обращается к … напрямую, а не через модуль» или «…а уровень этого подключения в «Безопасности» ниже, чем может команда».

  • Если у подключения только чтение, такую команду вы подтверждаете каждый раз.
  • Если подключение закрыто, команда не пройдёт.
  • Если у подключения полный доступ, решает режим чата. В «Полном» команда выполняется без вопроса. В «Авто» агент спросит, и на этой карточке есть галочка «Больше не спрашивать»: она действует для этого подключения. Запрет на эту галочку из раздела «Что подтверждается на каждый вызов» касается только карточек из того списка.

Маскирование данных

Данные из баз, очередей, кластеров и логов продакшена маскируются до того, как попадут к агенту. Пароли и ключи заменяются на [secret]. Вместо человека агент видит псевдоним вида [user:3fa2c1], одинаковый во всех строках ответа. По нему агент понимает, что заказ и ошибка относятся к одному человеку, а кто это — не узнаёт. По виду значения маскирование находит почту, телефоны, номера карт, СНИЛС, ИНН, паспорт, ФИО, дату рождения и адрес.

Чтобы добавить свои правила, откройте «Ещё: брокеры сообщений, браузер, Jira, скрытие данных…» → «Маскирование»:

  1. Впишите поля и форматы, по одному в строке. Поля скрываются по имени в базах, очередях, кластерах и логах. Форматы — это регулярные выражения: совпадения с ними скрываются в любом ответе инструмента.
  2. Нажмите «Сохранить правила».
  3. Вставьте пример в «Проверить на тексте» и нажмите «Показать, как увидит агент».

Ваши правила только добавляются к встроенным и к правилам организации: ослабить их нельзя. Сами вы в окне приложения видите данные без маскирования.

Как это соблюдается

  • Приложение проверяет уровень при каждом обращении агента; сам агент в этой проверке не участвует.
  • Уровни хранятся запечатанными системной связкой ключей. Если файл с уровнями изменить в обход приложения, заменить или перенести с другого компьютера, приложение его не откроет. Тогда для агента закрыто всё: базы, кластеры, брокеры, браузер и Jira, а каждый кластер считается prod.
  • Уровень выдан подключению «по адресу»: это хост, порт, база и пользователь, а у кластера — адрес сервера. Если подключение стало вести в другое место, ваш уровень на него не переносится: база и кластер получают уровень по умолчанию, а брокер закрывается.

Ограничения

  • Уровни не защищают от доступа в обход приложения, например через пароль в .env проекта или свой скрипт с драйвером базы. Не храните боевые пароли в проекте, а пользователю базы, под которым работает агент, давайте права только на чтение.
  • Если на компьютере нет системной связки ключей (так бывает на Linux), приложение пишет: «…уровни негде хранить надёжно: они действуют до закрытия приложения, после запуска всё снова закрыто.»
  • Если проект открыт на сервере по SSH, инструменты кластеров и очередей работают, а подключения и уровни остаются на вашем компьютере.
  • Организация может сверху ограничить кластеры, namespace, брокеры и очереди (см. Организации).

Что дальше

Обновлено · Нашли неточность? Напишите на support@devmachine.ai или в Telegram.