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

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

Semaphore может подключаться к внешнему менеджеру секретов — например, HashiCorp Vault, OpenBao, AWS Secrets Manager, Azure Key Vault или Devolutions Server (DVLS) — и автоматически импортировать из него секреты в хранилище ключей. Вместо того чтобы вручную копировать учётные данные в Semaphore и поддерживать их в актуальном состоянии, вы указываете Semaphore удалённое хранилище, и он сам поддерживает локальную копию.

Пути синхронизации — это правила, которые сообщают Semaphore, какие секреты импортировать из удалённого хранилища и как их называть после импорта. Менеджер секретов может содержать тысячи секретов во множестве папок; пути синхронизации позволяют выбрать только нужные поддеревья и управлять именованием создаваемых ключей.

Ключевые понятия

  • Удалённое хранилище — настроенное подключение к внешнему менеджеру секретов, включая его адрес и учётные данные, которые Semaphore использует для чтения.
  • Синхронизация — процесс чтения секретов из удалённого хранилища и сверки их с ключами, хранящимися в Semaphore.
  • Путь синхронизации — одно правило импорта, состоящее из пути, префикса и разделителя.

Как работает путь синхронизации

Каждый путь синхронизации имеет три поля:

  • Путь — расположение в удалённом хранилище, откуда выполняется импорт. Это базовая папка, префикс или поддерево, которое Semaphore перечисляет и читает. Всё, что находится внутри, становится кандидатом на импорт.
  • Префикс — строка, добавляемая в начало каждого сгенерированного имени ключа. Используйте его, чтобы выделить импортированные секреты в отдельное пространство имён и избежать конфликтов с ключами из других путей или хранилищ (например, prod-).
  • Разделитель — символ, которым соединяются части удалённого расположения секрета в одно имя ключа. Поскольку удалённый секрет может находиться на несколько папок в глубину, разделитель определяет, как эта иерархия сворачивается в одно читаемое имя.

При запуске синхронизации Semaphore обходит путь и для каждого найденного секрета формирует имя ключа, объединяя расположение секрета с помощью разделителя и добавляя префикс в начало. Тип создаваемого ключа (SSH-ключ, логин/пароль или простая секретная строка) определяется автоматически по структуре удалённого секрета.

Для одного хранилища можно задать несколько путей синхронизации. Каждый путь импортируется независимо, поэтому вы можете забирать секреты из нескольких несвязанных областей одного менеджера секретов и задавать для каждой свой префикс и стиль именования.

подсказка

Для каждого провайдера применяются разумные значения по умолчанию — например, для HashiCorp Vault, OpenBao и AWS Secrets Manager разделитель по умолчанию /, для Azure Key Vault — -, а для Devolutions Server — \ — поэтому в большинстве случаев достаточно заполнить только путь.

Запуск синхронизации

Синхронизация может выполняться двумя способами:

  1. Вручную. Откройте хранилище и используйте действие Синхронизировать сейчас. Semaphore немедленно сверит это хранилище с настроенными путями синхронизации. Это полезно для первого импорта или чтобы сразу подтянуть изменение.
  2. Автоматически, по расписанию. Включите Синхронизировать ключи для хранилища и задайте интервал синхронизации в минутах. После этого Semaphore будет повторно запускать синхронизацию с указанной периодичностью в фоновом режиме. Интервал 0 отключает автоматическую синхронизацию, оставляя только ручной вариант.

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

примечание

В отказоустойчивом (high-availability) развёртывании автоматические синхронизации координируются между узлами, поэтому конкретная синхронизация выполняется одновременно только на одном узле — дублирующих импортов не будет.

Что синхронизация делает с вашими ключами

Синхронизация — это полное зеркалирование, а не однократное копирование. При каждом запуске Semaphore сверяет удалённое хранилище с ранее импортированными ключами:

  • Новые секреты, найденные по пути синхронизации, создаются как ключи.
  • Существующие импортированные ключи обновляются в соответствии с текущим удалённым значением.
  • Ключи, которые были импортированы ранее, но больше не существуют в удалённом хранилище, удаляются.

Затрагиваются только ключи, импортированные Semaphore — ключи, созданные вами вручную, синхронизация никогда не изменяет и не удаляет.

внимание

Поскольку импортированные ключи являются управляемыми копиями удалённых секретов, удаление хранилища (или отключение его синхронизации) также удаляет ключи, полученные из него.

Две области: общие ключи и переменные окружения

Пути синхронизации можно настроить в двух местах:

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

Механика идентична; отличается только место назначения импортированных секретов.

Примечания и ограничения

  • Синхронизация поддерживается только для внешних типов хранилищ (HashiCorp Vault, OpenBao, AWS Secrets Manager, Azure Key Vault, Devolutions Server). Встроенное хранилище База данных хранит секреты нативно, и синхронизировать ему нечего.
  • Учётные данные самого удалённого хранилища (токен или ключ, который Semaphore использует для аутентификации) хранятся безопасно и отдельно от импортируемых секретов.
  • Если синхронизация выключена и путей не осталось, конфигурация синхронизации для этого хранилища очищается.