Безопасность Jenkins: аутентификация и матрица прав

Рейтинг: 78.5% · 14 голосов
Подробный курс по Jenkins и CI/CD: установка и настройка, плагины и Configuration as Code, конвейеры (pipeline) и Jenkinsfile, declarative и scripted, агенты, Docker и Kubernetes, общие библиотеки на Groovy, безопасность и credentials, интеграции (SonarQube, артефакты), траблшутинг. Актуально на 2026.
Ответить
Аватара пользователя
Andrey_CICD
Сообщения: 47
Зарегистрирован: 11 май 2026, 05:31

Безопасность Jenkins: аутентификация и матрица прав

Сообщение Andrey_CICD »

Оглавление курса (47)
  1. Что такое Jenkins и зачем нужен CI/CD
  2. Jenkins в 2026: версии, экосистема и сравнение с GitLab CI и GitHub Actions
  3. Архитектура Jenkins: контроллер, агенты, узлы и исполнители
  4. Установка Jenkins: пакеты, Docker и Kubernetes
  5. Первичная настройка Jenkins: мастер, плагины, пользователи
  6. Плагины Jenkins: установка, обновление и ключевой набор
  7. Configuration as Code (JCasC): настройка Jenkins декларативно
  8. Конвейеры Jenkins и Jenkinsfile: pipeline as code
  9. Scripted против Declarative: два синтаксиса конвейера
  10. Структура конвейера: node, stage, steps и первый pipeline
  11. Генератор сниппетов, запуск конвейера и Replay
  12. Типы заданий Jenkins: Freestyle, Pipeline, Multibranch и Organization
  13. Декларативный конвейер: структура pipeline, agent, stages
  14. agent, environment и переменные в конвейере
  15. tools, options, parameters и triggers в декларативном конвейере
  16. stages, parallel и matrix: организация этапов
  17. Условное выполнение when и блок post
  18. Триггеры сборки: webhook от GitHub, SCM polling и расписание
  19. Параметры сборки и пользовательский ввод
  20. Управление потоком: timeout, retry, sleep и waitUntil
  21. Параллелизм и блокировки: parallel, lock, milestone
  22. Постобработка и уведомления о результате сборки
  23. Groovy для Jenkins: основы скриптового конвейера
  24. Скриптовый конвейер: логика, циклы и функции
  25. Общие библиотеки Jenkins: Shared Libraries
  26. Подключение и загрузка общих библиотек
  27. Шаги оболочки: sh, bat, powershell и коды возврата
  28. Переменные среды, withEnv и рабочие пространства
  29. Работа с файлами, артефактами и отпечатками
  30. Сборка проектов в конвейере: Maven, Gradle, npm
  31. Качество кода: SonarQube и покрытие тестами
  32. Управление артефактами: публикация в Nexus и Artifactory
  33. Docker в Jenkins: образы как агенты сборки
  34. Сборка и публикация Docker-образов из конвейера
  35. Jenkins в Kubernetes: динамические pod-агенты
  36. Развёртывание в Kubernetes из конвейера
  37. Безопасность Jenkins: аутентификация и матрица прав (вы здесь)
  38. Учётные данные Jenkins: credentials в конвейере
  39. Безопасность сценариев: Groovy sandbox и Vault
  40. Уведомления и отчёты: email, Slack, Telegram, HTML
  41. Blue Ocean и интерфейс Jenkins в 2026
  42. Автоматизация Jenkins: CLI, REST API и script console
  43. Поиск и устранение неисправностей: читаем логи конвейера
  44. Типичные ошибки конвейера: сериализация и неутверждённый код
  45. Эксплуатация Jenkins: бэкап, обновление, масштабирование
  46. Конвертация и миграция: от Freestyle к Jenkinsfile
  47. Итог: сквозной CI/CD конвейер и Jenkins против альтернатив в 2026
Свежий Jenkins из коробки - это открытая дверь. Поднял контроллер, прокинул порт 8080, увлёкся пайплайнами и забыл про безопасность. А внутри Jenkins умеет выполнять произвольный shell на твоих машинах, ходит в Git с боевыми ключами, знает пароли от реестров и серверов деплоя. Любой, кто доберётся до этого порта, фактически получает доступ ко всей твоей инфраструктуре. История знает десятки взломов, которые начинались с одной строчки в Shodan: "Jenkins, аутентификация выключена".

В этом уроке разберём настройку безопасности Jenkins по-взрослому: откуда брать пользователей, как раздавать права через матрицу и Role Strategy, как не отдать всем admin и почему агенты надо держать на расстоянии от контроллера. Материал актуален на 2026 год - текущая LTS это 2.541.1, под Java 17 или 21.

Аутентификация: кто ты такой

Безопасность в Jenkins состоит из двух независимых вопросов. Первый - аутентификация (Security Realm): кто пользователь и как он доказывает свою личность. Второй - авторизация: что этому пользователю разрешено. Их настраивают раздельно в Manage Jenkins -> Security, и путать их нельзя.

Начнём с источников пользователей. В реальной jenkins настройке встречаются четыре варианта.
  • Встроенная база Jenkins (Jenkins' own user database). Аккаунты лежат локально, пароли хэшируются. Годится для лаборатории, маленькой команды или начального этапа. В проде на десятки людей превращается в боль: нет централизованного управления, увольнение человека не отзывает доступ автоматически.
  • LDAP / Active Directory. Пользователи и группы берутся из корпоративного каталога. Уволили человека в AD - он теряет доступ к Jenkins без твоего участия. Это стандарт для классического энтерпрайза.
  • SSO через OIDC / SAML. Современный путь: плагин oic-auth подключает Jenkins к Keycloak, Okta, Google или Azure Entra ID. Логин идёт через единый провайдер, поддерживаются группы и 2FA на стороне IdP. На 2026 год для новых установок это рекомендуемый вариант.
  • Делегирование контейнеру - реже, для специфичных сценариев reverse-proxy.
Важная галочка - "Allow users to sign up". Её надо снять почти всегда, иначе любой анонимус зарегистрирует себе аккаунт. Открытая саморегистрация в проде - прямая дыра.

Изображение

Авторизация: матрица прав и jenkins authorization

Аутентификация сказала "это Маша". Теперь решаем, что Маше можно. За это отвечает Authorization. Худший выбор - "Anyone can do anything" и "Legacy mode": их в проде быть не должно. Рабочие стратегии такие.

Matrix-based security - глобальная таблица. Строки это пользователи и группы, столбцы - права (Overall/Read, Job/Build, Job/Configure, Run/Delete и так далее). Ставишь галочки на пересечениях. Просто и наглядно, но права действуют на весь Jenkins сразу: нельзя дать человеку конфигурировать только свои джобы.

Project-based Matrix Authorization - расширение матрицы. Кроме глобальной таблицы появляется секция Authorization в настройках каждой джобы и папки. Глобально даёшь всем Overall/Read, а права на конкретные проекты раздаёшь точечно. Уже похоже на нормальный jenkins rbac, но при сотне джоб ты утонешь в ручных галочках.

Обе матрицы живут в плагине matrix-auth. Включается всё там же, в Manage Jenkins -> Security -> Authorization.

Jenkins Role Strategy: роли вместо галочек

Когда проектов и людей много, ручная матрица не масштабируется. Тут на сцену выходит jenkins role strategy - плагин Role-based Authorization Strategy. Идея простая и знакомая всем по RBAC: ты описываешь роли (наборы прав) один раз, а потом назначаешь людей на роли. Сменился состав команды - правишь назначение роли, а не сотню галочек.

Плагин даёт три типа ролей:
  • Global roles - глобальные. Задают Overall, Agent, Job, Run, View, SCM на весь инстанс. Тут живёт admin и базовая роль authenticated с одним лишь Overall/Read.
  • Item roles (раньше project roles) - привязаны к джобам и папкам по регулярному выражению на имя. Создаёшь роль team-billing с паттерном billing-.* и даёшь ей Job/Build, Job/Configure. Все джобы с префиксом billing- автоматически попадают под эту роль.
  • Agent roles - права на конкретные агенты, тоже по regex на имя ноды.
Связка папок и item-ролей по regex - это и есть рабочий рецепт мультикомандного Jenkins: каждая команда сидит в своей папке, видит и трогает только своё.

На 2026 год Role Strategy полноценно описывается через Configuration as Code, и это правильный способ - права лежат в git, а не накликиваются мышкой. Вот рабочий фрагмент JCasC:

Код: Выделить всё

jenkins:
  authorizationStrategy:
    roleBased:
      roles:
        global:
          - name: "admin"
            description: "Полный доступ, держим у 1-2 человек"
            permissions:
              - "Overall/Administer"
            entries:
              - user: "alice"
          - name: "authenticated"
            description: "Любой залогиненный видит дашборд"
            permissions:
              - "Overall/Read"
              - "View/Read"
            entries:
              - group: "authenticated"
        items:
          - name: "team-billing"
            description: "Команда биллинга в своей папке"
            pattern: "billing/.*"
            permissions:
              - "Job/Read"
              - "Job/Build"
              - "Job/Configure"
              - "Run/Replay"
            entries:
              - group: "billing-devs"
        agents:
          - name: "linux-builders"
            pattern: "linux-.*"
            permissions:
              - "Agent/Build"
            entries:
              - group: "billing-devs"
Группы billing-devs приезжают из твоего LDAP или OIDC - так роли в Jenkins склеиваются с корпоративными группами, и тебе не нужно перечислять людей поимённо.

CSRF, анонимы и изоляция агентов

Права роздали - закрываем остальные фланги.

Защита от CSRF. В современных версиях Jenkins crumb-токен против межсайтовой подделки запросов включён по умолчанию, и выключать его нельзя. Если внешняя система не может дёрнуть API - выдай ей API token конкретного пользователя, а не отключай CSRF на весь инстанс.

Анонимный доступ. Решай осознанно, что видит незалогиненный пользователь. Для внутреннего прода обычно не даёшь анониму вообще ничего - даже Overall/Read. Тогда без логина человек видит только форму входа.

Изоляция агентов от контроллера. Ключевой момент, который часто упускают. Контроллер не должен запускать сборки сам - на нём лежат креды и конфиги всего Jenkins. Поэтому:
  • Ставь число исполнителей на встроенной ноде в 0, чтобы джобы физически не выполнялись на контроллере.
  • Включи Agent -> Controller Access Control - подсистему, которая ограничивает, какие команды агент может слать контроллеру.
  • В проде агенты эфемерные: в Kubernetes каждый билд поднимает свой одноразовый pod, который умирает после сборки. Скомпрометированная сборка не живёт дальше своего pod.
Пример объявления такого pod-агента прямо в declarative-пайплайне:

Код: Выделить всё

pipeline {
  agent {
    kubernetes {
      yaml '''
        apiVersion: v1
        kind: Pod
        spec:
          containers:
            - name: maven
              image: maven:3.9-eclipse-temurin-21
              command: ["sleep"]
              args: ["infinity"]
      '''
    }
  }
  stages {
    stage('Build') {
      steps {
        container('maven') {
          sh 'mvn -B clean verify'
        }
      }
    }
  }
}
Аудит. Поставь плагин Audit Trail - он пишет, кто запустил сборку, кто менял конфиг и кто трогал настройки безопасности. Без журнала разбор инцидента превращается в гадание.

Типичные грабли
  • Всем admin. Это разработчику дали Overall/Administer "чтобы не мешало". Administer - это удалённое выполнение кода на контроллере и чтение всех секретов. Держи его у одного-двух человек, остальным - точечные права. Это самая частая дыра в jenkins безопасности.
  • Сначала включить безопасность, потом подумать о доступе себе. Классика: переключил Authorization, нажал Save и выкинул сам себя. Лечится правкой config.xml на диске (поставить временно unsecured) и рестартом - но лучше до сохранения убедиться, что твой аккаунт точно admin.
  • Оставленный анонимный Read в проде. Анониму не нужно видеть имена джоб, переменные окружения и логи сборок - там утекают пути, хосты и иногда токены.
  • Исполнители на контроллере. Ноль исполнителей на built-in node - не паранойя, а базовая гигиена.
  • Сравни с соседями. У GitLab CI и GitHub Actions безопасность встроена в платформу: роли наследуются от репозитория/группы, секреты и OIDC из коробки. В Jenkins всё это собираешь сам из плагинов - больше гибкости, но и больше ответственности за конфигурацию.
Мини-лаба
  • Подними Jenkins локально, в Security выбери Jenkins' own database и сними галочку саморегистрации. Заведи трёх пользователей: admin, dev, viewer.
  • Включи Matrix-based security. Дай authenticated только Overall/Read, admin - Administer. Зайди под dev и убедись, что джобы он не запускает.
  • Поставь плагин Role-based Authorization Strategy, переключи стратегию на него. Создай глобальную роль developer и item-роль на папку по regex.
  • Вынеси всю конфигурацию ролей в JCasC-файл и перезапусти Jenkins из него - проверь, что права восстановились из кода.
  • Поставь число исполнителей на built-in node в 0 и убедись, что сборки уходят на агент.
Контрольные вопросы
  • Чем аутентификация (Security Realm) отличается от авторизации, и почему их настраивают отдельно?
  • В чём разница между global, item и agent ролями в Role Strategy, и какую роль ты дашь команде на свою папку?
  • Почему на контроллере выставляют ноль исполнителей и что даёт Agent -> Controller Access Control?
  • Какие три-четыре галочки ты проверишь первым делом, выставляя Jenkins в прод?
Итог

Безопасный Jenkins держится на трёх китах: проверенный источник пользователей (LDAP или OIDC в проде), грамотная авторизация (Role Strategy с принципом наименьших привилегий вместо тотального admin) и изоляция контроллера от сборок (эфемерные агенты, ноль исполнителей на built-in node). Описывай всё это через JCasC, чтобы права жили в git, и включи аудит. Тогда твой Jenkins перестанет быть открытой дверью и станет нормальным боевым инструментом.
👍5 ❤️3 🔥2 😄 🤔1
Аватара пользователя
haskell_lover
Сообщения: 1
Зарегистрирован: 11 май 2026, 12:50

Re: Безопасность Jenkins: аутентификация и матрица прав

Сообщение haskell_lover »

Спасибо за JCasC-пример, наконец дошло как привязать item-роль к папке через pattern. До этого годами кликал галочки в матрице руками и плакал.
👍 ❤️ 🔥 😄 🤔
Аватара пользователя
ndgrumpy
Сообщения: 1
Зарегистрирован: 15 май 2026, 09:38

Re: Безопасность Jenkins: аутентификация и матрица прав

Сообщение ndgrumpy »

А подскажите, если у нас вход через Keycloak (OIDC), группы из него подтягиваются в Role Strategy автоматом или их надо где-то ещё мапить? У меня developer-роль почему-то не цепляется к группе из IdP.
👍 ❤️1 🔥 😄 🤔1
Ответить
← Предыдущая глава
Развёртывание в Kubernetes из конвейера
Следующая глава →
Учётные данные Jenkins: credentials в конвейере

Все главы курса «Jenkins: конвейеры CI/CD от основ до продакшена»

Поделиться темой: ✈ Telegram VK
Похожие запросы: что такое jenkins простыми словамикак установить jenkins на linux и в dockerпервичная настройка jenkins после установкикакие плагины jenkins нужны новичкукак настроить агенты jenkins для сборкиcicd для начинающих с чего начать на jenkins

Вернуться в «Jenkins: конвейеры CI/CD от основ до продакшена»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость