Хочу настроить сборку, тестирование и деплой через GitLab.
Условная схема пайплайна выглядит примерно так:

Таск deploy_staging запускается автоматически.
Таск deploy_prod могут запустить только определенные юзеры.
Для хранения и передачи секретов/настроек в пайплайн и на сервер используется Hashicorp Vault.
И я не могу придумать, как защитить хост от доступа любого разработчика, который может коммитить одну из веток.
Единственный способ, который пришел в голову — каждый раз при запуске пайплайна руками передавать в окружение какой-то специальный ключ, который знает только человек с правами на доступ к продакшн-серверу. И то не уверен, что этот ключ нельзя будет подсмотреть в логах.
В системах, где деплойный конфиг скрыт от разработчика, можно задать какие-то условия, которые разрешают деплой на продакшн при определенных условиях (имя ветки, имя инициатора деплоя). В GitLab все параметры попадают в переменные окружения, их можно вывести в логи, посмотреть, скопировать себе все токены и сертификаты.