Перейти к основному содержимому

🔐 Безопасность

Введение

Безопасность — один из главных приоритетов Semaphore UI. Автоматизируете ли вы критически важные задачи инфраструктуры или управляете доступом команды к чувствительным системам, Semaphore UI спроектирован так, чтобы обеспечивать надёжную и безопасную работу «из коробки». В этом разделе описано, как Semaphore обеспечивает безопасность и что следует учитывать при развёртывании его в production.

Аутентификация и авторизация

Semaphore поддерживает безопасную аутентификацию и гибкие механизмы авторизации:

  • Способы входа:

    • Логин/пароль
      Способ по умолчанию: учётные данные хранятся в базе данных Semaphore. Пароли хешируются стойким алгоритмом (bcrypt).

    • LDAP
      Позволяет интегрироваться с корпоративными службами каталогов. Поддерживает фильтрацию пользователей/групп и защищённые соединения через LDAPS.

    • OpenID Connect (OIDC)
      Обеспечивает единый вход (SSO) через провайдеров идентификации, таких как Google, Azure AD или Keycloak. Поддерживает пользовательские claims и сопоставление групп.

  • Двухфакторная аутентификация (2FA)
    Доступна 2FA на основе TOTP, рекомендуется для всех пользователей. Её можно включить для каждого пользователя отдельно; поддерживаются необязательные коды восстановления. См. параметры конфигурации auth.totp.enabled и auth.totp.allow_recovery.

  • Управление доступом на основе ролей
    Вы можете назначать пользователям различные роли, такие как Admin, Maintainer или Viewer, ограничивая доступ в соответствии с зоной ответственности.

  • Управление сессиями
    Сессии защищены безопасными HTTP-cookie. Истечение срока сессии и механизмы выхода сводят риски к минимуму.

Секреты и учётные данные

Безопасное управление секретами — одна из ключевых возможностей:

  • Зашифрованное хранилище ключей
    Учётные данные и секретные переменные шифруются при хранении с помощью AES.

  • Изоляция окружения
    Секреты передаются заданиям только во время выполнения и не раскрываются напрямую в окружении контейнера.

  • SSH-ключи и токены
    Пользователи сами отвечают за загрузку корректных SSH-ключей и токенов. Они хранятся в зашифрованном виде и используются только при выполнении задач.

  • Интеграция с HashiCorp Vault (Pro)
    Секреты можно хранить во внешнем экземпляре Vault. Место хранения выбирается для каждого секрета отдельно при его создании или редактировании.

Шифрование данных

Чувствительные данные хранятся в базе данных в зашифрованном виде. Чтобы включить шифрование ключей доступа (Access Keys), задайте параметр access_key_encryption в файле конфигурации. Его значение необходимо сгенерировать командой:

head -c32 /dev/urandom | base64

Запуск недоверенного кода / playbook’ов

Semaphore выполняет определённые пользователями playbook’и и команды, что может быть рискованно:

  • Изоляция контейнеров
    Задачи выполняются в изолированных Docker-контейнерах. Эти контейнеры не имеют доступа к хостовой системе.

  • Минимальные привилегии
    Контейнеры запускаются с минимальными правами, и их можно ограничить ещё сильнее с помощью флагов Docker.

  • Выполнение в chroot
    Semaphore может выполнять задачи внутри chroot-окружения, чтобы дополнительно изолировать среду выполнения от хостовой системы.

  • Пользователь процесса задачи
    Задачи можно выполнять от имени выделенного системного пользователя без прав root (например, semaphore), чтобы снизить последствия возможных эксплойтов. Это необязательно и настраивается в соответствии с политиками системы.

Безопасное развёртывание

Чтобы развёртывание Semaphore было безопасным:

  • Используйте HTTPS
    Semaphore поддерживает HTTPS как через встроенную поддержку TLS, так и через обратный прокси, например Nginx. В production настоятельно рекомендуется включить HTTPS.

    Чтобы включить встроенную поддержку HTTPS, добавьте следующий блок в config.json:

    {
    ...
    "tls": {
    "enabled": true,
    "cert_file": "/path/to/cert/example.com.cert",
    "key_file": "/path/to/key/example.com.key"
    }
    ...
    }
  • Работайте за файрволом
    Ограничьте доступ к Semaphore UI и базе данных только доверенными IP-адресами.

  • Безопасность базы данных
    Используйте стойкие пароли и разрешайте доступ к базе данных только Semaphore.

Обновления и управление патчами

Обновления безопасности публикуются регулярно:

  • Обновляйтесь вовремя
    Всегда используйте последний стабильный релиз.

  • Список изменений
    Перед обновлением просматривайте изменения на GitHub.

  • Автоматические обновления
    Если вы используете Docker, рассмотрите возможность автоматизации регулярных обновлений с помощью pipeline’ов.

Сообщение об уязвимостях

Нашли уязвимость? Помогите нам сохранить Semaphore безопасным:

  • Ответственное раскрытие
    Напишите нам на [email protected].

Целевые сроки устранения уязвимостей

Мы стремимся устранять сообщённые уязвимости в следующие целевые сроки:

  • Критические: в течение 30 дней
  • Высокие: в течение 60 дней
  • Средние: в течение 90 дней
  • Низкие: по мере возможности, как правило в течение 180 дней

Для активно эксплуатируемых проблем, затрагивающих последние стабильные релизы, могут выпускаться внеплановые патчи.

Инструменты анализа безопасности кода

Мы используем CodeQL, Codacy, Snyk и Renovate для анализа кодовой базы и зависимостей, а также для автоматизации обновления зависимостей.

  • Без публичных эксплойтов
    Не раскрывайте уязвимости публично до выхода исправления.

  • Благодарности
    Исследователи безопасности по желанию могут быть упомянуты в примечаниях к релизу.