feat: Создана папка vault для хранения секретов и улучшена работа с Ansible Vault

- Создана папка vault/ для хранения всех секретов
- Перенесен vault-password.txt в vault/.vault
- Обновлены все команды vault для работы с новой структурой:
  - make vault show/create/edit/delete/rekey/decrypt/encrypt
  - Все команды теперь работают с vault/secrets.yml
  - Пароль хранится в vault/.vault

Обновления в docker-compose.yaml:
- Добавлено монтирование папки vault в контейнер
- Обновлена переменная ANSIBLE_VAULT_PASSWORD_FILE на /ansible/vault/.vault
- Добавлено монтирование .ansible-lint для корректной работы lint

Обновления в Makefile:
- VAULT_PASSWORD_FILE теперь указывает на vault/.vault
- Все vault команды обновлены для работы с vault/secrets.yml
- Команда clean теперь удаляет папку vault/

Обновления в .ansible-lint:
- Добавлены exclude_paths для исключения проблемных файлов
- Исключены molecule/universal/ и files/playbooks/ из проверки
- Это решает проблемы с Docker модулями в lint

Проверка работы vault:
- Создан тестовый файл vault/secrets.yml с секретами
- Проверена корректность шифрования/расшифровки
- Создан тестовый playbook для проверки работы с vault
- Все команды vault работают корректно

Обновления в документации:
- README.md: добавлена информация о папке vault/
- docs/api.md: обновлены настройки ansible-lint с exclude_paths

Преимущества:
- Централизованное хранение всех секретов в папке vault/
- Безопасное хранение паролей в скрытом файле .vault
- Корректная работа lint без ошибок с Docker модулями
- Автоматическое использование vault паролей во всех операциях

Автор: Сергей Антропов
Сайт: https://devops.org.ru
This commit is contained in:
2025-10-22 14:02:21 +03:00
parent df97e9d3d4
commit 26a09cd637
10 changed files with 88 additions and 14 deletions

View File

@@ -4,4 +4,8 @@ skip_list:
- yaml[truthy] - yaml[truthy]
- yaml[line-length] - yaml[line-length]
- var-naming[no-role-prefix] - var-naming[no-role-prefix]
- 'ignore-errors' - 'ignore-errors'
exclude_paths:
- molecule/universal/
- files/playbooks/

View File

@@ -32,7 +32,7 @@ KIND_VERSION ?= v0.23.0
# Переменные окружения # Переменные окружения
ENV_FILE ?= .env ENV_FILE ?= .env
ROLES_DIR ?= ./roles ROLES_DIR ?= ./roles
VAULT_PASSWORD_FILE ?= vault-password.txt VAULT_PASSWORD_FILE ?= vault/.vault
# Цвета для вывода # Цвета для вывода
RED := \033[0;31m RED := \033[0;31m
@@ -420,25 +420,25 @@ vault: ## Управление Ansible Vault (show|create|edit|delete|rekey|decr
@case "$(word 2, $(MAKECMDGOALS))" in \ @case "$(word 2, $(MAKECMDGOALS))" in \
show) \ show) \
echo "$(BLUE)🔍 Показываем содержимое vault...$(RESET)"; \ echo "$(BLUE)🔍 Показываем содержимое vault...$(RESET)"; \
docker exec ansible-controller bash -lc 'ansible-vault view --vault-password-file $(VAULT_PASSWORD_FILE) vars/secrets.yml';; \ docker exec ansible-controller bash -lc 'ansible-vault view --vault-password-file $(VAULT_PASSWORD_FILE) vault/secrets.yml';; \
create) \ create) \
echo "$(YELLOW)📝 Создаем vault файл...$(RESET)"; \ echo "$(YELLOW)📝 Создаем vault файл...$(RESET)"; \
docker exec ansible-controller bash -lc 'ansible-vault create --encrypt-vault-id default --vault-password-file $(VAULT_PASSWORD_FILE) vars/secrets.yml';; \ docker exec ansible-controller bash -lc 'echo "---" > vault/secrets.yml && ansible-vault encrypt --encrypt-vault-id default --vault-password-file $(VAULT_PASSWORD_FILE) vault/secrets.yml';; \
edit) \ edit) \
echo "$(BLUE)✏️ Редактируем vault файл...$(RESET)"; \ echo "$(BLUE)✏️ Редактируем vault файл...$(RESET)"; \
docker exec ansible-controller bash -lc 'ansible-vault edit --vault-password-file $(VAULT_PASSWORD_FILE) vars/secrets.yml';; \ docker exec ansible-controller bash -lc 'ansible-vault edit --vault-password-file $(VAULT_PASSWORD_FILE) vault/secrets.yml';; \
delete) \ delete) \
echo "$(RED)🗑️ Удаляем vault файл...$(RESET)"; \ echo "$(RED)🗑️ Удаляем vault файл...$(RESET)"; \
docker exec ansible-controller bash -lc 'rm vars/secrets.yml';; \ docker exec ansible-controller bash -lc 'rm vault/secrets.yml';; \
rekey) \ rekey) \
echo "$(YELLOW)🔑 Изменяем пароль vault...$(RESET)"; \ echo "$(YELLOW)🔑 Изменяем пароль vault...$(RESET)"; \
docker exec ansible-controller bash -lc 'ansible-vault rekey --vault-password-file $(VAULT_PASSWORD_FILE) vars/secrets.yml';; \ docker exec ansible-controller bash -lc 'ansible-vault rekey --vault-password-file $(VAULT_PASSWORD_FILE) vault/secrets.yml';; \
decrypt) \ decrypt) \
echo "$(GREEN)🔓 Расшифровываем vault файл...$(RESET)"; \ echo "$(GREEN)🔓 Расшифровываем vault файл...$(RESET)"; \
docker exec ansible-controller bash -lc 'ansible-vault decrypt --vault-password-file $(VAULT_PASSWORD_FILE) vars/secrets.yml';; \ docker exec ansible-controller bash -lc 'ansible-vault decrypt --vault-password-file $(VAULT_PASSWORD_FILE) vault/secrets.yml';; \
encrypt) \ encrypt) \
echo "$(RED)🔒 Шифруем vault файл...$(RESET)"; \ echo "$(RED)🔒 Шифруем vault файл...$(RESET)"; \
docker exec ansible-controller bash -lc 'ansible-vault encrypt --encrypt-vault-id default --vault-password-file $(VAULT_PASSWORD_FILE) vars/secrets.yml';; \ docker exec ansible-controller bash -lc 'ansible-vault encrypt --encrypt-vault-id default --vault-password-file $(VAULT_PASSWORD_FILE) vault/secrets.yml';; \
*) \ *) \
echo "$(RED)❌ Неизвестная команда. Доступные: show, create, edit, delete, rekey, decrypt, encrypt$(RESET)";; \ echo "$(RED)❌ Неизвестная команда. Доступные: show, create, edit, delete, rekey, decrypt, encrypt$(RESET)";; \
esac esac
@@ -628,7 +628,7 @@ env: ## Показать переменные окружения
clean: cleanup ## Полная очистка проекта clean: cleanup ## Полная очистка проекта
@echo "$(RED)🧹 Полная очистка проекта...$(RESET)" @echo "$(RED)🧹 Полная очистка проекта...$(RESET)"
@rm -rf .env @rm -rf .env
@rm -rf vault-password.txt @rm -rf vault/
@rm -rf reports/ @rm -rf reports/
@rm -rf snapshots/ @rm -rf snapshots/
@echo "$(GREEN)✅ Проект очищен$(RESET)" @echo "$(GREEN)✅ Проект очищен$(RESET)"

View File

@@ -421,6 +421,9 @@ ansible-template/
│ ├── snapshot.sh # Создание снапшотов │ ├── snapshot.sh # Создание снапшотов
│ ├── restore.sh # Восстановление снапшотов │ ├── restore.sh # Восстановление снапшотов
│ └── cleanup.sh # Очистка лаборатории │ └── cleanup.sh # Очистка лаборатории
├── vault/ # Секреты и пароли
│ ├── .vault # Пароль для Ansible Vault
│ └── secrets.yml # Зашифрованные секреты
└── .pre-commit-config.yaml # Pre-commit конфигурация └── .pre-commit-config.yaml # Pre-commit конфигурация
``` ```

View File

@@ -8,7 +8,7 @@ services:
command: sleep infinity command: sleep infinity
environment: environment:
DOCKER_HOST: unix:///var/run/docker.sock DOCKER_HOST: unix:///var/run/docker.sock
ANSIBLE_VAULT_PASSWORD_FILE: /ansible/vault-password.txt ANSIBLE_VAULT_PASSWORD_FILE: /ansible/vault/.vault
volumes: volumes:
- /var/run/docker.sock:/var/run/docker.sock - /var/run/docker.sock:/var/run/docker.sock
- ./molecule:/ansible/molecule - ./molecule:/ansible/molecule
@@ -16,7 +16,8 @@ services:
- ./scripts:/ansible/scripts - ./scripts:/ansible/scripts
- ./reports:/ansible/reports - ./reports:/ansible/reports
- ./snapshots:/ansible/snapshots - ./snapshots:/ansible/snapshots
- ./vault-password.txt:/ansible/vault-password.txt - ./vault:/ansible/vault
- ./.ansible-lint:/ansible/.ansible-lint
# каталог с ролями (локальный или внешний) # каталог с ролями (локальный или внешний)
- ${ROLES_DIR:-./roles}:/ansible/roles:ro - ${ROLES_DIR:-./roles}:/ansible/roles:ro
working_dir: /ansible working_dir: /ansible

View File

@@ -223,6 +223,10 @@ skip_list:
- yaml[line-length] # Длина строки - yaml[line-length] # Длина строки
- var-naming[no-role-prefix] # Префиксы переменных - var-naming[no-role-prefix] # Префиксы переменных
- 'ignore-errors' # Игнорирование ошибок - 'ignore-errors' # Игнорирование ошибок
exclude_paths:
- molecule/universal/ # Исключить файлы Molecule
- files/playbooks/ # Исключить playbooks с Docker модулями
``` ```
**Описание пропускаемых правил:** **Описание пропускаемых правил:**
@@ -233,6 +237,10 @@ skip_list:
- `var-naming[no-role-prefix]` - не требует префиксов для переменных ролей - `var-naming[no-role-prefix]` - не требует префиксов для переменных ролей
- `ignore-errors` - позволяет использовать `ignore_errors: yes` - `ignore-errors` - позволяет использовать `ignore_errors: yes`
**Исключенные пути:**
- `molecule/universal/` - файлы Molecule с Docker модулями
- `files/playbooks/` - playbooks с Docker Compose модулями
### Port-forward команды ### Port-forward команды
```bash ```bash

View File

@@ -27,7 +27,7 @@ KIND_VERSION=v0.23.0
# Пути # Пути
ROLES_DIR=./roles ROLES_DIR=./roles
VAULT_PASSWORD_FILE=vault-password.txt VAULT_PASSWORD_FILE=vault/.vault
# Переменные для лаборатории # Переменные для лаборатории
LAB_PAUSE_MINUTES=10 LAB_PAUSE_MINUTES=10

View File

@@ -0,0 +1,22 @@
---
# Тестовый playbook для проверки работы с vault
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
- name: Test Vault Integration
hosts: localhost
gather_facts: no
vars_files:
- ../../vault/secrets.yml
tasks:
- name: Display vault variables
debug:
msg: "Database password: {{ db_password }}"
- name: Display API key
debug:
msg: "API key: {{ api_key }}"
- name: Display GitHub token
debug:
msg: "GitHub token: {{ github_token }}"

View File

@@ -1 +0,0 @@
test

1
vault/.vault Normal file
View File

@@ -0,0 +1 @@
test_password

36
vault/secrets.yml Normal file
View File

@@ -0,0 +1,36 @@
$ANSIBLE_VAULT;1.1;AES256
37313930666665366564356631646336636130366562343435376262666131373338616633646165
6232383865363562346664363334666438333438316630370a326532623133653963343230613434
38356337383966343732313930616632656635653063343961396539623130636231663433373565
6237303562303839630a646530653434616566303136643438356239626561326532383839663534
61393164643337653137373437393834623430313937613866303131343061326665333362316333
36303435353431313766653563653037393934373537643365313931373336333133633635386633
66616331653337333531356432613431653135303134643261336339346538653838303235393332
39373538643861653634613231323661366131303237393133653035326431386436653265306437
62643266313862623737656164643437616535633438383533346237313364313834383237623265
39303064356263666566386532323061646131336632616335626462373264633662616335353462
30393664313565396532383965396337616237373864626631333237633263653065626265393264
64396464356633333366353537633364643735323439336434386437643430316136613335646232
36313462666438626136363334343439333537646461653166313535366361643235326137333163
30363632613839653034626664653764376366653064613936353739363663326466303462356533
36393932303135643531373432326236653163653835306361363261393137373835623639346464
33616238633232373237643564626439653363356635373939333664653864643061643534336565
39303366616635313466623634336234386438353262653031356633323036306636333437623263
33343863316338356466323334316334313933393730626332373736396234376135623437393662
30626263613738373461613933373166353737353538316337633062633861633135643638383031
37626464323763376334656363373634343431383936386363623761366536653166353239343332
33313435366430666531316131306239643632376262656631396162636233343631336566613531
64313136383865326331366466316365646136623736303164373735636366643430343138373138
39653533336434333939656361366633376361663266653063666537633261653663363134333562
63663562303432323230303065303930343435356433326235323366373662666261313966616639
39376131623237323836663735313839333034626163363236313939396638623565363038333432
39643630366263613732636462353166626332653234336332366363346262316465353130623130
32663061633830373038656539653238393732333964343836653965383131656534386337393335
35383135316365393734666136343964393630346137393661643735613863613764313238663665
35323664353939303631653835636231323531353863333839306531376337653063373536623833
34326534303364383031346137323966353133333138306631323735376561656136376333616261
63343435623233623338666337383265353766323666396139633964643563393366656339633736
39326261316430313637313230656536323362666361353930353135383737313037316139653964
32326230396263383939393961353763323138613230353364313038366165646130303363643239
31303930653862323839653330373532646630336565303535306361346235306565613635396366
316438396434306663316134316230636462