Повышение безопасности Jenkins: альтернативы аутентификации по паролю

В августе 2021 года популярный сервер автоматизации Jenkins значительно усилил безопасность, удалив поддержку аутентификации по паролю. Этот шаг направлен на улучшение общего состояния безопасности экземпляров Jenkins и поощрение пользователей к использованию более безопасных методов аутентификации. В этой статье мы рассмотрим несколько альтернативных методов аутентификации, которые заменят аутентификацию на основе пароля в Jenkins. Мы предоставим примеры кода для каждого метода, чтобы помочь вам эффективно их реализовать.

  1. Аутентификация по ключу SSH.
    Аутентификация по ключу SSH предлагает безопасный и удобный способ аутентификации с помощью Jenkins. Чтобы настроить его, выполните следующие действия:

Шаг 1. Создайте пару ключей SSH:

$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

Шаг 2. Добавьте открытый ключ в Jenkins:

  • Перейдите на панель управления Jenkins >Управление Jenkins >Управление учетными данными.
  • В разделе «Хранилища, привязанные к Jenkins», нажмите «Jenkins», а затем «Глобальные учетные данные».
  • Добавьте свой открытый ключ в качестве нового имени пользователя SSH с учетными данными закрытого ключа.

Шаг 3. Настройте проекты Jenkins для использования аутентификации SSH:

  • Перейти на страницу конфигурации проекта.
  • В разделе «Среда сборки» выберите «Агент SSH» и выберите ранее добавленные учетные данные SSH.
  1. Интеграция единого входа (SSO):
    Jenkins поддерживает различных поставщиков единого входа, таких как LDAP, Active Directory, OAuth и других. Вот пример интеграции Jenkins с LDAP:

Шаг 1. Установите плагин LDAP:

  • Перейдите на панель управления Jenkins >Управление Jenkins >Управление плагинами.
  • Перейдите на вкладку «Доступно» и найдите «LDAP».
  • Установите плагин «LDAP» и перезапустите Jenkins.

Шаг 2. Настройте параметры LDAP:

  • Перейдите на панель управления Jenkins >Управление Jenkins >Настройка глобальной безопасности.
  • В разделе «Область безопасности» выберите «LDAP» и укажите необходимые сведения о сервере LDAP.
  1. Аутентификация по токену API:
    Jenkins предоставляет токены API, которые можно использовать для аутентификации. Аутентификация по токену API подходит для автоматизации сценариев и программного взаимодействия с Jenkins. Вот пример аутентификации с помощью токена API:

Шаг 1. Создайте токен API:

  • Перейдите на панель инструментов Jenkins >Люди >Ваш профиль.
  • В разделе «Токен API» нажмите «Добавить новый токен» и сгенерируйте токен.

Шаг 2. Аутентификация с использованием токена API:

$ curl -u username:apiToken https://jenkins.example.com/api/json
  1. Аутентификация на основе плагинов.
    Jenkins имеет различные плагины аутентификации, которые расширяют его возможности аутентификации. Некоторые популярные плагины включают аутентификацию GitHub, учетные данные Google OAuth и SAML.

Шаг 1. Установите нужный плагин аутентификации:

  • Перейдите на панель управления Jenkins >Управление Jenkins >Управление плагинами.
  • Перейдите на вкладку «Доступно» и найдите нужный плагин аутентификации.
  • Установите плагин и перезапустите Jenkins.

Шаг 2. Настройте параметры плагина:

  • Перейдите на панель управления Jenkins >Управление Jenkins >Настройка глобальной безопасности.
  • В разделе «Область безопасности» или «Авторизация» настройте параметры плагина.

После удаления аутентификации по паролю в Jenkins крайне важно использовать альтернативные методы аутентификации для обеспечения безопасности вашей среды Jenkins. В этой статье мы рассмотрели аутентификацию по ключу SSH, интеграцию единого входа, аутентификацию по токену API и аутентификацию на основе плагинов. Внедрив эти методы, вы можете повысить безопасность Jenkins и снизить риски, связанные с аутентификацией на основе пароля.

Помните, что каждый метод аутентификации имеет свои преимущества и особенности, поэтому выберите тот, который лучше всего соответствует вашему конкретному случаю использования и требованиям безопасности. Активно внедряйте механизмы безопасной аутентификации для защиты вашей инфраструктуры Jenkins.