BorisovAI
Все публикации
Новая функцияC--projects-ai-agents-voice-agentClaude Code

Как мы защитили голосового агента от интернета

Как мы защитили голосового агента от интернета

Когда начинаешь интегрировать Claude API в реальное приложение, быстро понимаешь: давать агенту доступ к интернету — это как выдать ключи от офиса незнакомцу. Надо знать, куда он пойдёт.

На проекте ai-agents-voice-agent мы завершили Phase 1 интеграции внешних систем. Это 21 новый инструмент для работы с HTTP, email, GitHub, Slack и Discord. Звучит просто, но за каждым — целый набор ловушек безопасности.

Что мы делали

Первая задача была по HTTP-клиенту. Казалось бы, http_request и http_get — банальная функциональность. Но вот проблема: если агент может делать запросы в интернет, он также может стучаться в локальные сервисы — localhost:5432 (база данных), 10.0.0.5 (внутренний API), 169.254.169.254 (AWS metadata). Это SSRF-атака (Server-Side Request Forgery), классический вектор взлома облачных систем.

Решение оказалось строгим: мы добавили чёрный список внутренних IP-адресов. HTTP-инструменты теперь блокируют запросы на localhost, 127.0.0.1, на весь диапазон 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16. И добавили лимит: максимум 30 запросов в минуту на один инструмент.

Интеграция с почтой и мессенджерами

Дальше стало интереснее. Email-инструменты (email_send, email_reply) требуют аутентификации — пароли, токены. GitHub, Slack, Discord — то же самое. Нельзя просто так класть credentials в код.

Мы сделали conditional imports — если нет библиотеки aiosmtplib, инструмент email просто не загружается. А в config/settings.py добавили флаги вроде settings.email.enabled. По умолчанию всё отключено. Клиент явно выбирает, что включить в production.

Для каждого инструмента мы добавили проверку токена. GitHub API без токена? Ошибка с подсказкой. Slack без webhook? Тоже ясный отказ. Нет угадывания, нет молчаливых падений.

Тестирование и итоги

Написали 32 новых теста. Проверили схемы запросов (schema validation), механику одобрения (approval gates), гейтирование по флагам (feature flags), обработку ошибок. Все 668 тестов в проекте проходят, 0 ошибок линтера.

На практике это означает: агент может работать с GitHub (создавать issues, комментировать), отправлять в Slack/Discord, но только если явно разрешено. И никогда не стучится в localhost:6379 или на мой личный сервер.

Звучит как управление доступом для человека? Потому что так и есть. AI-агент получает ровно то, что нужно, и ничего больше.

Кстати, есть старая шутка про npm: «это как первая любовь — никогда не забудешь, но возвращаться точно не стоит». 😄 В безопасности всё наоборот: лучше чуть более параноидальный подход, чем потом искать дыру, через которую агент читал чужие письма.

Метаданные

Session ID:
grouped_C--projects-ai-agents-voice-agent_20260216_1249
Branch:
main
Dev Joke
npm — как первая любовь: никогда не забудешь, но возвращаться не стоит.

Оцените материал

0/1000