Я відкрив адмінку Commercetools у п’ятницю — просто додати одну інтеграцію. Так до неї і не дійшов. Бо на мене дивилися тридцять чотири API-клієнти. Половину я бачив уперше. Деякі були старші за нинішню команду. Тієї миті я кинув своє завдання й сів писати інструмент, який уміє знаходити, аудитувати й убивати протухлі API-клієнти — ті самі забуті credentials, що накопичуються в будь-якому ентерпрайзі й тихо чекають, поки хтось ними скористається.
Список, до кінця якого ніхто не докручує
Ось як чесно виглядає «гігієна доступів» у більшості компаній: хтось під час спринту заводить клієнта, зашиває секрет у сервіс, котить у прод і забуває. Через два роки цієї людини вже немає в компанії, сервіс чи то ходить в API, чи то ні, а клієнт так само живе — з тими самими scope, з якими народився. Його ніхто не видаляє, бо ніхто не може довести, що це безпечно.
Увесь захист цих ключів тримається на чесному слові та вірі в краще.
Коли я нарешті придивився, картина виявилася гіршою за просто «бардак». Це була діра.
Перший справжній аудит
Я вивантажив усіх клієнтів і звірив кожного з реальними логами звернень до API. Не за назвою. Не за тим, що хтось думав про цього клієнта. А за тим, що він насправді викликав і коли. Розклад:
- 34 API-клієнти загалом
- 12 живих — із зрозумілим, задокументованим використанням
- 18 зомбі — нуль активності за останні 90+ днів
- 4 з повним admin-scope до проду, яких не торкалися пів року
Перечитайте останній рядок. Чотири ключі з повним доступом на запис у продові дані, від проєкту, що закрився півтора року тому, — усе ще живі. Скомпрометуй будь-який — і можна було б міняти дані в проді безслідно: нікому помітити, секрет не ротується, аудиту немає.
Чотири відчинені двері в прод, про які ніхто не знав.
Чому цвинтар лише росте
Найцікавіше — це взагалі не технічна проблема. Це проблема відповідальності, перевдягнена в технічну.
Кожен спринт плодить нових API-клієнтів. У жодному спринті немає задачі «видалити клієнта, яким ми перестали користуватися». Доступи накопичуються як технічний борг, тільки цей борг невидимий — немає падаючого тесту, червоного дашборда, стрибка latency. Мертвий клієнт з admin-scope виглядає точнісінько як живий — до того дня, коли його повернуть проти тебе.
А причина, чому їх ніхто не чистить, до прикрого проста: ніхто не може сказати, які з них ще використовуються. Немає карти. Немає трекінгу звернень. Просто список імен, що колись щось означали для людини, якої тут давно немає.
Не можна прибрати те, чого не бачиш.
Інструмент: зробити невидиме видимим
Тож я зібрав те, що мало існувати з першого дня. Навмисно нудне: Python, у Docker, запускається будь-де без налаштувань. Наводиш на API Commercetools — і він робить чотири речі:
- Знаходить усіх клієнтів акаунта, нікого не пропускаючи
- Звіряє кожного з реальними логами й розкладає на живих і мертвих
- Перевіряє scope проти тих викликів, які клієнт реально робить, — видно, у кого прав більше, ніж треба
- Радить ротацію для всього, що тримає більше влади, ніж виправдано поведінкою
Запустити один раз — приємно. Але по-справжньому це нічого не вирішує: з наступного спринту цвинтар починає наповнюватися знову. Тому весь сенс у тому, що він запускається не один раз.
Тримати в полі зору — автоматично
Тепер інструмент живе в CI/CD:
- Щотижневі автосканування — аудит не героїчний подвиг раз на рік, а cron-джоба
- Алерт у Slack тієї миті, коли клієнт простоює 30 днів, — зомбі підсвічується, поки люди ще пам’ятають проєкт
- Перевірка scope на кожному прогоні — переобдаровані правами клієнти спливають раніше, ніж дозрівають до ризику
Цвинтар доступів перестав рости тієї секунди, коли за ним почали стежити. У цьому весь фокус. Не хитрий алгоритм — а постійна варта.
Іди перевір свої цифри
Це є в будь-якому ентерпрайзі. Просто більшість команд вдають, що ні, — бо подивитися означає визнати, скільки ключів від королівства валяється просто на вулиці. Невидима проблема лишається невидимою, поки її не зроблять видимою — і не залишать такою за розкладом.
Тож ось незатишне домашнє завдання: скільки API-доступів у твоїй інфраструктурі просто зараз мають нуль активності за останні 90 днів? Скільки з них можуть писати в прод? Відкрий адмінку й докрути список до кінця.
Цифра тебе занепокоїть. І правильно зробить.