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

Key Store

Key Store служит централизованным хранилищем учетных данных в Semaphore. Он управляет данными аутентификации, необходимыми для клонирования удаленных Git-репозиториев, подключения к целевым хостам инфраструктуры, повышения привилегий (sudo/become) и расшифровки секретов Ansible Vault.

Key Store

Key Store разделен на две основные вкладки:

  • Вкладка Keys: Список всех учетных данных, созданных для текущего проекта, с указанием имени, типа хранилища, типа ключа и статуса синхронизации.
  • Вкладка Storages (Pro): Настройка внешних хранилищ секретов (таких как HashiCorp Vault, OpenBao, AWS Secrets Manager или CyberArk) для динамического разрешения и автоматической синхронизации.

Типы учетных данных​

Semaphore разделяет сохраненные учетные данные на три основных типа:

1. SSH-ключи​

SSH-ключи обеспечивают асимметричную криптографическую аутентификацию для подключения к узлам Linux/UNIX и клонирования Git-репозиториев по SSH ([email protected]:...).

При настройке учетных данных SSH-ключа можно указать:

  • Имя ключа: Понятное описание учетных данных для инвентарей и шаблонов проекта.
  • Имя пользователя (Необязательно): Учетная запись по умолчанию для установления SSH-соединения (например, ansible или ubuntu).
  • Парольная фраза (Необязательно): Парольная фраза для расшифровки защищенных приватных ключей. Поля ввода парольной фразы имеют значок видимости (глаз) и скрыты по умолчанию.
  • Приватный ключ: Исходный текст приватного ключа PEM/OpenSSH.

Встроенный генератор SSH-ключей​

Вместо ручного запуска ssh-keygen на внешних машинах Semaphore предоставляет встроенный генератор пар SSH-ключей в один клик прямо в модальном окне:

Generate SSH Key Modal

  1. Выберите SSH Key в выпадающем списке Type.
  2. Установите флажок Generate SSH Key.
  3. Поле ручного ввода Private Key будет автоматически отключено и заблокировано.
  4. Нажмите Create. Semaphore автоматически сгенерирует криптографически стойкую пару ключей (ED25519/RSA), сохранит зашифрованный приватный ключ в базе данных и отобразит публичный ключ в диалоговом окне:

Generated SSH Public Key

Используйте кнопку Copy to Clipboard для копирования публичного ключа и добавьте его в deploy keys вашего Git-провайдера или в файл ~/.ssh/authorized_keys на целевых хостах.

Извлечение публичных ключей позже (Public Key Drawer)​

Если вы закрыли окно или вам потребуется публичный ключ позже, создавать пару заново не нужно. При редактировании любого ключа, созданного генератором, Semaphore предоставляет раскрывающуюся панель Public key:

Public Key Drawer

  • Нажмите Show / Hide для просмотра строки публичного ключа.
  • Нажмите значок буфера обмена, чтобы мгновенно скопировать публичный ключ.

Привязка deploy keys к популярным Git-хостингам​

Для репозиториев Git с аутентификацией по SSH добавьте сгенерированный публичный ключ в качестве deploy key только для чтения:


2. Вход по паролю​

Тип учетных данных Вход по паролю поддерживает как традиционную аутентификацию по связке логин/пароль, так и изолированные секретные строки:

  • Аутентификация хоста и sudo: Обеспечивает парольный доступ по SSH и повышение привилегий через sudo на целевых узлах.
  • Аутентификация Git HTTPS: Аутентификация в удаленных репозиториях по HTTPS с использованием имени пользователя и персональных токенов доступа (PAT).
  • Пароли Ansible Vault: Разблокировка зашифрованных файлов и переменных Ansible Vault во время выполнения задач.
Секретные строки и персональные токены доступа (PAT)

Для сохранения чистой секретной строки (например, токена API, пароля Vault или PAT) оставьте поле Login / Username пустым. Semaphore сохранит значение как изолированный секрет без привязки к имени пользователя.

Маскирование секретов и защита от перезаписи​

Для защиты учетных данных от несанкционированного просмотра и случайного изменения:

  • Поля ввода паролей и парольных фраз маскируются в интерфейсе с возможностью временного показа.
  • При редактировании существующего ключа поля ввода секретов отключены по умолчанию.
  • Чтобы обновить или заменить секрет, необходимо явно установить флажок Override в нижней части формы. Это предотвращает случайную перезапись при обычном редактировании.

3. Нет​

Тип Нет используется как заполнитель при отсутствии аутентификации. Он применяется для общедоступных репозиториев Git (например, на GitHub или GitLab) и локальных плейбуков, не требующих ключей или паролей.


Хранилища секретов​

Semaphore поддерживает архитектуру раздельного хранения секретов. При создании или редактировании ключа вы можете выбрать место хранения секрета с помощью вкладок:

Вкладка хранилищаДоступностьОписание
LocalOpen Source & ProСекрет хранится прямо в базе данных Semaphore с использованием конвертного шифрования.
StorageProСекрет ссылается на внешний движок секретов (например, HashiCorp Vault, AWS Secrets Manager).
EnvOpen Source & ProСекрет динамически считывается во время выполнения из переменной окружения сервера.
FileOpen Source & ProСекрет считывается из защищенного файла в настроенном каталоге секретов на сервере.

Хранилища секретов

Хранилище в базе данных (Local)​

По умолчанию секреты хранятся в зашифрованном виде в базе данных приложения с использованием симметричного шифрования AES. Мастер-ключ настраивается через параметры сервера:

  • Параметр конфигурации: access_key_encryption
  • Переменная окружения: SEMAPHORE_ACCESS_KEY_ENCRYPTION
Генерация мастер-ключа шифрования

Создайте криптографически стойкий 32-байтный ключ base64 перед запуском производственных инстансов:

head -c32 /dev/urandom | base64

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

Переменные окружения и файлы (Только чтение)​

При выборе вкладки Env или File Semaphore рассматривает хранилище как внешний источник только для чтения. В интерфейсе появляется уведомление:

Read-only secret storage chosen.

Хранилище только для чтения

  • Источник Env: Укажите точное имя переменной окружения, экспортированной на сервере (например, SEMAPHORE_EXTERNAL_VAULT_TOKEN).
  • Источник File: Укажите путь к файлу относительно настроенного каталога секретов (dirs.secrets / SEMAPHORE_SECRETS_PATH, по умолчанию /tmp/semaphore).

Для структурированных ключей содержимое файлов и переменных должно быть оформлено как корректный JSON-объект. Подробнее см. Источники из переменных и файлов.

Внешние корпоративные системы секретов (Pro & Enterprise)​

Semaphore Pro и Enterprise расширяют Key Store нативными коннекторами к корпоративным системам управления секретами:

  • HashiCorp Vault: Подключение по AppRole или токену для чтения и записи секретов KV v1/v2.
  • OpenBao: Open-source форк HashiCorp Vault, совместимый по API.
  • AWS Secrets Manager Enterprise: Интеграция с ролями AWS IAM или статическими ключами доступа.
  • Devolutions Server: Интеграция для централизованного управления привилегированным доступом.
  • CyberArk PAM Enterprise: Чтение и запись секретов через REST API CyberArk PVWA.

Синхронизация секретов из удаленных хранилищ​

Вместо ручного добавления каждого ключа Semaphore поддерживает автоматическую синхронизацию из внешних хранилищ секретов.

Когда секрет управляется через синхронизацию:

  • Он помечается активным бейджем synchronized в таблице Key Store.
  • Ручное редактирование секрета в интерфейсе блокируется, чтобы внешнее хранилище оставалось единственным источником истины.
  • Любые обновления или ротации секретов автоматически передаются в Semaphore согласно настроенному интервалу.

Подробные инструкции по настройке см. в разделе Синхронизация секретов.