Files
roa2web-service-auto/scripts/README.md
Marius Mutu 60346ff7da Add encrypted secrets backup and restore utilities
Implements secure backup system for environment configuration files (.env, .env.prod)
containing sensitive credentials using AES-256-CBC encryption with OpenSSL.

New utilities:
- scripts/backup-secrets.sh: Encrypts and backs up all .env files to timestamped directory
- scripts/restore-secrets.sh: Decrypts and restores .env files from backup
- scripts/README.md: Complete documentation with usage examples and best practices

Features:
- AES-256-CBC encryption with PBKDF2 key derivation (strong encryption)
- Interactive password prompts with confirmation
- Non-interactive mode via BACKUP_PASSWORD environment variable
- Automatic README generation in each backup with restore instructions
- Color-coded output for better UX
- Validation and error handling

Backup structure:
secrets-backup/
└── YYYY-MM-DD_HH-MM-SS/
    ├── backend-.env.enc
    ├── backend-.env.prod.enc
    ├── telegram-bot-.env.enc
    ├── telegram-bot-.env.prod.enc
    └── README.md

Updated .gitignore to allow committing encrypted .gpg/.enc files while
blocking decrypted .env files in secrets-backup directory.

Usage:
./scripts/backup-secrets.sh                    # Create encrypted backup
./scripts/restore-secrets.sh [backup-date]     # Restore from backup

Tested with OpenSSL (pre-installed on most systems). Provides secure way to
version control and sync credentials across development and production environments.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-11 12:36:43 +02:00

199 lines
4.6 KiB
Markdown

# ROA2WEB Scripts - Secrets Management
## Backup & Restore Environment Secrets
Aceste script-uri ajută la backup-ul securizat (criptat) al fișierelor `.env` și `.env.prod` care conțin credențiale sensibile.
### 🔐 Backup Secrets
**Creează backup criptat cu AES256:**
```bash
./scripts/backup-secrets.sh
```
**Ce face:**
- Găsește toate fișierele `.env` și `.env.prod`
- Le criptează cu GPG (AES256)
- Le salvează în `secrets-backup/YYYY-MM-DD_HH-MM-SS/`
- Creează README cu instrucțiuni
**Rezultat:**
```
secrets-backup/
└── 2025-01-15_14-30-00/
├── .env.gpg
├── .env.prod.gpg
└── README.md
```
**Notă:** Vei fi rugat să introduci o parolă pentru criptare. **Salvează această parolă în gestionar de parole!**
### 🔓 Restore Secrets
**Restaurează din backup criptat:**
```bash
# Restaurează din ultimul backup
./scripts/restore-secrets.sh
# Restaurează din backup specific
./scripts/restore-secrets.sh 2025-01-15_14-30-00
```
**Ce face:**
- Decriptează fișierele .gpg din backup
- Le plasează înapoi în locațiile originale
- reports-app/backend/.env
- reports-app/backend/.env.prod
- reports-app/telegram-bot/.env
- reports-app/telegram-bot/.env.prod
**Notă:** Vei fi rugat să introduci parola de decriptare.
## 🗂️ Opțiuni de Salvare a Backup-urilor
### Opțiunea 1: Commit în Git (Recomandat)
Fișierele `.gpg` sunt criptate și pot fi comise în siguranță:
```bash
# Creează backup
./scripts/backup-secrets.sh
# Adaugă în git
git add secrets-backup/
git commit -m "Add encrypted secrets backup"
git push
```
**Avantaje:**
- Sincronizat automat cu remote
- Versioning complet
- Acces de pe orice mașină
- Sigur (criptat cu parolă)
**Dezavantaje:**
- Trebuie să ții minte parola
### Opțiunea 2: Backup Local (Doar Local)
Păstrează backup-urile doar pe mașina locală:
```bash
# Decomentează în .gitignore:
# secrets-backup/
# Copiază backup-urile pe USB/cloud manual
cp -r secrets-backup /mnt/usb/roa2web-secrets-backup
```
### Opțiunea 3: Gestionar de Parole
**Pentru backup manual rapid:**
```bash
# Copiază conținutul și salvează în Bitwarden/1Password
cat reports-app/backend/.env
cat reports-app/backend/.env.prod
cat reports-app/telegram-bot/.env
cat reports-app/telegram-bot/.env.prod
```
## 🔒 Best Practices
1. **Rulează backup înaintea deployment-ului:**
```bash
./scripts/backup-secrets.sh
git add secrets-backup/
git commit -m "Backup secrets before deployment"
```
2. **Salvează parola de criptare în gestionar de parole:**
- Bitwarden: Secure Note "ROA2WEB GPG Backup Password"
- 1Password: Document "ROA2WEB Secrets Password"
- LastPass: Secure Note
3. **Testează restore periodic:**
```bash
# Backup
./scripts/backup-secrets.sh
# Șterge temporar
mv reports-app/backend/.env reports-app/backend/.env.backup
# Restore
./scripts/restore-secrets.sh
# Verifică
diff reports-app/backend/.env reports-app/backend/.env.backup
```
4. **Pentru echipă:**
- Partajează parola GPG în gestionar de parole partajat
- Sau folosește chei GPG separate pentru fiecare membru
## 🚨 Troubleshooting
### "gpg: decryption failed: Bad session key"
- Parola introdusă este greșită
- Verifică în gestionar de parole
### "No such file or directory"
- Asigură-te că rulezi script-ul din root-ul proiectului:
```bash
cd /path/to/roa2web
./scripts/backup-secrets.sh
```
### "gpg: command not found"
```bash
# Ubuntu/Debian
sudo apt-get install gnupg
# Windows WSL
sudo apt-get install gnupg
```
## 📋 Alternative de Backup
### 1. Manual GPG (un fișier):
```bash
gpg --symmetric --cipher-algo AES256 reports-app/backend/.env
# Rezultat: .env.gpg
```
### 2. Tar + GPG (toate odată):
```bash
tar -czf - reports-app/*/.env* | gpg --symmetric --cipher-algo AES256 > secrets-backup.tar.gz.gpg
```
### 3. Ansible Vault:
```bash
ansible-vault encrypt reports-app/backend/.env.prod
```
## 📝 Deployment pe Windows Server
Pentru deployment pe Windows, copiază fișierele `.env.prod`:
```bash
# Linux/WSL -> Windows Server
# 1. Creează backup local
./scripts/backup-secrets.sh
# 2. Copiază backup-ul pe server Windows
scp -r secrets-backup/latest/ administrator@server-ip:C:/temp/
# 3. Pe server Windows, decriptează:
gpg --decrypt .env.prod.gpg > C:\inetpub\wwwroot\roa2web\backend\.env.prod
gpg --decrypt .env.prod.gpg > C:\inetpub\wwwroot\roa2web\telegram-bot\.env.prod
```
## 🔗 Vezi și
- `.gitignore` - Pattern-uri pentru .env files
- `DEPLOYMENT_GUIDE.md` - Deployment production
- `deployment/windows/docs/WINDOWS_DEPLOYMENT.md` - Windows deployment