Небезпечний згенерований IaC
Plan пройшов без помилок. У продакшн вийшов публічний бакет.
Що таке Небезпечний згенерований IaC?
ШІ-помічник може написати код інфраструктури, який коректний, зрозумілий і застосовується без помилок, але залишає сховище відкритим для всього інтернету. Тут згенерований модуль бакета проходить конвеєр, що перевіряє лише одне: чи вдасться його застосувати. Ви прочитаєте, що насправді дозволяє HCL, додасте до етапу plan бар'єр політик як коду, побачите, як він не пропускає розгорнутий модуль, виправите код і переконаєтеся, що анонімний запит тепер відхиляється.
Що ви дізнаєтесь у Небезпечний згенерований IaC
- Поясніть, чому чистий plan у Terraform нічого не говорить про безпеку зміни
- Читайте згенерований HCL з погляду того, що він дозволяє: публічні ACL, шифрування й дії в політиках
- Додайте перевірку політики як коду на етап plan, щоб непройдене правило зупиняло apply
- Покажіть, що бар'єр не пропускає небезпечний модуль і пропускає виправлений
- Переконайтеся ззовні, що анонімний запит до бакета відхиляється
Небезпечний згенерований IaC — Кроки навчання
-
Бакет для файлів клієнтів
Інес, керівниця платформної команди, створила в Jotvane, трекері команди, задачу: їй потрібне сховище для файлів, які клієнти завантажують на портал, і вона хоче отримати його як код Terraform, щоб конвеєр міг його розгорнути.
-
Відкрийте репозиторій
Редактор відкриває репозиторій інфраструктури: порожній файл модуля для бакета та workflow terraform, який будує plan для кожного пул-реквесту й застосовує зміни після злиття.
-
Попросіть модуль
Відкрийте Claude і попросіть написати модуль для бакета так, як це описала Інес.
-
П'ять ресурсів, охайно написаних
Claude читає порожній модуль і workflow, а потім пропонує п'ять ресурсів: бакет, правила володіння об'єктами, налаштування публічного доступу, ACL і політику для сервісу завантаження. Це охайний, типовий для HCL код, і у відповіді сказано, що plan пройде без помилок.
-
Прийміть модуль
Після прийняття модуль Claude потрапляє в main.tf . Смуга ліворуч від рядків позначає кожен рядок фіолетовим як рядок без рев'ю: його написав помічник, а прочитати ще ніхто не встиг.
-
Ініціалізуйте модуль
Перш ніж відкривати пул-реквест, виконайте той самий перший крок, що й workflow: ініціалізуйте модуль, щоб у Terraform були провайдер і бекенд стану.
-
Plan проходить без помилок
Тепер plan: перевірка, яку workflow запускає на кожен пул-реквест. Якщо все буде за обіцянкою Claude, він покаже п'ять ресурсів до додавання й жодної помилки: пул-реквест позеленіє, Інес його схвалить, а після злиття модуль застосується.
-
Бакет, що відповідає стороннім
Далеко від компанії Rushmarle сканер, що обшукує інтернет у пошуках сховищ, які відповідають на анонімні запити, помічає новий бакет. Бакет віддає перелік вмісту без ключа, тож кожен об'єкт у ньому можна просто забрати. Одна рекурсивна команда копіювання, жодних облікових даних — і все опиняється на диску, який не належить компанії Rushmarle.
-
Файли клієнтів, завантажені анонімно
Маріт зі служби безпеки створила задачу: бакет, створений модулем, уночі хтось без облікових даних Rushmarle переглянув і повністю завантажив.
-
Додайте бар'єр до етапу plan
Workflow перевіряє лише те, чи зможе Terraform застосувати код. Додайте до завдання plan крок політики як коду: checkov сканує модуль до запуску plan, а якщо перевірку не пройдено, завдання завершується помилкою, тож apply не починається.
Охоплення стандартів безпеки
OWASP Top 10
- A08:2025 Software or Data Integrity Failures
- A02:2025 Security Misconfiguration
CWE
- CWE-1188 Initialization of a Resource with an Insecure Default
- CWE-732 Incorrect Permission Assignment for Critical Resource
MITRE ATT&CK
- T1530 Data from Cloud Storage
CIS Controls
- CIS 4 Secure Configuration of Enterprise Assets and Software
- CIS 16 Application Software Security
NIST CSF
- PR.AT-02 Individuals in specialized roles are provided with awareness and training so that they possess the knowledge and skills to perform relevant tasks with cybersecurity risks in mind
- PR.PS Platform Security