Ответ вслух Senior CI: пайплайны и артефакты обновлено

Секреты и безопасность пайплайна

Вопрос

Интервьюер: «Как вы защищаете CI от утечки секретов и от подмены того, что уходит в прод?»

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Образцовый ответ: «Секреты лежат не в репозитории, а в переменных CI с маскированием и флагом protected, чтобы их видели только защищённые ветки. Для облака использую OIDC: пайплайн получает короткоживущий токен по подписанному удостоверению джобы, долгоживущих ключей в CI нет вообще.

Что должно прозвучать в ответе

  • Секреты в хранилище CI или Vault, не в репозитории, masked и protected

  • Короткоживущие учётки через OIDC вместо долгих токенов

  • Минимальные права токенов и раздельные учётки на окружения

  • Сторонние actions и образы зафиксированы по SHA или digest

  • Недоверенный код (PR из форков) без секретов и на одноразовых раннерах

  • Защищённые ветки, обязательное ревью, подпись артефактов

Что могут спросить следом

  • Что такое OIDC в CI и чем лучше статического ключа?
  • Что делать, если секрет попал в git?

Разбор

Образцовый ответ: «Секреты лежат не в репозитории, а в переменных CI с маскированием и флагом protected, чтобы их видели только защищённые ветки. Для облака использую OIDC: пайплайн получает короткоживущий токен по подписанному удостоверению джобы, долгоживущих ключей в CI нет вообще. Токены с минимальными правами, отдельные на stage и prod. Всё стороннее зафиксировано: actions по SHA коммита, базовые образы по digest. PR из форков идут без секретов и на одноразовых раннерах. Чтобы в прод не уехало подменённое, main защищён ревью, образы подписываются cosign, и кластер принимает только подписанные. Если секрет утёк в git, первым делом отзываю и ротирую его, а чистка истории вторична».

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.