Секрет у налаштуваннях не стає безпечним автоматично
Сховище змінних у CI/CD краще за ключ у репозиторії, однак не розв’язує всю проблему. Секрет може потрапити до журналу через режим налагодження, успадкуватися стороннім скриптом або стати доступним задачі, якій він не потрібен. Небезпека зростає, коли один довгоживучий ключ використовується для кількох середовищ і проєктів. Його компрометація дає широкий доступ, а планова заміна перетворюється на координацію десятків залежностей. Спочатку варто скласти перелік секретів, зазначити їхнього власника, область дії, строк життя та всі задачі, що їх читають. Уже ця карта часто показує ключі без зрозумілого призначення, дублікати й повноваження, які значно перевищують потреби конкретного кроку конвеєра.
Коротка федеративна сесія краща за постійний ключ
Сучасний конвеєр може підтвердити свою ідентичність хмарі або внутрішньому сервісу без збереження постійного секрету. Платформа видає підписаний токен із даними про репозиторій, гілку, середовище й конкретний запуск, а цільовий сервіс обмінює його на короткочасні повноваження. Після завершення задачі вони втрачають чинність. Це не усуває потреби в політиках доступу, але істотно зменшує цінність викраденого токена й спрощує відкликання. Довіру потрібно обмежувати точними умовами: не будь-який workflow з організації, а визначений репозиторій, захищена гілка та схвалене середовище. Занадто широке правило федерації лише переносить проблему постійного ключа на інший рівень.
Сторонній крок конвеєра є виконуваним кодом
Готова дія або плагін CI виконується з тими самими файлами й змінними, які отримала задача. Посилання лише на назву версії чи рухому гілку дозволяє автору змінити код після вашого перегляду. Для критичних кроків залежність краще фіксувати за незмінним ідентифікатором релізу або commit, перевіряти її походження й оновлювати через контрольований review. Це не гарантує відсутності вразливості, але робить склад конвеєра відтворюваним. Кількість зовнішніх дій варто обмежувати: простий локальний скрипт часто легше перевірити, ніж універсальний плагін із широкими можливостями. Окремий процес має стежити за виправленнями безпеки, щоб зафіксована версія не залишалася застарілою назавжди. Контроль повноважень варто доповнити обліком компонентів у ланцюгу постачання ПЗ та перевірюваним підписом релізних артефактів.
Кожен етап повинен бачити лише власні повноваження
Збірка, тестування, публікація артефакту й розгортання виконують різні дії, тому не мають використовувати однакові права. Задачі перевірки коду не потрібен доступ до production, а процесу розгортання не обов’язково читати всі секрети репозиторію. Важливо враховувати й походження запуску. Код із зовнішнього pull request не повинен автоматично отримувати секрети основної гілки, інакше достатньо змінити тестовий скрипт, щоб передати їх назовні. Окремі середовища, ручне схвалення критичного етапу та незмінний артефакт між збіркою й розгортанням зменшують кількість місць, де таємниця взагалі з’являється. Найкраще захищений секрет — той, якого немає в більшості задач.
Автоматичний пошук секретів потрібен до й після коміту
Перевірка на робочій станції допомагає зупинити випадковий ключ до потрапляння в історію, а серверний сканер страхує випадки, коли локальний hook вимкнений або правило ще не додане. Сканувати варто не лише поточний стан, а й історію, артефакти та образи контейнерів. Виявлений ключ слід вважати скомпрометованим навіть після видалення з останнього коміту: історію вже могли клонувати, а журнали — проіндексувати. Правильна реакція складається з відкликання, випуску нового значення, пошуку місць використання й лише потім очищення репозиторію за потреби. Хибні спрацювання потрібно керовано позначати з причиною, а не вимикати правило для всього проєкту.
Журнали й артефакти теж потрібно вважати каналом витоку
Маскування відомого значення в журналі допомагає, але його легко обійти перетворенням, кодуванням або виведенням лише частини рядка. Тому захист не може залежати тільки від фільтра консолі. Скрипти мають уникати друку змінних середовища, дампів конфігурації та команд із параметрами доступу. Артефакти збірки слід перевіряти на випадково включені файли налаштувань, токени й приватні ключі до публікації. Доступ до журналів також має бути обмеженим і мати визначений строк зберігання. Якщо секрет усе ж з’явився у виводі, його потрібно негайно відкликати; редагування журналу не повертає таємність значенню, яке вже могли прочитати або скопіювати.
Ротація має бути перевіреним сценарієм, а не документом
Команда повинна знати, як швидко відкликати ключ, випустити заміну й підтвердити, що старе значення більше ніде не використовується. Це складно перевірити вперше під час інциденту. Корисно регулярно проводити контрольну ротацію одного некритичного секрету й вимірювати, які системи зламалися, хто отримав сповіщення і скільки тривало відновлення. Для федеративних повноважень аналогічною перевіркою є зміна політики довіри та перегляд журналів видачі токенів. Інвентар, короткий строк життя, вузькі права й спостережувана ротація працюють разом. Жоден менеджер секретів не компенсує ключ, який роками має адміністративний доступ і використовується невідомо де.




Коментарі
Щоб залишити коментар, увійдіть через Google або Facebook.