Открытый текст по-прежнему работает. SecretRefs включаются отдельно для каждых учетных данных.
Цели и модель runtime
Секреты разрешаются в снимок runtime в памяти.- Разрешение выполняется заранее во время активации, а не лениво на путях запросов.
- Запуск быстро завершается с ошибкой, когда фактически активный SecretRef не может быть разрешен.
- Перезагрузка использует атомарную замену: полный успех или сохранение последнего заведомо исправного снимка.
- Нарушения политики SecretRef (например, профили авторизации в режиме OAuth в сочетании с входными данными SecretRef) приводят к ошибке активации до замены runtime.
- Runtime-запросы читают только из активного снимка в памяти.
- После первой успешной активации/загрузки конфигурации пути кода runtime продолжают читать этот активный снимок в памяти, пока успешная перезагрузка не заменит его.
- Пути исходящей доставки также читают из этого активного снимка (например, доставка ответов/тредов Discord и отправка действий Telegram); они не разрешают SecretRefs заново при каждой отправке.
Граница доступа агента
SecretRefs защищают учетные данные от сохранения в поддерживаемой конфигурации и сгенерированных модельных поверхностях, но они не являются границей изоляции процесса. Если учетные данные в открытом тексте остаются на диске в пути, который агент может читать, агент может обойти редактирование на уровне API, используя файловые или shell-инструменты для просмотра этого файла. Для production-развертываний, где файлы, доступные агенту, входят в область риска, считайте миграцию SecretRef завершенной только когда выполнены все условия:- поддерживаемые учетные данные используют SecretRefs вместо значений в открытом тексте
- устаревшие остатки открытого текста удалены из
openclaw.json,auth-profiles.json,.envи сгенерированных файловmodels.json openclaw secrets audit --checkпроходит без замечаний после миграции- все оставшиеся неподдерживаемые или ротируемые учетные данные защищены изоляцией операционной системы, изоляцией контейнера или внешним прокси учетных данных
Фильтрация активных поверхностей
SecretRefs проверяются только на фактически активных поверхностях.- Включенные поверхности: неразрешенные ссылки блокируют запуск/перезагрузку.
- Неактивные поверхности: неразрешенные ссылки не блокируют запуск/перезагрузку.
- Неактивные ссылки выдают нефатальные диагностические сообщения с кодом
SECRETS_REF_IGNORED_INACTIVE_SURFACE.
Примеры неактивных поверхностей
Примеры неактивных поверхностей
- Отключенные записи каналов/аккаунтов.
- Учетные данные канала верхнего уровня, которые не наследует ни один включенный аккаунт.
- Отключенные поверхности инструментов/функций.
- Ключи, специфичные для поставщика веб-поиска, который не выбран в
tools.web.search.provider. В автоматическом режиме (поставщик не задан) ключи проверяются по приоритету для автоопределения поставщика, пока один из них не разрешится. После выбора ключи невыбранных поставщиков считаются неактивными, пока не будут выбраны. - Материал SSH-авторизации sandbox (
agents.defaults.sandbox.ssh.identityData,certificateData,knownHostsData, плюс переопределения на уровне агента) активен только когда эффективный backend sandbox равенsshдля агента по умолчанию или включенного агента. - SecretRefs
gateway.remote.token/gateway.remote.passwordактивны, если верно одно из следующих условий:gateway.mode=remote- настроен
gateway.remote.url gateway.tailscale.modeравенserveилиfunnel- В локальном режиме без этих удаленных поверхностей:
gateway.remote.tokenактивен, когда token auth может победить и env/auth-токен не настроен.gateway.remote.passwordактивен только когда password auth может победить и env/auth-пароль не настроен.
- SecretRef
gateway.auth.tokenнеактивен для разрешения авторизации при запуске, когда заданOPENCLAW_GATEWAY_TOKEN, потому что входной env-токен побеждает для этого runtime.
Диагностика поверхности авторизации Gateway
Когда SecretRef настроен вgateway.auth.token, gateway.auth.password, gateway.remote.token или gateway.remote.password, запуск/перезагрузка Gateway явно логирует состояние поверхности:
active: SecretRef является частью эффективной поверхности авторизации и должен разрешаться.inactive: SecretRef игнорируется для этого runtime, потому что побеждает другая поверхность авторизации или потому что удаленная авторизация отключена/неактивна.
SECRETS_GATEWAY_AUTH_SURFACE и включают причину, использованную политикой активных поверхностей, чтобы вы могли видеть, почему учетные данные были признаны активными или неактивными.
Предварительная проверка ссылок при onboarding
Когда onboarding выполняется в интерактивном режиме и вы выбираете хранилище SecretRef, OpenClaw выполняет предварительную проверку перед сохранением:- Env-ссылки: проверяет имя env var и подтверждает, что непустое значение видно во время настройки.
- Ссылки поставщиков (
fileилиexec): проверяет выбор поставщика, разрешаетidи проверяет тип разрешенного значения. - Путь повторного использования quickstart: когда
gateway.auth.tokenуже является SecretRef, onboarding разрешает его перед probe/bootstrap dashboard (для ссылокenv,fileиexec), используя тот же fail-fast gate.
Контракт SecretRef
Используйте одну форму объекта везде:- env
- file
- exec
providerдолжен соответствовать^[a-z][a-z0-9_-]{0,63}$idдолжен соответствовать^[A-Z][A-Z0-9_]{0,127}$
Конфигурация поставщика
Определяйте поставщиков вsecrets.providers:
Env-поставщик
Env-поставщик
- Необязательный allowlist через
allowlist. - Отсутствующие/пустые env-значения приводят к ошибке разрешения.
File-поставщик
File-поставщик
- Читает локальный файл из
path. mode: "json"ожидает payload JSON-объекта и разрешаетidкак pointer.mode: "singleValue"ожидает ref id"value"и возвращает содержимое файла.- Путь должен пройти проверки владельца/разрешений.
- Примечание о fail-closed в Windows: если проверка ACL недоступна для пути, разрешение завершается ошибкой. Только для доверенных путей задайте
allowInsecurePath: trueу этого поставщика, чтобы обойти проверки безопасности пути.
Exec-поставщик
Exec-поставщик
- Запускает настроенный абсолютный путь к бинарному файлу, без shell.
- По умолчанию
commandдолжен указывать на обычный файл (не symlink). - Задайте
allowSymlinkCommand: true, чтобы разрешить symlink-пути команд (например, shims Homebrew). OpenClaw проверяет разрешенный целевой путь. - Сочетайте
allowSymlinkCommandсtrustedDirsдля путей package-manager (например,["/opt/homebrew"]). - Поддерживает timeout, no-output timeout, ограничения байтов вывода, env allowlist и trusted dirs.
- Примечание о fail-closed в Windows: если проверка ACL недоступна для пути команды, разрешение завершается ошибкой. Только для доверенных путей задайте
allowInsecurePath: trueу этого поставщика, чтобы обойти проверки безопасности пути. - Exec-поставщики, управляемые Plugin, могут использовать
pluginIntegrationвместо скопированныхcommand/args. OpenClaw разрешает текущие сведения о команде из манифеста установленного Plugin во время запуска/перезагрузки. Если Plugin отключен, удален, недоверенный или больше не объявляет интеграцию, активные SecretRefs, использующие этого поставщика, завершаются fail-closed.
API-ключи на базе файлов
Не помещайте строкиfile:... в блок конфигурации env. Блок env
литеральный и не переопределяющий, поэтому file:... не разрешается.
Вместо этого используйте файловый SecretRef в поддерживаемом поле учетных данных:
mode: "singleValue" SecretRef id равен "value". Для
mode: "json" используйте абсолютный JSON pointer, например
"/providers/xai/apiKey".
См. поверхность учетных данных SecretRef, чтобы узнать,
какие поля конфигурации принимают SecretRefs.
Примеры exec-интеграции
1Password CLI
1Password CLI
Bitwarden Secrets Manager (`bws`)
Bitwarden Secrets Manager (`bws`)
Используйте оболочку-резолвер, если хотите, чтобы идентификаторы SecretRef сопоставлялись с ключами элементов Bitwarden
Secrets Manager. Репозиторий включает
Резолвер объединяет запрошенные идентификаторы в пакет, выполняет
scripts/secrets/openclaw-bws-resolver.mjs; установите или скопируйте его в абсолютный
доверенный путь на хосте, где работает Gateway.Требования:- CLI Bitwarden Secrets Manager (
bws) установлен на хосте Gateway. BWS_ACCESS_TOKENдоступен сервису Gateway.PATHпередан в резолвер илиBWS_BINзадан как абсолютный путь к бинарному файлуbws.BWS_SERVER_URLдолжен быть задан в среде при использовании самостоятельно размещенного экземпляра Bitwarden.
bws secret list и возвращает
значения для совпадающих полей секрета key. Используйте ключи, которые удовлетворяют контракту идентификатора
SecretRef для exec, например openclaw/providers/openai/apiKey; ключи
в стиле переменных среды с подчеркиваниями отклоняются до запуска резолвера. Если более
одного видимого секрета Bitwarden имеет один и тот же запрошенный ключ, резолвер
помечает этот идентификатор как неоднозначный вместо выбора одного. После обновления конфигурации
проверьте путь резолвера:HashiCorp Vault CLI
HashiCorp Vault CLI
password-store (`pass`)
password-store (`pass`)
Используйте небольшую оболочку-резолвер, если хотите, чтобы идентификаторы SecretRef напрямую сопоставлялись с
записями Затем настройте exec-провайдер и укажите для Храните секрет в первой строке записи
pass. Сохраните ее как исполняемый файл по абсолютному пути, который проходит
проверки путей вашего exec-провайдера, например
/usr/local/bin/openclaw-pass-resolver. Шебанг #!/usr/bin/env node
находит node из PATH процесса резолвера, поэтому включите PATH в
passEnv. Если pass отсутствует в этом PATH, задайте PASS_BIN в родительской
среде и также включите его в passEnv:apiKey путь к записи pass:pass или настройте
оболочку, если хотите вместо этого возвращать полный вывод pass show. После
обновления конфигурации проверьте и статический аудит, и путь exec-резолвера:sops
sops
Переменные среды MCP-сервера
Переменные среды MCP-сервера, настроенные черезplugins.entries.acpx.config.mcpServers, поддерживают SecretInput. Это не позволяет API-ключам и токенам попадать в конфигурацию в открытом виде:
${MCP_SERVER_API_KEY}, и объекты SecretRef разрешаются во время активации Gateway до запуска процесса MCP-сервера. Как и на других поверхностях SecretRef, неразрешенные ссылки блокируют активацию только тогда, когда Plugin acpx фактически активен.
Материалы SSH-аутентификации песочницы
Базовый бэкенд песочницыssh также поддерживает SecretRef для материалов SSH-аутентификации:
- OpenClaw разрешает эти ссылки при активации песочницы, а не отложенно при каждом SSH-вызове.
- Разрешенные значения записываются во временные файлы с ограничительными правами и используются в сгенерированной SSH-конфигурации.
- Если эффективный бэкенд песочницы не
ssh, эти ссылки остаются неактивными и не блокируют запуск.
Поддерживаемая поверхность учетных данных
Канонические поддерживаемые и неподдерживаемые учетные данные перечислены здесь:Учетные данные, создаваемые во время выполнения или ротируемые, а также материалы обновления OAuth намеренно исключены из разрешения SecretRef только для чтения.
Обязательное поведение и приоритет
- Поле без ссылки: без изменений.
- Поле со ссылкой: обязательно на активных поверхностях во время активации.
- Если присутствуют и значение в открытом виде, и ссылка, ссылка имеет приоритет на поддерживаемых путях приоритета.
- Маркер редактирования
__OPENCLAW_REDACTED__зарезервирован для внутреннего редактирования/восстановления конфигурации и отклоняется как буквальные отправленные данные конфигурации.
SECRETS_REF_OVERRIDES_PLAINTEXT(предупреждение времени выполнения)REF_SHADOWED(результат аудита, когда учетные данныеauth-profiles.jsonимеют приоритет над ссылкамиopenclaw.json)
serviceAccountRefимеет приоритет надserviceAccountв открытом виде.- Значение в открытом виде игнорируется, когда соседняя ссылка задана.
Триггеры активации
Активация секретов запускается при:- Запуске (предварительная проверка плюс финальная активация)
- Горячем применении перезагрузки конфигурации
- Проверке перезапуска при перезагрузке конфигурации
- Ручной перезагрузке через
secrets.reload - Предварительной проверке Gateway config write RPC (
config.set/config.apply/config.patch) на разрешимость SecretRef активной поверхности в отправленной конфигурационной нагрузке до сохранения изменений
- Успех атомарно заменяет снимок.
- Ошибка запуска прерывает запуск Gateway.
- Ошибка перезагрузки во время выполнения сохраняет последний заведомо исправный снимок.
- Ошибка предварительной проверки write-RPC отклоняет отправленную конфигурацию и оставляет как конфигурацию на диске, так и активный снимок времени выполнения без изменений.
- Передача явного токена канала для отдельного вызова outbound helper/tool не запускает активацию SecretRef; точками активации остаются запуск, перезагрузка и явный
secrets.reload.
Сигналы ухудшения и восстановления
Когда активация во время перезагрузки завершается неудачей после исправного состояния, OpenClaw входит в ухудшенное состояние секретов. Однократное системное событие и коды журналов:SECRETS_RELOADER_DEGRADEDSECRETS_RELOADER_RECOVERED
- Ухудшенное состояние: среда выполнения сохраняет последний заведомо исправный снимок.
- Восстановлено: отправляется один раз после следующей успешной активации.
- Повторные ошибки, когда система уже в ухудшенном состоянии, записывают предупреждения, но не создают поток событий.
- Быстрое завершение при ошибке запуска не отправляет события ухудшенного состояния, потому что среда выполнения так и не стала активной.
Разрешение путей команд
Пути команд могут включить поддерживаемое разрешение SecretRef через RPC снимка Gateway. Существует два общих варианта поведения:- Строгие пути команд
- Пути команд только для чтения
Например, пути удаленной памяти
openclaw memory и openclaw qr --remote, когда им нужны удаленные ссылки на общий секрет. Они читают из активного снимка и быстро завершаются ошибкой, если требуемый SecretRef недоступен.- Обновление снимка после ротации секрета в backend выполняется командой
openclaw secrets reload. - Метод Gateway RPC, используемый этими путями команд:
secrets.resolve.
Рабочий процесс аудита и настройки
Стандартный поток оператора: Не считайте миграцию завершенной, пока повторный аудит не пройдет без замечаний. Если аудит все еще сообщает о значениях в открытом виде в состоянии покоя, риск доступа агента сохраняется, даже когда runtime API возвращают отредактированные значения. Если вы сохраняете план вместо применения во времяconfigure, примените этот сохраненный план
с помощью openclaw secrets apply --from <plan-path> перед повторным аудитом.
secrets audit
secrets audit
Находки включают:
- значения в открытом виде в состоянии покоя (
openclaw.json,auth-profiles.json,.envи сгенерированныеagents/*/agent/models.json) - остатки чувствительных provider-заголовков в открытом виде в сгенерированных записях
models.json - неразрешенные refs
- затенение приоритета (
auth-profiles.jsonполучает приоритет над refs изopenclaw.json) - устаревшие остатки (
auth.json, напоминания OAuth)
- По умолчанию аудит пропускает проверки разрешимости exec SecretRef, чтобы избежать побочных эффектов команд.
- Используйте
openclaw secrets audit --allow-exec, чтобы выполнять exec providers во время аудита.
- Обнаружение чувствительных provider-заголовков основано на эвристике имен (распространенные имена и фрагменты заголовков auth/учетных данных, такие как
authorization,x-api-key,token,secret,passwordиcredential).
secrets configure
secrets configure
Интерактивный помощник, который:
- сначала настраивает
secrets.providers(env/file/exec, добавить/изменить/удалить) - позволяет выбрать поддерживаемые поля с секретами в
openclaw.jsonплюсauth-profiles.jsonдля одной области агента - может создать новое сопоставление
auth-profiles.jsonпрямо в выборе цели - собирает данные SecretRef (
source,provider,id) - запускает предварительное разрешение
- может применить изменения сразу
- Предварительная проверка пропускает проверки exec SecretRef, если не задан
--allow-exec. - Если вы применяете напрямую из
configure --applyи план содержит exec refs/providers, оставьте--allow-execзаданным и для шага применения.
openclaw secrets configure --providers-onlyopenclaw secrets configure --skip-provider-setupopenclaw secrets configure --agent <id>
configure по умолчанию:- очищать совпадающие статические учетные данные из
auth-profiles.jsonдля целевых providers - очищать устаревшие статические записи
api_keyизauth.json - очищать совпадающие известные строки секретов из
<config-dir>/.env
secrets apply
secrets apply
Применить сохраненный план:Примечание об exec:
- dry-run пропускает exec-проверки, если не задан
--allow-exec. - режим записи отклоняет планы, содержащие exec SecretRefs/providers, если не задан
--allow-exec.
Односторонняя политика безопасности
Модель безопасности:- предварительная проверка должна пройти успешно до режима записи
- активация runtime проверяется перед commit
- apply обновляет файлы с помощью атомарной замены файлов и best-effort восстановления при сбое
Примечания о совместимости устаревшей auth
Для статических учетных данных runtime больше не зависит от устаревшего хранилища auth в открытом виде.- Источник учетных данных runtime — разрешенный снимок в памяти.
- Устаревшие статические записи
api_keyочищаются при обнаружении. - Поведение совместимости, связанное с OAuth, остается отдельным.
Примечание о Web UI
Некоторые объединения SecretInput проще настраивать в режиме raw editor, чем в режиме формы.Связанные материалы
- Authentication — настройка auth
- CLI: secrets — команды CLI
- Environment Variables — приоритет environment
- SecretRef Credential Surface — поверхность учетных данных
- Secrets Apply Plan Contract — подробности контракта плана
- Security — состояние безопасности