Я відкрив адмінку 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 днів? Скільки з них можуть писати в прод? Відкрий адмінку й докрути список до кінця.

Цифра тебе занепокоїть. І правильно зробить.