- 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
		
			
				
	
	
		
			73 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| #!/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 "✅ Все проверки безопасности пройдены!"
 |