Тестируем Yandex Code Assistant на задаче по безопасному хранению секретов

Тестируем Yandex Code Assistant на задаче по безопасному хранению секретов

Всем привет! Меня зовут Станислав Денисов, я ML-инженер в компании «Инфосистемы Джет».

Вайбкодинг уже стал неотъемлемой частью разработки. Claude Code отвечает за 4% всех публичных коммитов на GitHub, а в Google 50% кода генерируется ИИ. Это не временная мода — технологии пришли надолго.

Спорить, хорошо это или плохо, бессмысленно. Важнее понимать, как использовать ИИ с умом. В сложных проектах без предметных знаний полагаться на ассистентов рискованно. Но и отказываться от экономии времени на рутине — неразумно.

Сегодня протестируем Yandex Code Assistant на задаче, где важна безопасность: создание MVP сервиса для одноразовой передачи секретов, как в Privnote или Yopass. Задача выглядит как простой CRUD, но под капотом — множество уязвимостей, если не продумать архитектуру и защиту.

Цель — понять, насколько ассистент автономен, где он справляется, а где без человека не обойтись.

Почему Yandex Code Assistant

Наша команда регулярно использует Cursor, GitHub Copilot и Claude Code. С 2024 года Yandex SourceCraft Code Assistant стал не просто подсказчиком, а полноценным агентом в SDLC — поэтому тестируем его на реальной задаче.

Задача с подвохом: написать MVP сервиса, где секрет можно прочитать только один раз или до истечения TTL. Если ИИ просто сделает CRUD — получится уязвимый сервис. Интересно, сможет ли ассистент сам продумать threat model и безопасность.

Оболочка агента: роли и визуализация

Проект стартовал с нуля. Ассистент предложил выбрать режим работы. Доступны пять модов:

  1. Architect: проектирование до реализации.
  2. Code: написание и рефакторинг.
  3. Ask: объяснения и ответы.
  4. Debug: поиск и исправление багов.
  5. Orchestrator: автоматическое управление задачами.

Orchestrator — ключевая фишка. Как в Cursor, он сам переключается между ролями: архитектор, разработчик, тестировщик.

На промпт «Помоги спроектировать MVP… Опиши архитектуру и threat model» ассистент создал 8 markdown-файлов: описал этапы, нарисовал диаграммы, структурировал систему.

После каждого промпта он обновлял внутренний To-Do и шел по нему шаг за шагом.

Особенно удобна визуализация изменений. Встроенный diff показывает, что именно меняется в файлах, с пояснениями к каждому действию.

Под капотом — расширяемость через Model Context Protocol (MCP). Есть скиллы вроде create-mcp-server и create-mode для кастомных ролей. В тесте не использовали, но потенциал есть.

Разбор полетов: успехи и ограничения ИИ

Я дал агенту 10 итеративных промптов — от архитектуры до фронтенда. Основные из них:

  • Проектирование: «Спроектируй MVP сервиса для одноразовой передачи секретов. Опиши архитектуру, threat model и меры безопасности».
  • Бэкенд: «Сгенерируй backend на FastAPI с SQLAlchemy и SQLite/PostgreSQL. Эндпоинты: создать, получить, пометить как прочитанный, удалить просроченные».
  • Безопасность: «Покажи безопасный подход к хранению: шифрование, генерация токена, TTL, одноразовый доступ. Перепиши код и объясни».
  • QA: «Напиши pytest-тесты: одноразовое чтение, истекший TTL, неверный токен, повторный доступ, физическое удаление».

Что получилось хорошо

Ассистент отлично справился с рутиной:

  • Настроил валидацию через Pydantic с ограничением размера секрета.
  • Использовал BackgroundTasks из FastAPI для очистки просроченных записей — без лишних cron-скриптов.
  • Добавил In-Memory Rate Limiter как Middleware — защита от брутфорса.
  • Сгенерировал docker-compose.yml, Dockerfile и конфиг Nginx.

Код выглядел готовым к деплою. Почти.

Где потребовался человек

  1. Шифрование на стороне сервера: ассистент использовал cryptography.fernet с ключом на основе мастер-ключа и ID секрета. Это означает, что администратор с доступом к БД и переменным окружения может расшифровать всё. Для zero-knowledge нужно шифрование на клиенте (Web Crypto API), где ключ передаётся в URL-хеше (#KEY) и не попадает на сервер.
  2. TOCTOU-уязвимость: при получении секрета агент делал SELECT, проверял флаг accessed, отдавал данные, потом обновлял запись. При двух параллельных запросах оба могут прочитать секрет. Решение — использовать SELECT ... FOR UPDATE или атомарный UPDATE ... RETURNING.
  3. Физическое удаление: ассистент помечал секрет как удалённый, но не удалял зашифрованный текст из БД. Настоящая безопасность требует физического DELETE и, по возможности, крипто-шреддинга — перезаписи данных мусором перед удалением, чтобы не оставить следов в WAL-файлах.

ИИ отлично экономит время на шаблонных задачах. Но безопасность, бизнес-логика и контроль — зона ответственности разработчика.

Итоги

Yandex Code Assistant впечатлил:

  • Режим Orchestrator — удобен и автономен.
  • Работа с контекстом — точечные правки без поломки архитектуры.
  • Diff-режим — упрощает ревью.
  • Инфраструктура — Docker, Nginx, всё на месте.

Но есть нюансы:

  • Промпты на русском, а фронт — на английском. Не критично, но странно.
  • Без глубокого ревью код нельзя сливать в прод. Как и любой ИИ-ассистент, он не идеален.

Разработчиков ИИ пока не заменит. Но меняет их роль: от писателя кода — к архитектору, ревьюеру и контролёру безопасности.

Результатом доволен. То, на что раньше ушёл бы день, ассистент сделал за час. Инструмент полезный — при условии вдумчивого подхода. А без знаний и контроля — даже самый умный ИИ превратит MVP в уязвимую бочку.

Читать оригинал