Skip to main content

openclaw policy

openclaw policy предоставляется встроенным плагином Policy. Это корпоративный уровень проверки соответствия поверх существующих настроек OpenClaw, а не вторая система конфигурации. Требования задаются в policy.jsonc; OpenClaw использует активное рабочее пространство как свидетельство; Policy сообщает об отклонениях через doctor --lint. Policy не контролирует вызовы инструментов и не изменяет поведение среды выполнения во время обработки запроса, а также не подтверждает соответствие хранилищ учетных данных отдельных агентов, таких как auth-profiles.json. Policy проверяет настроенные каналы, серверы MCP, поставщиков моделей, защиту сети от SSRF, доступ к входящим подключениям и каналам, доступность Gateway и состояние команд узлов, доступ агентов к рабочему пространству, состояние песочницы, состояние обработки данных, состояние поставщиков секретов и профилей аутентификации, а также метаданные управляемых инструментов (TOOLS.md). Используйте его, когда рабочему пространству требуется устойчивое, проверяемое требование, например «Telegram не должен быть включен» или «управляемые инструменты должны содержать метаданные риска и владельца». Если нужно только локальное поведение без подтверждения соответствия или обнаружения отклонений, достаточно обычной конфигурации.

Быстрый старт

Плагин остается включенным, даже если policy.jsonc отсутствует, чтобы doctor мог сообщить об отсутствующем артефакте, а не молча пропустить проверки. Создайте policy.jsonc вручную; он не генерируется из текущих настроек. Каждый раздел верхнего уровня представляет пространство имен правил: проверка выполняется только при наличии конкретного правила в этом разделе (неподдерживаемые разделы или ключи приводят к ошибке policy/policy-jsonc-invalid, а не игнорируются без уведомления). Минимальный пример, охватывающий все поддерживаемые разделы:
Общие примечания, неочевидные из приведенных ниже таблиц правил:
  • Если запретить привязку к адресам, отличным от loopback, но не указать gateway.bind, будет принят стандартный вариант среды выполнения; для строгого соответствия задайте gateway.bind: "loopback".
  • Для агента с доступом только для чтения задайте параметру песочницы mode значение all или non-main в применимых настройках по умолчанию или настройках агента, а параметру workspaceAccess — значение none или ro. Отсутствующий режим песочницы или режим off не соответствует политике доступа только для чтения.
  • agents.workspace.denyTools принимает exec, process, write, edit, apply_patch. Группы запрета инструментов в конфигурации group:fs (изменение файлов) и group:runtime (командная оболочка и процессы) обеспечивают эквивалентное состояние.
  • Проверки разрешений на выполнение считывают активный артефакт exec-approvals.json только при наличии правила execApprovals; отсутствующий или недопустимый артефакт считается ненаблюдаемым свидетельством, а не искусственно успешной проверкой.
  • Свидетельства о секретах и профилях аутентификации содержат только сведения о состоянии поставщика или источника и метаданные SecretRef, но никогда не исходные значения. Policy не считывает и не подтверждает соответствие хранилищ учетных данных отдельных агентов, таких как auth-profiles.json.
  • Свидетельства об обработке данных отражают только состояние на уровне конфигурации (режим редактирования, переключатель захвата телеметрии, режим обслуживания сеансов, настройка индексирования расшифровок). Они не проверяют журналы, экспортированные данные телеметрии, расшифровки или файлы памяти, и успешный результат не доказывает отсутствие в них персональных данных или секретов.

Справочник правил Policy

Каждое приведенное ниже правило необязательно; проверка выполняется только при наличии правила. Наблюдаемое состояние — это существующая конфигурация OpenClaw или метаданные рабочего пространства.

Области с наложением правил

Используйте scopes.<scopeName>, когда отдельным агентам или каналам нужна более строгая политика, чем базовая политика верхнего уровня. Имя области — лишь метка; сопоставление выполняется по селектору внутри области. Наложения дополняют друг друга: глобальное правило продолжает действовать, а правило области может добавить собственное обнаруженное несоответствие для тех же свидетельств. Если запись agentIds отсутствует в agents.list[], OpenClaw проверяет правило области по унаследованному глобальному состоянию или состоянию по умолчанию для агента среды выполнения с указанным идентификатором, а не пропускает его.
Один и тот же агент может входить в несколько областей, если каждая область регулирует отдельное поле, как показано выше. Повторное поле области для одного агента должно быть столь же или более строгим; менее строгое повторное требование отклоняется (списки разрешений должны быть подмножествами, списки запретов — надмножествами, а обязательные логические значения неизменны). Правила состояния контейнеров (sandbox.containers.*) проверяются только по свидетельствам, которые может предоставить серверная часть песочницы соответствующего агента. Если серверная часть не может наблюдать включенное для нее правило, Policy сообщает policy/sandbox-container-posture-unobservable, а не считает проверку успешной; ограничивайте правила контейнеров областями групп агентов, использующих серверную часть, которая может предоставить эти сведения. Параметр верхнего уровня ingress.session.requireDmScope остается глобальным; session.dmScope не является свидетельством, которое можно отнести к каналу, поэтому его нельзя ограничить областью по channelIds. Каждая область в policy.jsonc должна быть допустимой и обеспечивать выполнение правил.

Каналы

Серверы MCP

Поставщики моделей

Сеть

Входящий доступ и доступ к каналам

Gateway

gateway.nodes.denyCommands — точное, чувствительное к регистру правило, требующее, чтобы множество запретов было надмножеством. Используйте его, когда политика должна доказывать, что привилегированные команды Node явно запрещены конфигурацией OpenClaw. Если развертывание намеренно разрешает привилегированную команду Node, после проверки следует обновить policy.jsonc, а не полагаться только на gateway.nodes.allowCommands.

Рабочая область агента

Режим песочницы

Политика рассматривает отсутствующее значение sandbox.mode как его неявное значение по умолчанию off, поэтому sandbox.requireMode сообщает, что новая или ненастроенная песочница не входит в список разрешенных значений, такой как ["all"].

Обработка данных

Секреты

Подтверждения выполнения

Проверки подтверждений выполнения считывают артефакт среды выполнения exec-approvals.json: по умолчанию ~/.openclaw/exec-approvals.json или $OPENCLAW_STATE_DIR/exec-approvals.json, когда задано значение OPENCLAW_STATE_DIR. Правила режима в execApprovals.defaults.* или execApprovals.agents.* требуют доступных для чтения данных артефакта; отсутствующий или недействительный артефакт считается ненаблюдаемым доказательством, а не условно успешной проверкой. Если артефакт доступен для чтения, для пропущенных полей применяются значения среды выполнения по умолчанию: отсутствующее значение defaults.security считается равным full, а при отсутствии настроек безопасности агента наследуется это значение по умолчанию. Доказательства включают defaults, agents.*, agents.*.allowlist[].pattern, необязательное значение argPattern, действующий режим autoAllowSkills и источник записи, но никогда не включают путь к сокету или токен, commandText, lastUsedCommand, разрешенные пути или временные метки. Пример: требовать артефакт подтверждений, запрещать разрешительные значения по умолчанию и допускать только проверенный режим подтверждения выполнения для выбранных агентов.

Профили аутентификации

Метаданные инструментов

Режим инструментов

Запуск проверок

Во время разработки запускайте только проверки политик:
policy check запускает только набор проверок политик и выводит свидетельства, результаты и хеши аттестации. Те же результаты также отображаются в openclaw doctor --lint, когда включён плагин Policy. Сравните файл политики оператора с подготовленной базовой политикой:
policy compare проверяет синтаксис файла политики относительно синтаксиса файла политики; эта команда не проверяет состояние среды выполнения, свидетельства, учётные данные или секреты. Она использует те же метаданные правил, которые регулируют наложения с областями действия: списки разрешений должны оставаться такими же или становиться уже, списки запретов — такими же или шире, обязательные логические значения должны сохранять своё значение, упорядоченные строки могут перемещаться только к более строгому концу заданного порядка, а точные списки должны совпадать. В качестве базовой политики можно использовать политику, подготовленную организацией; проверяемая политика может добавлять более строгие значения или дополнительные правила. Проверяемое правило верхнего уровня может удовлетворять базовому правилу с областью действия, если оно является таким же или более строгим. Имена областей действия в файлах могут не совпадать; сравнение выполняется по селектору (agentIds/channelIds) и полю. Успешное сравнение (--json):
Успешный вывод policy check --json содержит стабильные хеши, которые оператор или система надзора может сохранить:

Настройка политики

Конфигурация политики находится в plugins.entries.policy.config.
Установите для plugins.entries.policy.config.enabled значение false, чтобы отключить проверки политик для рабочей области, оставив плагин установленным.

Принятие состояния политики

Пример вывода JSON:
attestation.policy.hash идентифицирует подготовленный артефакт правил. evidence фиксирует наблюдаемое состояние OpenClaw, использованное при проверках, а workspace.hash идентифицирует этот набор свидетельств. findingsHash идентифицирует точный набор результатов. checkedAt фиксирует время выполнения проверки. attestationHash идентифицирует стабильное утверждение (хеш политики, хеш свидетельств, хеш результатов и состояние успешности) и намеренно исключает checkedAt, поэтому одно и то же состояние политики всегда создаёт один и тот же хеш аттестации. Вместе эти четыре значения образуют кортеж аудита для одной проверки политики. Если Gateway или система надзора использует политику для блокировки, одобрения или аннотирования действия среды выполнения, ей следует записать хеш аттестации из последней успешной проверки. checkedAt сохраняется в выводе JSON для журналов аудита, но не является частью стабильного хеша. Жизненный цикл принятия состояния политики:
  1. Создайте или проверьте policy.jsonc.
  2. Запустите openclaw policy check --json.
  3. Если проверка успешна, запишите attestation.policy.hash как expectedHash.
  4. Запишите attestation.attestationHash как expectedAttestationHash.
  5. Повторно запустите openclaw doctor --lint в CI или шлюзах выпуска.
Если правила политики изменяются намеренно, обновите оба принятых хеша по результатам успешной проверки. Если изменяются только параметры рабочей области (политика остаётся прежней), обычно изменяется только expectedAttestationHash. Включение или обновление правил agents.workspace добавляет свидетельства agentWorkspace в хеш рабочей области и хеш аттестации; проверьте новые свидетельства и обновите принятые хеши аттестации после включения. Включение или обновление правил режима инструментов таким же образом добавляет свидетельства toolPosture. openclaw policy watch повторно запускает проверку и сообщает, когда текущие свидетельства больше не соответствуют expectedAttestationHash:
Используйте --once в CI или сценариях, которым требуется однократная оценка отклонений. Без --once по умолчанию опрос выполняется каждые две секунды; используйте --interval-ms, чтобы изменить интервал.

Результаты проверок

Обнаруженная проблема может включать как target (объект рабочей области, который не соответствует требованиям), так и requirement (созданное правило, из-за которого это считается проблемой). Сейчас оба значения являются строками адресов oc://, однако имена полей описывают роль в политике, а не формат адреса. Примеры обнаруженных проблем:

Исправление

doctor --lint и policy check доступны только для чтения. doctor --fix изменяет управляемые политикой настройки рабочей области, только когда workspaceRepairs явно включён; в противном случае проверки сообщают, что они исправили бы, и оставляют настройки без изменений. В этой версии исправление может отключать каналы, запрещённые channels.denyRules, и применять перечисленные ниже автоматические сужающие исправления. Включайте workspaceRepairs только после проверки файла политики, поскольку допустимое правило может изменить конфигурацию рабочей области:
  • установить tools.elevated.enabled=false, когда глобальная политика запрещает инструменты с повышенными привилегиями
  • добавить отсутствующие обязательные идентификаторы запрещённых инструментов в tools.deny или agents.list[].tools.deny, когда политика требует запретить эти инструменты
  • установить небезопасные переключатели gateway.controlUi.* в false
  • установить gateway.mode=local, когда политика запрещает удалённый режим Gateway
  • установить указанные пути gateway.http.endpoints.*.enabled в false, когда политика запрещает конечные точки HTTP API Gateway
  • установить указанные пути входящего трафика канала groupPolicy в allowlist, когда политика запрещает открытый групповой входящий трафик
  • установить указанные пути входящего трафика канала requireMention в true, когда политика требует упоминаний в группах
  • установить logging.redactSensitive=tools, когда политика требует редактирования конфиденциальных данных в журналах
  • установить diagnostics.otel.captureContent=false или diagnostics.otel.captureContent.enabled=false для настроек сбора телеметрии в форме объекта, когда политика запрещает сбор содержимого телеметрии
Исправления инструментов с повышенными привилегиями в заданной области доступны только для обнаружения. Исправления обработки данных в заданной области также пропускаются, когда результат проверки сообщает об общей конфигурации журналирования или телеметрии, поскольку изменение общей настройки затронуло бы не только цель политики в заданной области. Исправления обязательных запретов в заданной области пропускаются, когда результат проверки сообщает об унаследованном корневом tools.deny, поскольку добавление обязательного инструмента в корневую конфигурацию затронуло бы не только цель политики в заданной области. Исправления обязательных запретов на уровне агента могут обновлять указанный путь agents.list[].tools.deny. Исправления входящего трафика канала в заданной области пропускаются, когда результат проверки сообщает об унаследованном channels.defaults.*, поскольку изменение общего значения канала по умолчанию затронуло бы не только цель политики в заданной области. Результаты проверки списка разрешённых адресов для получения URL через HTTP в Gateway по-прежнему требуют ручного исправления, поскольку автоматическое исправление не может выбрать правильные значения списка разрешённых URL конечных точек. Результаты проверки привязки Gateway и команд узлов по-прежнему требуют проверки. Когда policy/gateway-non-loopback-bind или policy/gateway-node-command-denied можно сопоставить с путём конфигурации, doctor --fix сообщает о предлагаемом изменении gateway.bind или gateway.nodes.denyCommands как о пропущенной предварительной рекомендации. Изменение не применяется, а результат проверки не считается исправленным, пока оператор не проверит и не обновит конфигурацию или политику.

Коды завершения

Связанные материалы