Керування секретами
OpenClaw підтримує адитивні SecretRef, щоб підтримувані облікові дані не потрібно було зберігати у відкритому вигляді в конфігурації. Відкритий текст усе ще працює. SecretRef — це необов’язковий механізм для кожного окремого облікового даного.Цілі та модель runtime
Секрети визначаються в runtime-знімок у пам’яті.- Визначення виконується eagerly під час активації, а не ліниво в шляхах запитів.
- Під час запуску відбувається швидке завершення, якщо ефективно активний SecretRef не вдається визначити.
- Перезавантаження використовує атомарну заміну: або повний успіх, або збереження останнього відомого робочого знімка.
- Порушення політики SecretRef (наприклад, профілі автентифікації в режимі OAuth у поєднанні з вхідними даними SecretRef) призводять до відмови активації до заміни runtime-знімка.
- Runtime-запити читають лише з активного знімка в пам’яті.
- Після першого успішного завантаження/активації конфігурації код runtime продовжує читати цей активний знімок у пам’яті, доки успішне перезавантаження не замінить його.
- Шляхи вихідної доставки також читають з цього активного знімка (наприклад, доставка відповідей/тредів Discord і надсилання дій Telegram); вони не перевизначають SecretRef заново для кожного надсилання.
Фільтрація активних поверхонь
SecretRef перевіряються лише на ефективно активних поверхнях.- Активні поверхні: невизначені refs блокують запуск/перезавантаження.
- Неактивні поверхні: невизначені refs не блокують запуск/перезавантаження.
- Неактивні refs видають нефатальні діагностичні повідомлення з кодом
SECRETS_REF_IGNORED_INACTIVE_SURFACE.
- Вимкнені записи каналів/облікових записів.
- Облікові дані каналів верхнього рівня, які не успадковуються жодним увімкненим обліковим записом.
- Вимкнені поверхні інструментів/можливостей.
- Ключі, специфічні для провайдера вебпошуку, які не вибрані через
tools.web.search.provider. У режимі auto (коли провайдер не задано) ключі використовуються за пріоритетом для автовизначення провайдера, доки один із них не визначиться. Після вибору ключі невибраних провайдерів вважаються неактивними, доки не будуть вибрані. - Дані SSH-автентифікації sandbox (
agents.defaults.sandbox.ssh.identityData,certificateData,knownHostsData, а також перевизначення для окремих агентів) активні лише тоді, коли ефективний бекенд sandbox —sshдля типового агента або ввімкненого агента. - SecretRef
gateway.remote.token/gateway.remote.passwordактивні, якщо виконується одна з умов:gateway.mode=remote- налаштовано
gateway.remote.url gateway.tailscale.modeмає значенняserveабоfunnel- У локальному режимі без цих віддалених поверхонь:
gateway.remote.tokenактивний, коли може перемогти автентифікація токеном і не налаштовано токен env/auth.gateway.remote.passwordактивний лише тоді, коли може перемогти автентифікація паролем і не налаштовано пароль env/auth.
- SecretRef
gateway.auth.tokenнеактивний для визначення стартової автентифікації, коли заданоOPENCLAW_GATEWAY_TOKEN, оскільки для цього runtime вхідний токен із env має пріоритет.
Діагностика поверхні автентифікації 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 refs: перевіряє ім’я змінної середовища й підтверджує, що під час налаштування видно непорожнє значення.
- Provider refs (
fileабоexec): перевіряє вибір провайдера, визначаєidі перевіряє тип визначеного значення. - Шлях повторного використання quickstart: коли
gateway.auth.tokenуже є SecretRef, onboarding визначає його перед probe/bootstrap панелі керування (для refsenv,fileіexec) за тим самим fail-fast бар’єром.
Контракт SecretRef
Використовуйте один об’єктний формат усюди:source: "env"
providerмає відповідати^[a-z][a-z0-9_-]{0,63}$idмає відповідати^[A-Z][A-Z0-9_]{0,127}$
source: "file"
providerмає відповідати^[a-z][a-z0-9_-]{0,63}$idмає бути абсолютним JSON pointer (/...)- Екранування RFC6901 у сегментах:
~=>~0,/=>~1
source: "exec"
providerмає відповідати^[a-z][a-z0-9_-]{0,63}$idмає відповідати^[A-Za-z0-9][A-Za-z0-9._:/-]{0,255}$idне повинен містити.або..як сегменти шляху, розділені слешами (наприклад,a/../bвідхиляється)
Конфігурація провайдера
Визначайте провайдерів уsecrets.providers:
Провайдер env
- Необов’язковий список дозволу через
allowlist. - Відсутні/порожні значення env призводять до помилки визначення.
Провайдер file
- Читає локальний файл зі шляху
path. mode: "json"очікує JSON-об’єкт і визначаєidяк pointer.mode: "singleValue"очікує ref id"value"і повертає вміст файла.- Шлях має проходити перевірки власника/прав доступу.
- Примітка fail-closed для Windows: якщо для шляху недоступна перевірка ACL, визначення завершується помилкою. Лише для довірених шляхів установіть
allowInsecurePath: trueдля цього провайдера, щоб обійти перевірки безпеки шляху.
Провайдер exec
- Запускає налаштований абсолютний шлях до бінарника, без shell.
- Типово
commandмає вказувати на звичайний файл (не symlink). - Установіть
allowSymlinkCommand: true, щоб дозволити шляхи команд через symlink (наприклад, shim-файли Homebrew). OpenClaw перевіряє визначений цільовий шлях. - Поєднуйте
allowSymlinkCommandзtrustedDirsдля шляхів пакетних менеджерів (наприклад,["/opt/homebrew"]). - Підтримує timeout, timeout без виводу, обмеження байтів виводу, allowlist env і довірені каталоги.
- Примітка fail-closed для Windows: якщо для шляху команди недоступна перевірка ACL, визначення завершується помилкою. Лише для довірених шляхів установіть
allowInsecurePath: trueдля цього провайдера, щоб обійти перевірки безпеки шляху.
Приклади інтеграції exec
1Password CLI
HashiCorp Vault CLI
sops
Змінні середовища сервера MCP
Змінні середовища сервера MCP, налаштовані черезplugins.entries.acpx.config.mcpServers, підтримують SecretInput. Це дозволяє не зберігати ключі API й токени у відкритому вигляді в конфігурації:
${MCP_SERVER_API_KEY} і об’єкти SecretRef визначаються під час активації gateway до запуску процесу сервера MCP. Як і для інших поверхонь SecretRef, невизначені refs блокують активацію лише тоді, коли плагін acpx є ефективно активним.
Дані SSH-автентифікації sandbox
Базовий бекенд sandboxssh також підтримує SecretRef для даних SSH-автентифікації:
- OpenClaw визначає ці refs під час активації sandbox, а не ліниво під час кожного виклику SSH.
- Визначені значення записуються у тимчасові файли з жорсткими правами доступу і використовуються у згенерованій конфігурації SSH.
- Якщо ефективний бекенд sandbox не є
ssh, ці refs залишаються неактивними й не блокують запуск.
Підтримувана поверхня облікових даних
Канонічний список підтримуваних і непідтримуваних облікових даних наведено в: Runtime-створювані або ротаційні облікові дані й матеріали оновлення OAuth навмисно виключені з визначення SecretRef у режимі лише для читання.Обов’язкова поведінка і пріоритет
- Поле без ref: без змін.
- Поле з ref: обов’язкове на активних поверхнях під час активації.
- Якщо присутні і відкритий текст, і ref, на підтримуваних шляхах пріоритету перевага надається ref.
- Sentinel маскування
__OPENCLAW_REDACTED__зарезервовано для внутрішнього маскування/відновлення конфігурації й відхиляється як буквальні подані дані конфігурації.
SECRETS_REF_OVERRIDES_PLAINTEXT(runtime-попередження)REF_SHADOWED(аудиторська знахідка, коли облікові дані вauth-profiles.jsonмають пріоритет над refs вopenclaw.json)
serviceAccountRefмає пріоритет над відкритим текстомserviceAccount.- Значення відкритого тексту ігнорується, коли задано sibling ref.
Тригери активації
Активація секретів запускається під час:- запуску (preflight плюс фінальна активація)
- шляху hot-apply перезавантаження конфігурації
- шляху restart-check перезавантаження конфігурації
- ручного перезавантаження через
secrets.reload - preflight RPC запису конфігурації gateway (
config.set/config.apply/config.patch) для можливості визначення SecretRef на активній поверхні в поданому пейлоаді конфігурації до збереження змін
- Успіх атомарно замінює знімок.
- Помилка запуску перериває запуск gateway.
- Помилка runtime-перезавантаження зберігає останній відомий робочий знімок.
- Помилка preflight RPC запису відхиляє подану конфігурацію й залишає без змін і конфігурацію на диску, і активний runtime-знімок.
- Передавання явного токена каналу для окремого виклику допоміжної функції/інструмента вихідної доставки не запускає активацію SecretRef; точками активації залишаються запуск, перезавантаження та явний
secrets.reload.
Сигнали degraded і recovered
Коли активація під час перезавантаження не проходить після здорового стану, OpenClaw переходить у degraded-стан секретів. Одноразові коди системних подій і журналів:SECRETS_RELOADER_DEGRADEDSECRETS_RELOADER_RECOVERED
- Degraded: runtime зберігає останній відомий робочий знімок.
- Recovered: видається один раз після наступної успішної активації.
- Повторні збої, коли система вже в degraded-стані, журналюють попередження, але не засмічують подіями.
- Швидке завершення під час запуску не видає degraded-подій, оскільки runtime так і не став активним.
Визначення в шляхах команд
Шляхи команд можуть використовувати підтримуване визначення SecretRef через snapshot RPC gateway. Є дві широкі моделі поведінки:- Строгі шляхи команд (наприклад, віддалені шляхи пам’яті
openclaw memoryіopenclaw qr --remote, коли їм потрібні віддалені shared-secret refs) читають з активного знімка і завершуються швидко з помилкою, коли потрібний SecretRef недоступний. - Шляхи команд лише для читання (наприклад,
openclaw status,openclaw status --all,openclaw channels status,openclaw channels resolve,openclaw security auditі потоки лише для читання в doctor/config repair) також надають перевагу активному знімку, але деградують замість переривання, коли цільовий SecretRef недоступний у цьому шляху команд.
- Коли gateway запущено, ці команди спочатку читають з активного знімка.
- Якщо визначення через gateway неповне або gateway недоступний, вони намагаються виконати локальний цільовий резервний варіант для конкретної поверхні команди.
- Якщо цільовий SecretRef усе ще недоступний, команда продовжується з degraded-виводом лише для читання та явною діагностикою на кшталт «налаштовано, але недоступно в цьому шляху команди».
- Ця degraded-поведінка є локальною для команди. Вона не послаблює запуск runtime, перезавантаження або шляхи надсилання/автентифікації.
- Оновлення snapshot після ротації секретів у бекенді виконується через
openclaw secrets reload. - Метод Gateway RPC, який використовується цими шляхами команд:
secrets.resolve.
Робочий процес аудиту й налаштування
Типовий потік для оператора:secrets audit
Знахідки включають:
- значення відкритого тексту в стані спокою (
openclaw.json,auth-profiles.json,.envі згенерованіagents/*/agent/models.json) - залишки чутливих заголовків провайдерів у відкритому тексті в згенерованих записах
models.json - невизначені refs
- затінення пріоритету (
auth-profiles.jsonмає пріоритет над refs зopenclaw.json) - застарілі залишки (
auth.json, нагадування OAuth)
- Типово audit пропускає перевірки можливості визначення exec SecretRef, щоб уникати побічних ефектів команд.
- Використовуйте
openclaw secrets audit --allow-exec, щоб виконувати exec-провайдери під час аудиту.
- Виявлення чутливих заголовків провайдера базується на евристиках назв (типові назви та фрагменти заголовків автентифікації/облікових даних, такі як
authorization,x-api-key,token,secret,passwordіcredential).
secrets configure
Інтерактивний помічник, який:
- спочатку налаштовує
secrets.providers(env/file/exec, додавання/редагування/видалення) - дозволяє вибрати підтримувані поля з секретами в
openclaw.jsonіauth-profiles.jsonдля однієї області агента - може безпосередньо створити нове зіставлення
auth-profiles.jsonу виборі цілі - збирає деталі SecretRef (
source,provider,id) - запускає preflight-визначення
- може відразу застосувати зміни
- Preflight пропускає перевірки 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 apply:
- очищає відповідні статичні облікові дані з
auth-profiles.jsonдля цільових провайдерів - очищає застарілі статичні записи
api_keyзauth.json - очищає відповідні відомі рядки секретів з
<config-dir>/.env
secrets apply
Застосування збереженого плану:
- dry-run пропускає перевірки exec, якщо не задано
--allow-exec. - Режим запису відхиляє плани, що містять exec SecretRef/providers, якщо не задано
--allow-exec.
Політика односпрямованої безпеки
OpenClaw навмисно не записує резервні копії для відкату, які містять історичні значення секретів у відкритому вигляді. Модель безпеки:- preflight має успішно завершитися до режиму запису
- активація runtime перевіряється до commit
- apply оновлює файли через атомарну заміну файлів і best-effort відновлення в разі збою
Примітки щодо сумісності із застарілою автентифікацією
Для статичних облікових даних runtime більше не залежить від застарілого сховища автентифікації у відкритому вигляді.- Джерело облікових даних runtime — визначений знімок у пам’яті.
- Застарілі статичні записи
api_keyочищаються після виявлення. - Поведінка сумісності, пов’язана з OAuth, залишається окремою.
Примітка щодо Web UI
Деякі об’єднання SecretInput простіше налаштовувати в режимі raw editor, ніж у режимі форми.Пов’язана документація
- Команди CLI: secrets
- Докладно про контракт плану: Контракт плану застосування секретів
- Поверхня облікових даних: Поверхня облікових даних SecretRef
- Налаштування автентифікації: Автентифікація
- Модель безпеки: Безпека
- Пріоритет середовища: Змінні середовища