Модель угроз
Агенты могут предпринимать непредусмотренные действия из-за prompt injection (инструкции, встроенные в содержимое, которое они обрабатывают) или ошибки модели. Модели Claude разработаны для сопротивления этому; см. обзор модели и карту системы для модели, которую вы развертываете, для получения деталей оценки. Защита в глубину все еще является хорошей практикой. Например, если агент обрабатывает вредоносный файл, который инструктирует его отправить данные клиентов на внешний сервер, сетевые элементы управления могут полностью заблокировать этот запрос.Встроенные функции безопасности
Claude Code включает несколько функций безопасности, которые решают распространенные проблемы. Полные детали см. в документации по безопасности.- Система разрешений: Каждый инструмент и команда bash можно настроить на разрешение, блокировку или запрос одобрения пользователя. Используйте glob-шаблоны для создания правил, таких как “разрешить все команды npm” или “заблокировать любую команду с sudo”. Организации могут устанавливать политики, которые применяются ко всем пользователям. См. разрешения.
- Парсинг команд для разрешений: Перед выполнением команд bash Claude Code анализирует их в AST и сопоставляет результат с вашими правилами разрешений. Команды, которые не могут быть четко проанализированы или не соответствуют правилу разрешения, требуют явного одобрения. Небольшой набор конструкций, таких как
eval, всегда требует одобрения независимо от правил разрешения. Это шлюз разрешений, а не sandbox; он не определяет, опасна ли команда, исходя из целевого пути или эффектов. - Суммирование результатов веб-поиска: Результаты поиска суммируются, а не передаются в контекст в виде необработанного содержимого, что снижает риск prompt injection из вредоносного веб-контента.
- Режим sandbox: Команды Bash могут выполняться в изолированной среде, которая ограничивает доступ к файловой системе и сети. Подробности см. в документации по sandboxing.
Принципы безопасности
Для развертываний, требующих дополнительного усиления сверх значений по умолчанию Claude Code, эти принципы направляют доступные варианты.Границы безопасности
Граница безопасности разделяет компоненты с разными уровнями доверия. Для развертываний с высокой безопасностью вы можете разместить чувствительные ресурсы (такие как учетные данные) вне границы, содержащей агента. Если что-то пойдет не так в среде агента, ресурсы вне этой границы остаются защищенными. Например, вместо того чтобы давать агенту прямой доступ к ключу API, вы можете запустить прокси вне среды агента, который внедряет ключ в запросы. Агент может делать вызовы API, но он никогда не видит саму учетную данные. Этот паттерн полезен для многопользовательских развертываний или при обработке ненадежного содержимого.Принцип наименьших привилегий
При необходимости вы можете ограничить агента только возможностями, необходимыми для его конкретной задачи:Защита в глубину
Для высокозащищенных сред наслоение нескольких элементов управления обеспечивает дополнительную защиту. Варианты включают:- Изоляция контейнеров
- Ограничения сети
- Элементы управления файловой системой
- Валидация запросов на прокси
Технологии изоляции
Различные технологии изоляции предлагают различные компромиссы между силой безопасности, производительностью и операционной сложностью.Во всех этих конфигурациях Claude Code (или ваше приложение Agent SDK) работает внутри границы изоляции (sandbox, контейнер или VM). Элементы управления безопасностью, описанные ниже, ограничивают то, к чему агент может получить доступ из этой границы.
Sandbox runtime
Для легкой изоляции без контейнеров sandbox-runtime обеспечивает ограничения файловой системы и сети на уровне ОС. Основное преимущество — простота: не требуется конфигурация Docker, образы контейнеров или настройка сети. Прокси и ограничения файловой системы встроены. Вы предоставляете файл настроек, указывающий разрешенные домены и пути. Как это работает:- Файловая система: Использует примитивы ОС (
bubblewrapна Linux,sandbox-execна macOS) для ограничения доступа на чтение/запись к настроенным путям - Сеть: Удаляет пространство имен сети (Linux) или использует профили Seatbelt (macOS) для маршрутизации сетевого трафика через встроенный прокси
- Конфигурация: Списки разрешений на основе JSON для доменов и путей файловой системы
- Ядро на одном хосте: В отличие от VMs, изолированные процессы используют ядро хоста. Уязвимость ядра теоретически может позволить выход. Для некоторых моделей угроз это приемлемо, но если вам нужна изоляция на уровне ядра, используйте gVisor или отдельную VM.
- Без проверки TLS: Прокси создает список разрешений доменов на основе имени хоста, предоставленного клиентом, и не завершает и не проверяет зашифрованный трафик. Код, работающий внутри sandbox, потенциально может использовать domain fronting или аналогичные методы для доступа к хостам вне списка разрешений. Если ваша модель угроз требует более сильных гарантий, настройте прокси, завершающий TLS. Подробнее см. в ограничениях безопасности sandboxing. Отдельно, если агент имеет разрешающие учетные данные для разрешенного домена, убедитесь, что он не может использовать этот домен для запуска других сетевых запросов или для утечки данных.
Контейнеры
Контейнеры обеспечивают изоляцию через пространства имен Linux. Каждый контейнер имеет свой собственный вид файловой системы, дерева процессов и стека сети, при этом используя ядро хоста. Конфигурация контейнера с усиленной безопасностью может выглядеть следующим образом:
Архитектура Unix-сокета:
С
--network none контейнер вообще не имеет сетевых интерфейсов. Единственный способ для агента достичь внешнего мира — через смонтированный Unix-сокет, который подключается к прокси, работающему на хосте. Этот прокси может обеспечивать списки разрешений доменов, внедрять учетные данные и регистрировать весь трафик.
Это та же архитектура, используемая sandbox-runtime. Даже если агент скомпрометирован через prompt injection, он не может утечь данные на произвольные серверы. Он может взаимодействовать только через прокси, который контролирует, какие домены доступны. Для получения дополнительной информации см. блог Claude Code sandboxing.
Дополнительные варианты усиления:
gVisor
Стандартные контейнеры используют ядро хоста: когда код внутри контейнера делает системный вызов, он идет непосредственно к тому же ядру, которое запускает хост. Это означает, что уязвимость ядра может позволить выход контейнера. gVisor решает эту проблему, перехватывая системные вызовы в пользовательском пространстве перед тем, как они достигнут ядра хоста, реализуя свой собственный уровень совместимости, который обрабатывает большинство системных вызовов без участия реального ядра. Если агент запускает вредоносный код (возможно, из-за prompt injection), этот код работает в контейнере и может попытаться использовать уязвимости ядра. С gVisor поверхность атаки намного меньше: вредоносный код должен сначала использовать реализацию gVisor в пользовательском пространстве и будет иметь ограниченный доступ к реальному ядру. Чтобы использовать gVisor с Docker, установите runtimerunsc и настройте демон:
Для многопользовательских сред или при обработке ненадежного содержимого дополнительная изоляция часто стоит накладных расходов.
Виртуальные машины
VMs обеспечивают изоляцию на уровне оборудования через расширения виртуализации CPU. Каждая VM запускает свое собственное ядро, создавая сильную границу. Уязвимость в ядре гостя не напрямую компрометирует хост. Однако VMs не автоматически “более безопасны” чем альтернативы, такие как gVisor. Безопасность VM сильно зависит от гипервизора и кода эмуляции устройств. Firecracker разработан для легкой изоляции microVM. Он может загружать VMs менее чем за 125 мс с накладными расходами памяти менее 5 МиБ, убирая ненужную эмуляцию устройств, чтобы уменьшить поверхность атаки. При таком подходе VM агента не имеет внешнего сетевого интерфейса. Вместо этого она взаимодействует черезvsock (виртуальные сокеты). Весь трафик маршрутизируется через vsock к прокси на хосте, который обеспечивает списки разрешений и внедряет учетные данные перед пересылкой запросов.
Облачные развертывания
Для облачных развертываний вы можете комбинировать любую из вышеуказанных технологий изоляции с облачными сетевыми элементами управления:- Запустите контейнеры агента в приватной подсети без интернет-шлюза
- Настройте правила облачного брандмауэра (AWS Security Groups, GCP VPC firewall) для блокировки всего исходящего трафика, кроме как к вашему прокси
- Запустите прокси (такой как Envoy с его фильтром
credential_injector), который проверяет запросы, обеспечивает списки разрешений доменов, внедряет учетные данные и пересылает на внешние API - Назначьте минимальные разрешения IAM учетной записи сервиса агента, маршрутизируя чувствительный доступ через прокси, где это возможно
- Регистрируйте весь трафик на прокси в целях аудита
Управление учетными данными
Агентам часто нужны учетные данные для вызова API, доступа к репозиториям или взаимодействия с облачными сервисами. Задача состоит в том, чтобы предоставить этот доступ без раскрытия самих учетных данных.Паттерн прокси
Рекомендуемый подход — запустить прокси вне границы безопасности агента, который внедряет учетные данные в исходящие запросы. Агент отправляет запросы без учетных данных, прокси добавляет их и пересылает запрос к его месту назначения. Этот паттерн имеет несколько преимуществ:- Агент никогда не видит фактические учетные данные
- Прокси может обеспечивать список разрешений разрешенных конечных точек
- Прокси может регистрировать все запросы для аудита
- Учетные данные хранятся в одном безопасном месте, а не распределяются каждому агенту
Настройка Claude Code для использования прокси
Claude Code поддерживает два метода маршрутизации запросов выборки через прокси: Вариант 1: ANTHROPIC_BASE_URL (простой, но только для запросов API выборки)Реализация прокси
Вы можете построить свой собственный прокси или использовать существующий:- Envoy Proxy: прокси производственного уровня с фильтром
credential_injectorдля добавления заголовков аутентификации - mitmproxy: прокси, завершающий TLS, для проверки и изменения HTTPS-трафика
- Squid: кэширующий прокси со списками контроля доступа
- LiteLLM: шлюз LLM с внедрением учетных данных и ограничением скорости
Учетные данные для других сервисов
Помимо выборки из Claude API, агентам часто нужен аутентифицированный доступ к другим сервисам, таким как git-репозитории, базы данных и внутренние API. Есть два основных подхода:Пользовательские инструменты
Предоставьте доступ через MCP-сервер или пользовательский инструмент, который маршрутизирует запросы к сервису, работающему вне границы безопасности агента. Агент вызывает инструмент, но фактический аутентифицированный запрос происходит снаружи. Вызовы инструмента идут к прокси, который внедряет учетные данные. Например, MCP-сервер git может принимать команды от агента, но пересылать их на git-прокси, работающий на хосте, который добавляет аутентификацию перед контактом с удаленным репозиторием. Агент никогда не видит учетные данные. Преимущества:- Без перехвата TLS: Внешний сервис делает аутентифицированные запросы напрямую
- Учетные данные остаются снаружи: Агент видит только интерфейс инструмента, а не базовые учетные данные
Пересылка трафика
Для вызовов Claude APIANTHROPIC_BASE_URL позволяет маршрутизировать запросы к прокси, который может проверять и изменять их в открытом виде. Но для других HTTPS-сервисов (GitHub, npm-реестры, внутренние API) трафик часто зашифрован от конца до конца. Даже если вы маршрутизируете его через прокси через HTTP_PROXY, прокси видит только непрозрачный TLS-туннель и не может внедрять учетные данные.
Чтобы изменить HTTPS-трафик к произвольным сервисам без использования пользовательского инструмента, вам нужен прокси, завершающий TLS, который расшифровывает трафик, проверяет или изменяет его, затем повторно шифрует перед пересылкой. Это требует:
- Запуска прокси вне контейнера агента
- Установки сертификата CA прокси в хранилище доверия агента (чтобы агент доверял сертификатам прокси)
- Настройки
HTTP_PROXY/HTTPS_PROXYдля маршрутизации трафика через прокси
HTTP_PROXY/HTTPS_PROXY. Большинство инструментов (curl, pip, npm, git) соблюдают, но некоторые могут обойти эти переменные и подключиться напрямую. Например, Node.js fetch() по умолчанию игнорирует эти переменные; в Node 24+ вы можете установить NODE_USE_ENV_PROXY=1 для включения поддержки. Для полного охвата вы можете использовать proxychains для перехвата сетевых вызовов или настроить iptables для перенаправления исходящего трафика на прозрачный прокси.
Прозрачный прокси перехватывает трафик на сетевом уровне, поэтому клиент не нужно настраивать для его использования. Обычные прокси требуют, чтобы клиенты явно подключались и говорили HTTP CONNECT или SOCKS. Прозрачные прокси (такие как Squid или mitmproxy в прозрачном режиме) могут обрабатывать необработанные перенаправленные TCP-соединения.
Конфигурация файловой системы
Элементы управления файловой системой определяют, какие файлы агент может читать и писать.Монтирование кода только для чтения
Когда агенту нужно анализировать код, но не изменять его, смонтируйте каталог только для чтения:Записываемые местоположения
Если агенту нужно писать файлы, у вас есть несколько вариантов в зависимости от того, хотите ли вы, чтобы изменения сохранялись: Для эфемерных рабочих пространств в контейнерах используйте монтированияtmpfs, которые существуют только в памяти и очищаются при остановке контейнера: