🔐 Безопасность
Введение
Безопасность — один из главных приоритетов 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 для анализа кодовой базы и зависимостей, а также для автоматизации обновления зависимостей.
-
Без публичных эксплойтов
Не раскрывайте уязвимости публично до выхода исправления. -
Благодарности
Исследователи безопасности по желанию могут быть упомянуты в примечаниях к релизу.