Вопросы на собеседовании: DevSecOps-инженер
100 реальных вопросов с образцовыми ответами и пояснениями для уровня Junior.
Смотреть пример резюме: DevSecOps-инженер →Тренировка флешкарточками
Интервальное повторение · Hunter Pass
Вопросы
В распространённой модели DevSecOps-инженер поддерживает общие защитные механизмы процесса доставки, но точное распределение ответственности зависит от организации.
- Роль часто интегрирует и применяет согласованные контроли для CI/CD-процессов, доступа раннеров, секретов, проверок зависимостей и целостности артефактов.
- Разработчики продукта отвечают за исправления кода, а AppSec или другая security-команда может владеть правилами сканеров и решениями о риске.
- Junior обычно поддерживает ограниченный workflow или интеграцию сканера под ревью, а не определяет правила для всей компании.
Зачем это спрашивают: Интервьюер проверяет, умеете ли вы описать распространённую границу роли, не выдавая одну модель ответственности за универсальную.
DevOps сосредоточен на надёжной доставке, а DevSecOps явно отвечает за встроенные в неё механизмы безопасности.
- Задача DevOps может заключаться в ускорении и повторяемости деплоя через GitLab CI.
- Задача DevSecOps ограничивает job token, сканирует артефакт и проверяет согласование перед этим деплоем.
- Роли пересекаются в механике пайплайнов, но для DevSecOps снижение рисков безопасности является обязательным результатом.
Зачем это спрашивают: Интервьюер оценивает, отличаете ли вы безопасную доставку от общей автоматизации и работы над надёжностью.
DevSecOps часто сосредоточен на общих контролях доставки, а Application Security напрямую работает с рисками в дизайне и коде продукта.
- AppSec может владеть моделями угроз, рекомендациями по коду, платформами сканирования или правилами этих сканеров.
- DevSecOps может интегрировать результаты сканеров в GitHub Actions или GitLab CI, поддерживать надёжность проверок и применять контроли, согласованные с AppSec и командами доставки.
- Разработчики исправляют затронутый код, а каждая организация должна явно определить владельцев инструментов, политик и исправлений.
Зачем это спрашивают: Интервьюер проверяет, различаете ли вы дисциплины без утверждения, что одна из команд всегда владеет всеми сканерами или контролями доставки.
DevSecOps сосредоточен на пути доставки ПО, а инженер по облачной безопасности защищает облачные аккаунты, сервисы и конфигурации.
- Инженер по облачной безопасности может определять сетевые границы или общие правила доступа в облаке.
- DevSecOps-инженер ограничивает учётные данные пайплайна и проверяет контейнер перед деплоем в облако.
- Для безопасной интеграции DevSecOps нужны знания облака, но повседневное администрирование облачного IAM не составляет всю роль.
Зачем это спрашивают: Интервьюеру нужна чёткая граница между безопасностью платформы доставки и широким администрированием облака.
Безопасный SDLC размещает подходящие проверки и доказательства безопасности на этапах планирования, сборки, тестирования и выпуска.
- Изменения исходного кода проходят ревью и автоматические проверки до попадания в защищённую ветку.
- При сборке сканируются зависимости и секреты, а результаты сохраняются вместе с точным артефактом.
- Контроли выпуска проверяют согласования и идентичность артефакта, а не предполагают, что предыдущий этап наверняка прошёл.
Зачем это спрашивают: Интервьюер проверяет, понимаете ли вы безопасную доставку как последовательность контролей, а не одно финальное сканирование.
Shift-left означает более раннюю полезную обратную связь по безопасности, а не перенос всей ответственности на разработчиков.
- SCA-проверка в pull request может найти уязвимую зависимость до её попадания в основную ветку.
- Ранние проверки должны быть быстрыми и понятными, а более медленный DAST всё ещё может запускаться на развёрнутом тестовом окружении.
- Контроли в runtime и проверка выпуска остаются нужны, потому что проверки исходного кода не доказывают безопасность продакшена.
Зачем это спрашивают: Интервьюер проверяет, понимаете ли вы пользу и ограничения ранних проверок безопасности.
Защитный механизм автоматически меняет путь доставки, а отчёт лишь сообщает человеку о наличии риска.
- Правило GitHub Actions, отклоняющее сторонний action без фиксации по хешу, не даёт смержить рискованное изменение.
- OpenSSF Scorecard может найти рискованные практики в репозитории, но становится защитным механизмом только при использовании результата чётким правилом.
- Хороший механизм объясняет причину отказа и способ исправления, чтобы команды не обходили его из-за непонимания.
Зачем это спрашивают: Интервьюер проверяет, связываете ли вы находки безопасности с обязательным и удобным поведением платформы.
Junior DevSecOps-инженер должен безопасно поддерживать и улучшать ограниченный контроль с понятным порядком эскалации.
- Типичные задачи включают обновление job с Trivy, разбор результатов сканирования или сокращение прав в одном CI-шаблоне.
- Изменения нужно проверять на тестовом репозитории и отправлять на ревью до превращения в обязательный гейт.
- Неясные исключения, сломанные релизы и запросы на более широкие права нужно эскалировать, а не решать догадками.
Зачем это спрашивают: Интервьюер оценивает практическую ответственность junior-специалиста, дисциплину тестирования и понимание границ эскалации.
Граница доверия возникает там, где код или данные переходят между компонентами с разным уровнем контроля.
- Pull request из форка менее надёжен, чем уже проверенный код в защищённой ветке.
- Раннер с токеном деплоя переходит от логики сборки к привилегированному доступу к инфраструктуре.
- На каждом переходе нужны явная аутентификация, минимальные права и проверка входных данных или артефакта.
Зачем это спрашивают: Интервьюер проверяет, можете ли вы найти места, где предположения пайплайна должны стать явными контролями.
В GitLab CI есть явные стадии, а в GitHub Actions нет примитива stage и порядок jobs задаётся через needs.
- Jobs GitLab назначаются стадиям, последующие стадии обычно ждут предыдущие, а jobs одной стадии могут выполняться параллельно.
- В GitHub Actions jobs без зависимостей могут выполняться параллельно, а needs указывает, от каких успешно завершённых jobs зависит следующий job.
- В обеих системах разделение сканирования, сборки и деплоя по jobs упрощает проверку учётных данных, результатов и условий отказа.
Зачем это спрашивают: Интервьюер оценивает, умеете ли вы моделировать порядок пайплайна, не приписывая GitHub Actions стадии.
Разные jobs уменьшают объём недоверенного кода и чувствительных данных в одном контексте выполнения.
- Job для pull request не должен получать секрет для деплоя в продакшен.
- Job подписи может принимать digest, а не повторно собирать или выполнять код репозитория.
- Права на уровне job явно показывают, какой этап может записывать пакеты, запрашивать OIDC-токены или выполнять деплой.
Зачем это спрашивают: Интервьюер проверяет, используете ли вы границы jobs для сокращения доступа к учётным данным и нежелательных связей.
CI-артефакты пересекают границы jobs и времени, поэтому нужно контролировать их источник, содержимое и срок хранения.
- Следующий job не должен доверять артефакту из недоверенного workflow без проверки источника и целостности.
- Логи, отчёты тестов и архивы могут случайно содержать токены или закрытые файлы исходного кода.
- Короткое хранение, ограничение скачивания и digest, связанный со сборкой, снижают риск утечки и подмены.
Зачем это спрашивают: Интервьюер оценивает, считаете ли вы артефакты чувствительными входными данными, а не безобидными файлами.
Облачные раннеры обычно одноразовые и управляются провайдером, а собственные дают больше контроля, но сохраняют больше рисков.
- Новый GitHub-hosted runner ограничивает сохранение данных между jobs и сокращает работу по очистке.
- Self-hosted runner может открыть внутреннюю сеть, закешированные учётные данные или файлы от предыдущего job.
- Недоверенные pull requests нельзя запускать на привилегированном self-hosted runner без сильной изоляции.
Зачем это спрашивают: Интервьюер проверяет, учитываете ли вы сохранение состояния и сетевой доступ раннера в модели доверия.
Pull requests из форков содержат код под контролем внешнего автора, который может попытаться прочитать секреты или изменить workflow.
- Обычные jobs для pull request должны работать только с правами чтения и без учётных данных деплоя.
- Триггер с доверенным контекстом основной ветки не должен выполнять код форка с повышенными правами.
- Привилегированная упаковка или деплой должны ждать ревью и запускаться из защищённой ветки или окружения.
Зачем это спрашивают: Интервьюер проверяет, распознаёте ли вы выполнение недоверенного кода до выдачи учётных данных.
Настройте GITHUB_TOKEN только на чтение по умолчанию и выдавайте каждому job лишь необходимые ему права.
- Job с тестами обычно нужен доступ на чтение содержимого репозитория, но не запись пакетов или деплоев.
- Job публикации может получить запись пакетов только после успешных тестов в доверенной ветке.
- Право id-token write выдаётся только тому job, который действительно выполняет OIDC-обмен.
Зачем это спрашивают: Интервьюер проверяет, можете ли вы превратить принцип минимальных привилегий в конкретные разрешения GitHub Actions.
GitLab CI job token нужно считать временными учётными данными и ограничивать его доступ к проектам задачей текущего job.
- Предпочитайте job token персональному токену доступа, если целевой сервис его поддерживает.
- Ограничивайте проекты, которые могут использовать или принимать токен, вместо доверия всем внутренним репозиториям.
- Не сохраняйте токен в артефактах, кеше, выводе команд или файлах, остающихся после job.
Зачем это спрашивают: Интервьюер оценивает, понимаете ли вы, что временным учётным данным всё равно нужны ограничения доступа и безопасное обращение.
Защищённые ветки заставляют изменения проходить заданное ревью и статусные проверки до попадания в доверенную историю выпуска.
- Запрет прямых push не позволяет одной скомпрометированной учётной записи разработчика незаметно пропустить ревью.
- Обязательные CI-проверки обеспечивают тестирование и сканирование именно того коммита, который будет смержен.
- Ограничение force push сохраняет проверенную историю коммитов для последующих сборок и provenance.
Зачем это спрашивают: Интервьюер проверяет, связываете ли вы защиту ветки с целостностью последующих сборок.
Защищённые окружения контролируют, когда доверенный коммит может получить доступ для деплоя в чувствительную цель.
- Окружения GitHub Actions могут требовать согласования перед выдачей секретов окружения job.
- Protected environments в GitLab могут ограничивать ветки, теги и пользователей с правом деплоя.
- Job деплоя должен ссылаться на проверенный артефакт, а не пересобирать другое содержимое после согласования.
Зачем это спрашивают: Интервьюер оценивает, отделяете ли вы согласование исходного кода от разрешения на деплой.
Статическое тестирование безопасности анализирует исходный код или его скомпилированное представление без запуска приложения.
- Оно может прослеживать подозрительные потоки данных, небезопасное использование API и характерные для языка шаблоны кода.
- Проверка подходит для pull-request или build jobs, потому что ей не нужна развёрнутая цель.
- Результат SAST является поводом для проверки, а не доказательством эксплуатации проблемы в развёрнутой системе.
Зачем это спрашивают: Интервьюер проверяет, знаете ли вы входные данные SAST, его место в пайплайне и границы доказательности.
SAST должен рано проверять изменённый код и полностью запускаться перед выпуском доверенного кода.
- Быстрое сканирование pull request даёт обратную связь рядом с изменением разработчика.
- Сканирование основной ветки может покрыть весь репозиторий с конфигурацией production-сборки.
- SAST может пропустить конфигурацию runtime, поведение аутентификации после деплоя и пути, которые не умеет точно моделировать.
Зачем это спрашивают: Интервьюер оценивает, можете ли вы правильно разместить SAST и не заявлять о полном покрытии.
Закрытые вопросы
- 21
Что такое DAST и что он проверяет?
dastdynamic-analysis - 22
Почему DAST обычно не является первой проверкой pull request?
dastdynamic-analysis - 23
Что такое Software Composition Analysis?
scaoop - 24
Что ищет сканер секретов?
secretssecret-scanning - 25
Зачем сканировать секреты и перед коммитом, и в CI?
secrets - 26
Что Trivy может сканировать в workflow junior DevSecOps-инженера?
trivy - 27
Чем Grype и OSV-Scanner отличаются в базовом пайплайне?
ci-cdpipelinesosv-scanner - 28
Почему успешное прохождение нескольких сканеров не доказывает безопасность релиза?
- 29
Чем прямая зависимость отличается от транзитивной?
dependencies - 30
Почему lock-файлы важны для сканирования уязвимостей зависимостей?
dependenciespackagingdependency-locking - 31
Что оценка CVSS сообщает об уязвимости зависимости?
vulnerabilitiesvuln-managementdependencies - 32
Чем эксплуатируемость отличается от серьёзности уязвимости?
vulnerabilitiesattacksexploitability - 33
Что означает достижимость для уязвимой зависимости?
vulnerabilitiesdependencies - 34
Каким должно быть безопасное исключение для находки в зависимости?
dependencies - 35
Как предпочтительно исправлять уязвимую зависимость?
vulnerabilitiesdependencies - 36
Какие доказательства подтверждают исправление уязвимости зависимости?
vulnerabilitiesdependencies - 37
Что считается секретом в CI/CD-системе?
ci-cdsecretssystem-design - 38
Какие базовые понятия HashiCorp Vault должен знать junior?
secrets - 39
Что такое динамический секрет в Vault?
secretsdynamic-secrets - 40
Почему OIDC-федерация предпочтительнее долгоживущих учётных данных CI?
identity-accessworkload-identity - 41
Как нужно передавать секрет в CI-job?
secrets - 42
Что требуется для ротации CI-секрета?
secrets - 43
Почему маскирования в логах CI недостаточно для защиты секретов?
secrets - 44
Что такое SBOM?
supply-chainsoftware-inventory - 45
Чем SBOM отличается от сканирования уязвимостей?
vulnerabilitiessupply-chainsoftware-inventory - 46
Что подпись cosign доказывает о контейнерном образе?
containerscontainer-images - 47
Чем provenance сборки отличается от подписи?
provenance - 48
Почему контейнерный образ следует деплоить по digest, а не по тегу?
containersdeploymentcontainer-images - 49
Почему контейнер должен запускаться не от root-пользователя?
containers - 50
Какие базовые правила образов и слоёв улучшают безопасность контейнера?
containers - 51
В 6 репозиториях GitHub вы нашли 18 сторонних actions, указанных через теги. Как их усилить?
dependencies - 52
Workflow GitHub Actions из 9 jobs выдаёт contents: write и packages: write всем jobs, хотя публикует только 1 job. Что вы измените?
ci-cdgithub-actions - 53
Pull request из форка требует тестов в 14-минутном workflow, но сейчас тесты читают 2 облачных секрета. Как запустить его безопасно?
secretscloud-securitycode-review - 54
Workflow pull_request_target в 3 репозиториях делает checkout head-коммита контрибьютора и запускает npm test с токеном на запись. В чём риск и как его исправить?
tokensrisk-managementnpm - 55
Четыре репозитория сразу после merge деплоят в production с 1 общим секретом. Как protected environments снизят риск?
secretsrisk-managementdeployment - 56
Self-hosted runner обрабатывает 30 сборок в день и оставляет Docker-контейнеры, рабочие каталоги и облачные файлы. Что вы измените сначала?
dockercontainersci-cd - 57
Тестовый job GitLab на 30 дней загружает артефакт размером 120 МБ с логами, .env и отчётами тестов. Как усилить работу с артефактами?
ab-testingartifacts - 58
6 проектов GitLab открывают protected-переменную реестра pipeline для merge request, способному запускать скрипты контрибьютора. Что вы измените?
ci-cdregistriespipelines - 59
Dependabot предлагает изменить 7 закреплённых SHA actions в одном pull request. Какие проверки вы проведёте перед merge?
code-review - 60
Workflow напрямую подставляет заголовок pull request в Bash-команду, и 2 теста из форков ведут себя неожиданно. Как это исправить?
code-reviewtesting - 61
Нужно добавить Semgrep SAST в 6 репозиториев, не заставляя каждый 12-минутный pull request ждать полного скана. На какой стадии вы его разместите?
code-reviewsaststatic-analysis - 62
Небольшой API имеет 12 staging endpoints и деплоится за 18 минут. Как добавить базовую DAST-проверку OWASP ZAP?
owaspdastendpoints - 63
OSV-Scanner находит 4 уязвимых пакета в репозитории из 2 сервисов во время установки зависимостей. Как сделать результат полезным?
dependenciesosv-scannervulnerabilities - 64
В недавние коммиты каждого из 3 репозиториев попал 1 тестовый токен. Как встроить secret scanning в их workflow?
secretstokens - 65
Первый запуск SAST сообщает о 12 существующих находках в сервисе на 9000 строк, но команде на этой неделе нужен обязательный gate. Как создать baseline?
saststatic-analysis - 66
Команда из 5 разработчиков поддерживает 2 сервиса и получает 20 alerts сканера за первую неделю. Какой gate для небольшого репозитория вы предложите?
alerting - 67
Secret scanner иногда зависает на 8 минут и выводит 20-минутный pipeline за таймаут. Как вы это обработаете?
ci-cdpipelinessecrets - 68
Semgrep считает 7 вызовов безопасной внутренней обёртки SQL injection в одном репозитории. Как обработать false positives?
injectionweb-attacksdetection-tuning - 69
Pipeline находит 5 проблем высокой критичности, но доказательства исчезают после job, и разработчики не могут их воспроизвести. Что вы загрузите?
debuggingseverity-priorityci-cd - 70
Ночной скан открывает 9 дублирующихся находок в 3 репозиториях без исполнителей. Как создать полезные задачи?
- 71
CI job 6 минут назад напечатал 1 production API-токен в публичный лог. Каковы ваши первые действия?
tokensapi - 72
Разработчик удаляет AWS-ключ из последнего коммита после того, как он был виден 2 часа. Достаточно ли этого и что вы сделаете?
- 73
Один утёкший пароль реестра присутствует в 3 job logs, 2 артефактах и кеше общего runner. Как очистить копии?
artifactsregistriespasswords - 74
Утёкший package-токен настроен в 6 репозиториях, но публиковать должны только 2. Как сократить его область при ротации?
tokensconfig - 75
Job GitHub Actions в 4 репозиториях хранит long-lived Vault-токен со сроком 30 дней. Какую базовую замену вы внедрите?
tokenssecretsci-cd - 76
12-минутному деплою нужен 1 пароль базы из Vault, но текущий скрипт записывает его в workspace/db.env. Как вы его внедрите?
passwordssecretsdatabase - 77
Vault-токен с TTL 10 минут истекает во время 20-минутной сборки образа. Сделаете ли вы его 24-часовым?
tokenssecrets - 78
Как после ротации 1 утёкшего CI-секрета, используемого 3 сервисами, проверить сдерживание до закрытия инцидента?
secretsincident-responseincidents - 79
Trivy сообщает, что application image размером 180 МБ работает от root. Какие изменения Dockerfile вы сделаете?
dockertrivy - 80
Trivy сообщает о 12 OS-уязвимостях в образе, собранном 45 дней назад, и для 3 из них есть исправления. Что вы сделаете?
vulnerabilitiestrivy - 81
Grype находит 5 уязвимых Node.js-пакетов внутри контейнера, но только 1 является прямой зависимостью. Как их проследить и исправить?
containersdependenciestracing - 82
Шесть Kubernetes deployments используют image: api:latest, и один rollout получил разные байты на 2 nodes. Что вы измените?
kubernetesdeploymentapi - 83
Скан сообщает о Dockerfile EXPOSE 22 и Compose-файле, публикующем 0.0.0.0:22:22 для 3 тестовых контейнеров. Каково практическое исправление?
dockercontainersnetworking - 84
Trivy отмечает 1 Kubernetes pod с privileged: true, hostPID: true и 2 hostPath mounts. Как его усилить?
kubernetestrivy - 85
В Kubernetes Secret в 4 overlays закоммичен пароль базы в base64. Как локализовать утечку и предотвратить повторение?
secretspasswordsdatabase - 86
Terraform scan находит 1 S3 bucket с public ACL и без public-access block в модуле из 3 buckets. Что вы измените?
terraformawsiac-scanning - 87
В деплое 4 образа, и одобренные CLI-команда cosign и policy успешно проверяют 3, но сообщают об одном неподписанном digest. Что вы сделаете?
deployment - 88
Проверка cosign падает для 1 из 6 release images, и кто-то считает причиной смену тега. Что вы сделаете?
- 89
Нужен SBOM для контейнера с 230 пакетами, а команда ожидает увидеть в нём только уязвимости. Как вы объясните и реализуете задачу?
vulnerabilitiessupply-chaincontainers - 90
SBOM check показывает, что в release record образа с 85 пакетами отсутствуют 2 runtime-пакета. Как это расследовать?
supply-chainincident-responsesoftware-inventory - 91
Source SCA не находит проблем, но скан реестра обнаруживает 3 уязвимых OS-пакета в release image. Как исследовать и исправить расхождение?
vulnerabilitiesincident-responseregistries - 92
Provenance attestation для production image называет 1 неожиданный GitHub workflow. Какие базовые поля вы проверите?
- 93
У 2 из 5 release images есть подписи, но нет прикреплённого SBOM. Следует ли деплою считать их проверенными?
supply-chaindeploymentsoftware-inventory - 94
Trivy gate падает в CI с 6 находками, но разработчик локально получает 0. Как воспроизвести различие?
debuggingtrivy - 95
Разработчик спрашивает, почему pull request заблокирован 3 high-находками в транзитивном пакете. Как вы объясните gate?
code-review - 96
Шесть репозиториев обнаруживают некорректную Rego policy для OPA и Conftest только при деплое. Какое shift-left изменение вы сделаете с разработчиками?
pytestshift-leftdeployment - 97
Lead просит 3 простые метрики после добавления сканов в 8 репозиториев. Что вы покажете через 30 дней?
monitoring - 98
Команда просит исключение на 14 дней для 1 неисправленной high-уязвимости, блокирующей релиз. Что вы запишете и обеспечите?
vulnerabilitieserror-handling - 99
Обновление сканера добавляет 12 новых находок и 4 минуты к pipelines в 6 репозиториях. Как его выкатить?
ci-cdpipelines - 100
20-минутный pipeline стал на 8 минут дольше после добавления SCA, SAST и DAST, и 5 разработчиков хотят убрать все gates. Как вы ответите на практике?
ci-cdpipelinesstatic-analysis