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