Механизм секретов GitOps отслеживает Git-репозиторий и применяет декларативную конфигурацию Stronghold, когда у новых коммитов достаточно проверенных подписей.
Основные свойства:
- конфигурация описывается в YAML и применяется через API Stronghold;
- состояние применения сохраняется в Stronghold;
- для подключения к Stronghold используются адрес и токен из конфигурации механизма;
- требуется обновляемый periodic-токен; Stronghold продлевает его автоматически за 24 часа до окончания срока действия;
- статус и ошибки доступны по пути
gitops/status; - механизм может управлять тем же экземпляром Stronghold, на котором работает, или другим;
- можно включить несколько точек монтирования, чтобы из разных репозиториев управлять разными частями конфигурации в рамках прав каждого токена.
Настройка
Включите механизм секретов GitOps:
d8 stronghold secrets enable gitopsПо умолчанию механизм монтируется по пути
gitops/. Чтобы использовать другой путь, укажите-path.Настройте Git-репозиторий для мониторинга:
d8 stronghold write gitops/configure/git_repository \ git_repo_url="https://gitlab.example.com/org/stronghold-gitops.git" \ required_number_of_verified_signatures_on_commit=1 \ git_poll_period=1mПараметр Обязательный По умолчанию Описание git_repo_urlда (при создании) — URL Git-репозитория git_branch_nameнет mainОтслеживаемая ветка git_poll_periodнет 5mИнтервал опроса репозитория required_number_of_verified_signatures_on_commitнет 0Минимальное число проверенных подписей коммита перед применением конфигурации git_ca_certificateнет пусто CA-сертификат для проверки TLS Git max_clone_size_bytesнет 10485760(10 МиБ)Максимальный размер клона в памяти в байтах; 0отключает ограничениеЕсли репозиторий приватный, настройте учётные данные:
d8 stronghold write gitops/configure/git_credential \ username=token \ password=glpat-XXXXXXXXСоздайте PGP-ключи для подписи коммитов:
gpg --quick-generate-key "key1 <key1@example.com>" rsa4096 gpg --quick-generate-key "key2 <key2@example.com>" rsa4096Экспортируйте открытые ключи и загрузите их в Stronghold:
gpg --armor --output key1.pgp --export key1 gpg --armor --output key2.pgp --export key2 d8 stronghold write gitops/configure/trusted_pgp_public_key/key1 public_key=@key1.pgp d8 stronghold write gitops/configure/trusted_pgp_public_key/key2 public_key=@key2.pgpНастройте доступ механизма к API. Предпочтительнее передавать обёрнутый обновляемый periodic-токен. Механизм разворачивает токен и сохраняет его; позже токен прочитать нельзя:
TOKEN=$(d8 stronghold token create -orphan -period=7d -policy=gitops-apply \ -display-name="gitops-plugin" -wrap-ttl=1m -field=wrapping_token) d8 stronghold write gitops/configure/vault \ vault_addr=https://stronghold.example.com:8200 \ wrapping_token=$TOKENПараметр Описание vault_addrАдрес API Stronghold wrapping_tokenОбёрнутый токен; предпочтительный способ передачи учётных данных vault_tokenТокен в открытом виде (используйте только если wrapping недоступен) vault_namespaceНеймспейс для вызовов API vault_cacert_bytesCA-сертификат в формате PEM для проверки TLS rotateПри значении trueи переданном токене создаётся orphan-токен с теми же параметрами, старый токен отзываетсяВыдайте токену только политики, необходимые для управления ресурсами из Git-репозитория.
Подпись и публикация конфигурации
Установите git-signatures.
Склонируйте репозиторий конфигурации (или создайте новый) и укажите ключ подписи:
git clone https://gitlab.example.com/org/stronghold-gitops.git cd stronghold-gitops gpg --list-key git config user.signingKey <KEY_ID>Добавьте файлы конфигурации в декларативном YAML-формате, сделайте коммит и подпишите его:
git add . git commit -m "Add AppRole auth method" git signatures add git signatures showПример вывода
git signatures show:Public Key ID | Status | Trust | Date | Signer Name ===================================================================================================== 0C3AAAA10E30D5F3 | VALIDSIG | ULTIMATE | Пн 22 дек 2025 20:19:33 MSK | key1 <key1@example.com>Отправьте коммит и подписи:
git push origin main git signatures push
После следующего опроса, если у коммита достаточно проверенных подписей доверенными ключами, механизм применит конфигурацию.
Статус
Проверьте текущий статус:
d8 stronghold read gitops/statusВ ответе:
status— текущий статус процесса или ошибка;last_run— время последнего периодического запуска (never, если механизм ещё не запускался);last_finished_commit— хеш последнего успешно применённого коммита;last_finished_commit_date— дата этого коммита.
Отключение
d8 stronghold secrets disable gitopsПри отключении механизма удаляются его данные в хранилище для этой точки монтирования, включая сохранённый API-токен и состояние применения.