feat: Добавлены продвинутые фичи из dialog.txt

- YAML inventory с мультигруппами в create.yml
- Vault preflight проверки в converge.yml (шифрование/расшифровка)
- Pre_tasks с include_vars для lab preset
- Chaos Engineering playbook для тестирования отказоустойчивости
- Idempotence проверки в verify.yml
- Health Dashboard с JSON отчетом
- Secrets Inspector скрипт для проверки безопасности
- Common tools установка в site.yml

Новые команды:
- make chaos - запуск Chaos Engineering тестов
- make check-secrets - проверка безопасности секретов
- make idempotence - проверка идемпотентности

Обновления в файлах:
- molecule/universal/create.yml: добавлена генерация YAML inventory
- molecule/universal/molecule.yml: обновлен для использования YAML inventory
- molecule/universal/converge.yml: добавлены vault preflight проверки
- molecule/universal/verify.yml: добавлены idempotence и health dashboard
- files/playbooks/chaos.yml: новый Chaos Engineering playbook
- files/playbooks/site.yml: добавлены common tools
- scripts/secret_scan.sh: новый Secrets Inspector
- Makefile: добавлены новые команды
- README.md: обновлена документация

Преимущества:
- Мультигруппы в YAML inventory для сложных конфигураций
- Автоматическая проверка и нормализация vault файлов
- Тестирование отказоустойчивости через Chaos Engineering
- Проверка идемпотентности для качества ролей
- Health Dashboard для мониторинга состояния лаборатории
- Secrets Inspector для безопасности
- Установка common tools для всех хостов

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

72
scripts/secret_scan.sh Normal file
View File

@@ -0,0 +1,72 @@
#!/usr/bin/env bash
# Secrets Inspector - проверка безопасности секретов
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
set -euo pipefail
echo "[secrets] Проверяем безопасность секретов..."
# Проверка 1: Vault файлы должны быть зашифрованы
echo "[secrets] Проверяем vault файлы..."
vault_files=$(find /ansible -name "*.yml" -o -name "*.yaml" | grep -E "(vault|secret)" || true)
if [ -n "$vault_files" ]; then
for file in $vault_files; do
if [ -f "$file" ]; then
if head -n1 "$file" | grep -q "^\$ANSIBLE_VAULT;"; then
echo "$file - зашифрован"
else
echo "$file - НЕ ЗАШИФРОВАН!"
exit 1
fi
fi
done
else
echo " Vault файлы не найдены"
fi
# Проверка 2: Пароль vault не должен быть в Git
echo "[secrets] Проверяем vault пароль..."
if [ -f "/ansible/vault/.vault" ]; then
if git ls-files | grep -q "vault/.vault"; then
echo "❌ Vault пароль в Git!"
exit 1
else
echo "✅ Vault пароль не в Git"
fi
else
echo "❌ Vault пароль не найден"
exit 1
fi
# Проверка 3: Нет открытых секретов в коде
echo "[secrets] Проверяем открытые секреты..."
secret_patterns=(
"password.*=.*['\"][^'\"]{8,}['\"]"
"api_key.*=.*['\"][^'\"]{8,}['\"]"
"secret.*=.*['\"][^'\"]{8,}['\"]"
"token.*=.*['\"][^'\"]{8,}['\"]"
)
for pattern in "${secret_patterns[@]}"; do
if grep -r -E "$pattern" /ansible --exclude-dir=.git --exclude="*.encrypted" --exclude="vault/.vault" 2>/dev/null; then
echo "❌ Найдены открытые секреты в коде!"
exit 1
fi
done
echo "✅ Открытые секреты не найдены"
# Проверка 4: Права доступа к vault файлам
echo "[secrets] Проверяем права доступа..."
if [ -f "/ansible/vault/.vault" ]; then
perms=$(stat -c "%a" "/ansible/vault/.vault")
if [ "$perms" != "600" ]; then
echo "❌ Vault пароль имеет неправильные права: $perms (должно быть 600)"
exit 1
else
echo "✅ Vault пароль имеет правильные права: $perms"
fi
fi
echo "✅ Все проверки безопасности пройдены!"