Захисні механізми для безпечної автономної роботи AI-агентів у production
Захисні механізми для AI-агентів у production: секрети, підтвердження, audit logs, обмежений доступ, структуровані помилки та безпечні автономні workflow розгортання.
Захисні механізми AI-агентів у production мають витримувати більше, ніж просто ввічливий prompt. Автономний coding agent може неправильно зрозуміти ціль, повторити операцію, розкрити credential у поясненні або продовжити роботу після неоднозначної відповіді. Тому безпека в production має бути закладена у виконуваний інтерфейс, модель авторизації та audit trail, а не лише в інструкції.
Dockup поєднує рекомендації щодо поведінки у своєму skill для Claude Code і Codex із контролем на рівні CLI: секрети маскуються, деструктивні операції потребують --yes, помилки повертають стабільні коди, deploy може очікувати на terminal state, а зміни з’являються в audit log.
Чому захисні механізми потрібно реалізовувати нижче рівня prompt?
Prompt — це корисна політика, але не межа безпеки. Контекст агента може бути обрізано, інструкції можуть суперечити одна одній, а модель може обрати неправильну інтерпретацію. Базовий tool має ускладнювати небезпечну поведінку або робити її неможливою.
Розгляньмо запит на видалення. Слабкий дизайн надає команду, яка одразу видаляє дані, і покладається на те, що агент не забуде попросити підтвердження. Надійніший дизайн відхиляє операцію, якщо немає окремого прапорця підтвердження.
Dockup використовує надійніший підхід:
dockup up production/api --prune --json
Без явного підтвердження деструктивне очищення відхиляється, а JSON містить code:"needs_confirm". Нічого не видаляється. Агент має показати цей результат людині, отримати схвалення, а потім свідомо повторно виконати команду:
dockup up production/api --prune --yes --json
Це defense in depth. Skill Dockup вказує агенту зупинитися, а CLI запобігає випадковому виконанню, навіть якщо інструкцію пропущено.
Як маскування секретів захищає автономних агентів?
Агенти часто додають вивід команд до свого міркування або фінальної відповіді. Якщо операція читання повертає production token, секрет може потрапити в історію чату, логи, telemetry, screenshots або скопійовані нотатки про інцидент.
Безпечний інтерфейс конфігурації відокремлює метадані секрету від його значення. Dockup повертає ключі змінних середовища та маркер isSecret, але збережені значення секретів мають значення null або маскуються.
dockup env list -s production/api --json
Агент може встановити секрет, не отримуючи його пізніше:
dockup env set API_KEY="$API_KEY" \
--secret \
-s production/api \
--json
Маскування секретів не скасовує потребу в обережній роботі з процесами. Початкове значення все одно існує в shell environment під час виконання операції set. Не використовуйте set -x, не виводьте змінну через echo і не створюйте рядки команд, які захоплюються verbose logging.
Паролі баз даних, API keys, registry tokens, SSH credentials і Windows RDP credentials слід розглядати як одноразові або обмежені для виводу дані. Агент має зберігати їх у схваленому secret manager або напряму передавати наступному процесу, не відтворюючи їх у тексті.
Ширший підхід на рівні застосунку описано в матеріалі security best practices.
Як має працювати підтвердження деструктивних дій?
Не кожна зміна потребує однакового рівня формальності. Корисна модель автономності розділяє операції за можливістю скасування та масштабом потенційного впливу:
| Рівень | Приклад | Типова поведінка агента |
|---|---|---|
| Лише читання | Список сервісів, перегляд статусу та логів | Виконати й підсумувати |
| Оборотна зміна | Встановити змінну, запустити deploy | Виконати в межах схваленої області |
| Операційне відновлення | Перезапустити, повторно виконати попереднє розгортання | Виконати, якщо це дозволяє runbook; повідомити докази |
| Деструктивна дія | Знищити сервіс, видалити базу даних, вийти з проєкту | Зупинитися й отримати явне схвалення |
| Масштабна деструктивна дія | Застосувати --prune, передати ownership | Потребує підтвердження людини для конкретної цілі |
Явне схвалення має містити точну ціль і наслідок. «Так, продовжуй» — слабше, ніж «Видали staging/old-api та пов’язані з ним ресурси сервісу». Агент не має повторно використовувати схвалення, надане для іншої команди або цілі.
Dockup config as code за замовчуванням працює в additive-режимі. dockup up не видалятиме змінні середовища або домени, відсутні в manifest. Для видалення потрібен явний прапорець --prune:
dockup plan production/api --json
dockup up production/api --prune --json
Plan працює лише на читання, тому його слід спочатку переглянути. Навіть із --prune секрети, сервіси, бази даних і volumes захищені від цього шляху очищення manifest. Повний workflow описано в матеріалі dockup.yaml config as code.
Як структуровані помилки обмежують автономність?
Агенту потрібен скінченний набір безпечних варіантів дій. Вільні текстові повідомлення корисні людям, але стабільні коди помилок роблять першу реакцію детермінованою.
| Код | Правильна реакція |
|---|---|
not_logged_in | Зупинитися й отримати чинний credential |
not_linked | Визначити ціль або передати її явно |
no_target | Запустити service discovery; ніколи не вигадувати slug |
needs_confirm | Попросити схвалення людини |
deploy_trigger_failed | Повідомити, чому операцію не вдалося запустити |
deploy_failed | Переглянути build logs |
deploy_timeout | Повідомити про відсутність terminal state |
Під час deploy слід використовувати очікування на terminal state:
dockup deploy production/api --wait --json
Типовий timeout становить 900 секунд. Exit 0 підтверджує, що deploy досяг успішного стану. Ненульовий exit-код не дає агенту продовжити до змін у домені, міграцій або оголошень так, наче production уже готовий.
Цей дизайн розглянуто в матеріалі AI agent CLI design. Принцип простий: tool має явно повідомляти про неоднозначний результат.
Що має записувати audit log?
Автономність без атрибуції — це операційний борг. Production audit trail має відповідати на запитання: хто виконав дію, який інтерфейс використав, яку ціль було змінено, чи була це операція читання або запису, коли вона відбулася та чи була успішною.
Dockup записує дії з CLI, UI та API. Оператори можуть переглядати останні зміни:
dockup audit --writes --json
dockup audit --number 30 --json
dockup audit --search domains --json
Власний звіт агента має доповнювати запис платформи. Додайте:
- Визначену ціль
project/service. - Категорію команди без значень секретів.
- Ідентифікатори deploy або ресурсів, повернуті платформою.
- Exit-код і структурований статус.
- Докази, зібрані після зміни.
- Будь-яке отримане схвалення для деструктивної роботи.
- Невизначеність, що залишилася, або наступні кроки.
Audit logs потрібні не лише для пошуку винних після інциденту. Вони дають змогу іншому агенту або оператору відновити картину стану, не повторюючи ризиковані команди.
Як команди можуть безпечно підвищувати автономність агента?
Почніть із доступу лише на читання та одного сервісу з низьким рівнем ризику. Розширюйте повноваження лише після того, як агент продемонструє коректний пошук цілей, належне поводження із секретами, правильну обробку помилок і якісне звітування.
Практична послідовність має такий вигляд:
Етап 1: Спостереження
Дозвольте переглядати список сервісів, статус, історію deploy, build logs, runtime logs, uptime, usage і результати security scan. Порівнюйте підсумок агента з необробленим JSON.
Етап 2: Deploy у межах фіксованої цілі
Дозвольте deploy одного сервісу з --wait. Вимагайте health check і структурований звіт про завершення. Не надавайте дозволів на видалення або керування team permissions.
Етап 3: Керування оборотною конфігурацією
Дозвольте оновлювати несекретні та секретні змінні, налаштовувати health check і custom domain у межах перевіреного runbook. Після змін середовища вимагайте повторного deploy.
Етап 4: Операції з відновлення
Дозволяйте restart або rollback лише тоді, коли агент обирає точний відомий deployment ID і зберігає докази помилки.
Етап 5: Деструктивна робота з обов’язковим схваленням
Залишайте деструктивні прапорці за явним схваленням людини, навіть якщо credential технічно дозволяє їх використовувати. За можливості застосовуйте scoped API keys і регулярно переглядайте audit trail.
Встановлення skill агента посилює ці правила:
npm install -g dockup-cli
dockup skill install
dockup skill status --json
У Dockup CLI reference описано поведінку команд, яку забезпечує система. Агент має перевіряти локальну schema, а не покладатися на приклад, який пам’ятає.
Checklist перевірки захисних механізмів
Перш ніж надавати доступ до production, дайте відповідь на кожне запитання:
- Чи може агент визначити точні цілі без здогадок?
- Чи замасковано значення секретів у всіх read paths?
- Чи повертає кожна невдала mutation ненульовий exit-код?
- Чи можуть довгі операції очікувати на terminal state?
- Чи блокуються деструктивні дії без явного підтвердження?
- Чи мають credentials обмежену область і чи передаються поза prompts?
- Чи можна знайти кожну mutation в audit log?
- Чи є перевірена процедура rollback або recovery?
- Чи можуть версії skill і executable розійтися?
- Чи відокремлює фінальний звіт факти від невизначеності?
Відповідь «ні» — це завдання з проєктування, а не написання prompt. Автономність у production має зростати лише разом із посиленням базових гарантій.
Перевіряйте захисні механізми як сценарії помилок
Перевірка неповна, доки команда навмисно не протестує межі системи. Запустіть deploy із недійсним token, запросіть невідому ціль, дозвольте тестовому build завершитися помилкою, встановіть дуже короткий timeout і спробуйте виконати деструктивну команду без підтвердження. Кожен сценарій має повертати ненульовий exit-код і стабільний код, не допускати витоку секретів і не спричиняти ненавмисних змін.
Такі тести перетворюють захисні механізми AI-агентів у production на спостережувані гарантії. Повторюйте їх після оновлень CLI або політик, так само як повторювали б тести authentication і authorization для застосунку. Захисний механізм, який існує лише на слайдах, не захистить unattended release.
Перенесіть workflow у production
Встановіть skill, перегляньте його інструкції та перевірте кожен захисний механізм, зокрема заблоковану деструктивну команду, перш ніж створювати production token.
npm install -g dockup-cli
dockup skill install
Перша команда встановлює CLI. Друга встановлює відповідний skill Dockup для Claude Code і Codex. Почніть безкоштовно на app.dockup.ai.
FAQ
Чи достатньо інструкцій у prompt, щоб захистити AI-агента в production?
Ні. Prompts допомагають спрямовувати поведінку, але критичні засоби контролю, як-от маскування секретів, підтвердження, авторизація, exit-коди й audit logging, мають забезпечуватися tool і платформою.
Як Dockup блокує деструктивні операції?
Деструктивні команди відмовляються виконуватися без явного прапорця --yes і повертають структурований код needs_confirm, завдяки чому агент може зупинитися та попросити людину про підтвердження.
Чи може AI-агент прочитати значення секретних змінних середовища з Dockup?
Збережені значення секретів маскуються у виводі. Агент бачить ключ і маркер секрету та може замінити значення, але не отримує збережений секрет.
Чому структуровані коди помилок важливі для автономності?
Вони обмежують агента відомими гілками відновлення: запросити authentication, визначити точну ціль, прочитати build logs або попросити підтвердження.
Як команді почати надавати доступ до production?
Почніть з операцій лише на читання, потім дозвольте deploy однієї цілі з низьким рівнем ризику й розширюйте доступ до оборотної конфігурації та recovery лише після того, як агент стабільно надаватиме перевірювані докази.
