Мій аудит безпеки зависав щоночі
Мій щонічний аудит безпеки перестав працювати.
Cron-завдання запускалося щоранку о 5:39. Скрипт запускався. У логах було порожньо. Жодних помилок не з'являлося. Звіт у файл не записувався.
Я витратив два дні на налагодження. Виправлення зайняло лише три рядки bash.
Проблема полягала в «тихій» помилці.
Мій скрипт виконує 13 перевірок. Одна з них запускає глибокий аудит безпеки через CLI. Ця команда зависала. Вона не видавала помилку. Вона просто чекала вічно.
CLI очікувала відповіді від шлюзу. У середовищі cron ця відповідь ніколи не надходила. У CLI немає внутрішнього таймауту. Це заблокувало весь скрипт. Оскільки скрипт ніколи не завершувався, він не доходив до рядка збереження звіту.
Я виправив це за допомогою таких змін:
- Я обгорнув команду в таймаут.
- Я змінив повідомлення про помилку на "command timed out" замість "not available".
- Я використав
set -eo pipefail, щоб правильно відловлювати помилки.
Тепер звіт надходить вчасно. Якщо аудит зависає, звіт все одно зберігає інші 12 метрик. Частковий звіт кращий, ніж його відсутність.
Це навчило мене трьом речам щодо пісочниці агентів:
Ніколи не сподівайтеся, що залежність видасть гучну помилку. Якщо ви викликаєте зовнішній інструмент у cron-завданні, завжди встановлюйте таймаут. Кожна операція повинна мати обмежений час очікування.
Проектуйте систему з розрахунком на частковий успіх. Переконайтеся, що ваша система записує звіт, навіть якщо одна частина виходить з ладу.
Уникайте «тихих» помилок. Гучна помилка змушує вас прокинутися. Тиха помилка призводить до втрати критичних даних, поки не стане занадто пізно.
Коли ви надаєте агенту дозвіл на виконання команд, ви успадковуєте всі сценарії відмови цих команд. Зависання інструменту — це зависання всього вашого конвеєра.
Безпека — це не лише запобігання діям зловмисників. Це ще й забезпечення того, щоб ваша інфраструктура видавала помилки достатньо гучно, щоб ви могли їх помітити.
Якщо ви запускаєте автоматизовані скрипти, які викликають зовнішні інструменти, перевірте свої таймаути цього тижня.
Додаткова спільнота для навчання: https://t.me/GyaanSetuAi