Відкритий текст усе ще працює. SecretRefs вмикаються окремо для кожного облікового даного.
Цілі та модель виконання
Секрети розв’язуються в знімок виконання в пам’яті.- Розв’язання виконується завчасно під час активації, а не ліниво на шляхах запитів.
- Запуск швидко завершується з помилкою, коли фактично активний SecretRef не може бути розв’язаний.
- Перезавантаження використовує атомарну заміну: повний успіх або збереження останнього відомого справного знімка.
- Порушення політики SecretRef (наприклад, профілі автентифікації в режимі OAuth у поєднанні з введенням SecretRef) зупиняють активацію до заміни середовища виконання.
- Запити виконання читають лише з активного знімка в пам’яті.
- Після першої успішної активації/завантаження конфігурації шляхи коду виконання продовжують читати цей активний знімок у пам’яті, доки успішне перезавантаження не замінить його.
- Шляхи вихідної доставки також читають із цього активного знімка (наприклад, доставка відповідей/тредів Discord і надсилання дій Telegram); вони не розв’язують SecretRefs повторно під час кожного надсилання.
Межа доступу агента
SecretRefs захищають облікові дані від збереження в підтримуваній конфігурації та згенерованих поверхнях моделей, але вони не є межею ізоляції процесу. Якщо облікові дані у відкритому тексті залишаються на диску в шляху, який агент може читати, агент може обійти редагування на рівні API, використовуючи файлові або shell-інструменти для перевірки цього файла. Для виробничих розгортань, де файли, доступні агенту, входять у сферу ризику, вважайте міграцію 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 для пісочниці (
agents.defaults.sandbox.ssh.identityData,certificateData,knownHostsData, а також перевизначення для окремих агентів) активний лише тоді, коли ефективний бекенд пісочниці єsshдля агента за замовчуванням або увімкненого агента. - SecretRefs
gateway.remote.token/gateway.remote.passwordактивні, якщо виконується одна з цих умов:gateway.mode=remote- налаштовано
gateway.remote.url gateway.tailscale.modeмає значенняserveабоfunnel- У локальному режимі без цих віддалених поверхонь:
gateway.remote.tokenактивний, коли автентифікація токеном може перемогти й не налаштовано env/auth token.gateway.remote.passwordактивний лише тоді, коли автентифікація паролем може перемогти й не налаштовано env/auth password.
- SecretRef
gateway.auth.tokenнеактивний для розв’язання автентифікації під час запуску, коли заданоOPENCLAW_GATEWAY_TOKEN, оскільки введення токена з env перемагає для цього середовища виконання.
Діагностика поверхні автентифікації Gateway
Коли SecretRef налаштовано наgateway.auth.token, gateway.auth.password, gateway.remote.token або gateway.remote.password, запуск/перезавантаження gateway явно журналює стан поверхні:
active: SecretRef є частиною ефективної поверхні автентифікації та має розв’язатися.inactive: SecretRef ігнорується для цього середовища виконання, тому що перемагає інша поверхня автентифікації або тому що віддалену автентифікацію вимкнено/не активовано.
SECRETS_GATEWAY_AUTH_SURFACE і містять причину, використану політикою активної поверхні, тож ви можете побачити, чому облікові дані вважалися активними або неактивними.
Попередня перевірка посилань під час онбордингу
Коли онбординг запускається в інтерактивному режимі й ви вибираєте зберігання SecretRef, OpenClaw виконує попередню перевірку перед збереженням:- Env refs: перевіряє ім’я змінної env і підтверджує, що непорожнє значення видиме під час налаштування.
- Provider refs (
fileабоexec): перевіряє вибір постачальника, розв’язуєidі перевіряє тип розв’язаного значення. - Шлях повторного використання Quickstart: коли
gateway.auth.tokenуже є SecretRef, онбординг розв’язує його перед bootstrap probe/dashboard (для посиланьenv,fileіexec) за допомогою того самого fail-fast шлюзу.
Контракт 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
- Запускає налаштований абсолютний шлях до binary, без shell.
- За замовчуванням
commandмає вказувати на звичайний файл (не symlink). - Установіть
allowSymlinkCommand: true, щоб дозволити шляхи команд symlink (наприклад, Homebrew shims). OpenClaw перевіряє розв’язаний цільовий шлях. - Поєднуйте
allowSymlinkCommandізtrustedDirsдля шляхів package-manager (наприклад,["/opt/homebrew"]). - Підтримує timeout, no-output timeout, обмеження байтів виводу, allowlist env і довірені каталоги.
- Примітка про fail-closed у Windows: якщо перевірка ACL недоступна для шляху команди, розв’язання завершується помилкою. Лише для довірених шляхів установіть
allowInsecurePath: trueдля цього постачальника, щоб обійти перевірки безпеки шляху. - Керовані Plugin постачальники exec можуть використовувати
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.Вимоги:- Bitwarden Secrets Manager CLI (
bws) установлено на хості Gateway. BWS_ACCESS_TOKENдоступний службі Gateway.PATHпередано до резолвера, абоBWS_BINзадано як абсолютний шлях до бінарного файлуbws.BWS_SERVER_URLмає бути задано в середовищі під час використання самостійно розгорнутого екземпляра Bitwarden.
bws secret list і повертає
значення для відповідних полів секрету key. Використовуйте ключі, що відповідають контракту ідентифікатора exec
SecretRef, як-от openclaw/providers/openai/apiKey; ключі у стилі env-var
з підкресленнями відхиляються до запуску резолвера. Якщо більше
ніж один видимий секрет 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-автентифікації sandbox
Основний бекенд sandboxssh також підтримує SecretRefs для матеріалу SSH-автентифікації:
- OpenClaw розв’язує ці посилання під час активації sandbox, а не ліниво під час кожного SSH-виклику.
- Розв’язані значення записуються до тимчасових файлів з обмежувальними дозволами й використовуються у згенерованій SSH-конфігурації.
- Якщо ефективний бекенд sandbox не
ssh, ці посилання залишаються неактивними й не блокують запуск.
Підтримувана поверхня облікових даних
Канонічні підтримувані й непідтримувані облікові дані перелічено тут:Облікові дані, створені під час виконання або ротаційні, а також матеріал OAuth refresh навмисно виключено з розв’язання 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 активної поверхні в надісланому конфігураційному payload до збереження змін
- Успіх атомарно замінює знімок.
- Помилка запуску перериває запуск Gateway.
- Помилка перезавантаження під час виконання зберігає останній відомий справний знімок.
- Помилка попередньої перевірки write-RPC відхиляє надіслану конфігурацію та залишає як конфігурацію на диску, так і активний знімок виконання без змін.
- Надання явного токена каналу для окремого виклику outbound helper/tool не запускає активацію SecretRef; точками активації залишаються запуск, перезавантаження та явний
secrets.reload.
Сигнали деградації та відновлення
Коли активація під час перезавантаження завершується помилкою після справного стану, OpenClaw переходить у деградований стан секретів. Одноразова системна подія та коди журналу:SECRETS_RELOADER_DEGRADEDSECRETS_RELOADER_RECOVERED
- Деградований стан: середовище виконання зберігає останній відомий справний знімок.
- Відновлений стан: надсилається один раз після наступної успішної активації.
- Повторні помилки, коли стан уже деградований, записують попередження, але не спамлять подіями.
- Швидка відмова під час запуску не надсилає подій деградації, оскільки середовище виконання так і не стало активним.
Розв’язання шляхів команд
Шляхи команд можуть увімкнути підтримуване розв’язання SecretRef через snapshot RPC Gateway. Є дві широкі моделі поведінки:- Суворі шляхи команд
- Шляхи команд лише для читання
Наприклад, шляхи віддаленої пам’яті
openclaw memory і openclaw qr --remote, коли потрібні віддалені посилання на спільний секрет. Вони читають з активного знімка й швидко завершуються з помилкою, якщо потрібний SecretRef недоступний.- Оновлення знімка після ротації секретів на бекенді обробляється командою
openclaw secrets reload. - Метод Gateway RPC, який використовують ці шляхи команд:
secrets.resolve.
Робочий процес аудиту й налаштування
Типовий потік оператора: Не вважайте міграцію завершеною, доки повторний аудит не буде чистим. Якщо аудит досі повідомляє про відкриті текстові значення в стані спокою, ризик доступу агента ще присутній, навіть коли API середовища виконання повертають редаговані значення. Якщо ви зберігаєте план замість застосування під часconfigure, застосуйте цей збережений план
за допомогою openclaw secrets apply --from <plan-path> перед повторним аудитом.
secrets audit
secrets audit
Знахідки включають:
- відкриті текстові значення в стані спокою (
openclaw.json,auth-profiles.json,.envі згенерованіagents/*/agent/models.json) - залишки відкритих текстових чутливих заголовків провайдера в згенерованих записах
models.json - нерозв’язані посилання
- перекриття пріоритетів (
auth-profiles.jsonмає вищий пріоритет за посиланняopenclaw.json) - застарілі залишки (
auth.json, нагадування OAuth)
- За замовчуванням аудит пропускає перевірки розв’язуваності exec SecretRef, щоб уникнути побічних ефектів команд.
- Використовуйте
openclaw secrets audit --allow-exec, щоб виконувати exec-провайдери під час аудиту.
- Виявлення чутливих заголовків провайдера базується на евристиці назв (поширені назви заголовків автентифікації/облікових даних і фрагменти, як-от
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-посилання/провайдери, залиште--allow-execувімкненим і для кроку застосування.
openclaw secrets configure --providers-onlyopenclaw secrets configure --skip-provider-setupopenclaw secrets configure --agent <id>
configure:- очищати відповідні статичні облікові дані з
auth-profiles.jsonдля цільових провайдерів - очищати застарілі статичні записи
api_keyзauth.json - очищати відповідні відомі рядки секретів з
<config-dir>/.env
secrets apply
secrets apply
Застосуйте збережений план:Примітка щодо exec:
- dry-run пропускає перевірки exec, якщо не встановлено
--allow-exec. - режим запису відхиляє плани, що містять exec SecretRefs/провайдери, якщо не встановлено
--allow-exec.
Одностороння політика безпеки
Модель безпеки:- попередня перевірка має успішно завершитися перед режимом запису
- активація середовища виконання перевіряється перед комітом
- apply оновлює файли за допомогою атомарної заміни файлів і відновлення за найкращих зусиль у разі збою
Примітки щодо сумісності застарілої автентифікації
Для статичних облікових даних середовище виконання більше не залежить від застарілого сховища автентифікації у відкритому тексті.- Джерелом облікових даних середовища виконання є розв’язаний знімок у пам’яті.
- Застарілі статичні записи
api_keyочищаються, коли їх виявлено. - Поведінка сумісності, пов’язана з OAuth, залишається окремою.
Примітка щодо вебінтерфейсу
Деякі об’єднання SecretInput легше налаштовувати в режимі сирого редактора, ніж у режимі форми.Пов’язане
- Автентифікація — налаштування автентифікації
- CLI: secrets — команди CLI
- Змінні середовища — пріоритет середовища
- Поверхня облікових даних SecretRef — поверхня облікових даних
- Контракт плану застосування секретів — деталі контракту плану
- Безпека — стан безпеки