Управление секретами¶
Где хранятся секреты¶
| Что | Где | Формат |
|---|---|---|
| SSH/DB/API пароли | Vaultwarden | Plaintext, git-ignored |
| Ansible секреты | ansible/shiva-ansible/inventory/group_vars/vault.yml |
ansible-vault encrypted |
| Vault password | .vault_pass (локальный файл, git-ignored) |
Plaintext |
| CI/CD переменные | GitLab → Settings → CI/CD Variables | Instance-level |
| Docker registry | GitLab instance CI/CD variables | REGISTRY_URL, REGISTRY_USER, REGISTRY_PASSWORD |
Запрещено
- Коммитить пароли в git
- Хранить plaintext пароли в wiki/документации
- Передавать пароли в мессенджерах
Ansible Vault¶
Все секреты для Ansible хранятся в зашифрованном файле:
ansible/shiva-ansible/inventory/group_vars/vault.yml
Переменные в vault¶
| Переменная | Описание | Где используется |
|---|---|---|
vault_xray_admin_password |
Пароль панели 3x-ui | servers.ini [all:vars] |
vault_xray_basic_auth_password |
htpasswd для nginx→3x-ui | servers.ini [all:vars] |
vault_node_exporter_basic_auth_password |
htpasswd для node_exporter | Prometheus scrape |
vault_node_exporter_mysql_password |
MySQL exporter password | MySQL exporter |
vault_node_exporter_mysql_htpasswd_password |
htpasswd для mysql exporter | Nginx |
vault_loki_password |
Loki basic auth | Fluent Bit → Loki |
vault_infra_become_password |
sudo для внутренних серверов | servers.ini [infra:vars] |
vault_xray_inbound_private_key |
x25519 private key | Xray Reality config |
vault_htpassword_estonia |
htpasswd для Эстонии | Legacy server |
Как работать с vault¶
cd ansible/shiva-ansible
# Просмотреть секреты
ansible-vault view inventory/group_vars/vault.yml --vault-password-file .vault_pass
# Редактировать секреты
ansible-vault edit inventory/group_vars/vault.yml --vault-password-file .vault_pass
# Запуск плейбука с vault
ansible-playbook -i inventory/servers.ini playbooks/vpn.yml \
--limit <host> --vault-password-file .vault_pass
Vault password¶
Файл .vault_pass должен быть создан локально (не в git):
Пароль получить у DevOps (zardes).
Добавить новый секрет¶
ansible-vault edit inventory/group_vars/vault.yml --vault-password-file .vault_pass- Добавить переменную
vault_new_secret: "значение" - Использовать в
servers.iniили плейбуках:{{ vault_new_secret }} - Закоммитить зашифрованный
vault.yml
Vaultwarden¶
Мастер-файл паролей в monorepo shivavpn. Содержит:
- Пароли VPN-провайдеров (MonoVM, LLHost, TheHosting, DataPacket)
- GitLab токены (API, CI/CD)
- MySQL пароли (vpn, root, exporter)
- Keycloak credentials
- Telegram Bot tokens
- GitHub tokens
- SSH пароли для внутренних серверов
Доступ: файл в .gitignore, хранится только локально у DevOps.
GitLab CI/CD Variables¶
| Проект | Переменные |
|---|---|
| Instance-level | REGISTRY_URL, REGISTRY_USER, REGISTRY_PASSWORD |
| vpn-config-service (55) | IMAGE_TAG, deploy vars |
| vpn/back (33) | Build + deploy vars |
Токен для API: glpat-... (см. Vaultwarden).
Пароли с $
В GitLab CI Variables для паролей с символом $ нужно ставить raw=true.
CA сертификаты¶
Все приватные ключи зашифрованы ansible-vault и хранятся в git:
| Файл | Тип | В git? |
|---|---|---|
CA/ca.crt |
Публичный сертификат CA | Да (plaintext) |
CA/ca.key |
Приватный ключ CA | Да (vault-encrypted) |
CA/ca.p12 |
PKCS#12 бандл | Да (vault-encrypted) |
CA/selfsigned-ca.key |
Self-signed CA key | Да (vault-encrypted) |
CA/xui_all.crt |
Wildcard cert для XUI панелей | Да (plaintext) |
CA/xui_all.key |
Wildcard key для XUI панелей | Да (vault-encrypted) |
Ansible copy: src: автоматически дешифрует vault-encrypted файлы при запуске с --vault-password-file.
# Просмотреть зашифрованный ключ
ansible-vault view CA/ca.key --vault-password-file .vault_pass
# Перегенерировать ключ — зашифровать после создания
openssl genrsa -out CA/new.key 4096
ansible-vault encrypt CA/new.key --vault-password-file .vault_pass
Ротация секретов¶
При компрометации:
- Сменить пароль в
[Vaultwarden](https://vault.shivavpn.io) - Обновить
vault.yml:ansible-vault edit ... - Прогнать плейбук на затронутые серверы
- Обновить CI/CD variables в GitLab (если затронуты)