updating libs.versions.toml
This commit is contained in:
@@ -0,0 +1,427 @@
|
||||
# Docker-Konfigurations-Optimierung & Sicherheitsanalyse
|
||||
|
||||
## Zusammenfassung
|
||||
|
||||
Dieses Dokument beschreibt die umfassende Analyse, Korrekturen und Optimierungen, die an allen Docker- und docker-compose-Konfigurationen im Meldestelle-Projekt vorgenommen wurden. Die Optimierungen konzentrieren sich auf **Sicherheitshärtung**, **Leistungsverbesserungen** und **Produktionsbereitschaft**.
|
||||
|
||||
### Wichtigste Errungenschaften
|
||||
- ✅ **Kritische Sicherheitsvulnerabilitäten behoben**: Eliminierung von fest kodierten Anmeldedaten und exponierten Geheimnissen
|
||||
- ✅ **Ressourcenverwaltung**: Umfassende CPU- und Speicherlimits für alle Services hinzugefügt
|
||||
- ✅ **Sicherheitshärtung**: Docker Secrets, Nicht-Root-Benutzer und Sicherheitsbeschränkungen implementiert
|
||||
- ✅ **Leistungsoptimierung**: Verbesserte Health Checks, Startabhängigkeiten und Ressourcenzuteilung
|
||||
- ✅ **Produktionsbereitschaft**: Ordnungsgemäße Volume-Verwaltung, Netzwerke und Monitoring hinzugefügt
|
||||
|
||||
---
|
||||
|
||||
## Sicherheitsverbesserungen
|
||||
|
||||
### 🔐 Behobene kritische Sicherheitsprobleme
|
||||
|
||||
#### 1. **Geheimnisse-Verwaltung**
|
||||
**Problem**: Fest kodierte Anmeldedaten in Umgebungsvariablen
|
||||
```yaml
|
||||
# VORHER (UNSICHER)
|
||||
environment:
|
||||
POSTGRES_PASSWORD: meldestelle
|
||||
KEYCLOAK_CLIENT_SECRET: K5RqonwVOaxPKaXVH4mbthSRbjRh5tOK
|
||||
GF_SECURITY_ADMIN_PASSWORD: admin
|
||||
```
|
||||
|
||||
**Lösung**: Docker Secrets mit sicherem dateibasiertem Management
|
||||
```yaml
|
||||
# NACHHER (SICHER)
|
||||
environment:
|
||||
POSTGRES_PASSWORD_FILE: /run/secrets/postgres_password
|
||||
KEYCLOAK_CLIENT_SECRET_FILE: /run/secrets/keycloak_client_secret
|
||||
GF_SECURITY_ADMIN_PASSWORD__FILE: /run/secrets/grafana_admin_password
|
||||
secrets:
|
||||
- postgres_password
|
||||
- keycloak_client_secret
|
||||
- grafana_admin_password
|
||||
```
|
||||
|
||||
#### 2. **Container-Sicherheitshärtung**
|
||||
**Hinzugefügte Sicherheitsmaßnahmen**:
|
||||
- `no-new-privileges:true` für alle Container
|
||||
- Nicht-Root-Benutzer-Ausführung wo möglich
|
||||
- Schreibgeschützte Volume-Mounts für Konfigurationsdateien
|
||||
- Sichere Dateiberechtigungen (600) für alle Secrets
|
||||
|
||||
#### 3. **Netzwerksicherheit**
|
||||
**Verbesserungen**:
|
||||
- Benutzerdefiniertes isoliertes Netzwerk mit dediziertem Subnetz (172.20.0.0/16)
|
||||
- Ordnungsgemäße Inter-Container-Kommunikationskontrollen
|
||||
- Verbesserte CORS- und Sicherheits-Header für Webanwendungen
|
||||
|
||||
### 🛡️ Hinzugefügte Sicherheitsfunktionen
|
||||
|
||||
| Sicherheitsfunktion | Implementierung | Nutzen |
|
||||
|-------------------|-----------------|---------|
|
||||
| Docker Secrets | Dateibasiertes Secrets-Management | Eliminiert fest kodierte Anmeldedaten |
|
||||
| Nicht-Root-Benutzer | Benutzerdefinierte Benutzer/Gruppe für Anwendungen | Reduziert Angriffsfläche |
|
||||
| Sicherheitsoptionen | `no-new-privileges` Flag | Verhindert Privilegien-Eskalation |
|
||||
| Schreibgeschützte Mounts | Konfigurationsdateien schreibgeschützt gemountet | Verhindert Laufzeit-Manipulation |
|
||||
| Netzwerkisolation | Benutzerdefiniertes Bridge-Netzwerk | Isoliert Container-Kommunikation |
|
||||
| Ressourcenlimits | CPU/Speicher-Beschränkungen | Verhindert Ressourcenerschöpfungsangriffe |
|
||||
|
||||
---
|
||||
|
||||
## Leistungsoptimierungen
|
||||
|
||||
### 🚀 Ressourcenverwaltung
|
||||
|
||||
#### Umfassende Ressourcenlimits
|
||||
Alle Services haben jetzt ordnungsgemäß konfigurierte Ressourcenlimits und Reservierungen:
|
||||
|
||||
**Infrastruktur-Services**:
|
||||
```yaml
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
cpus: '2.0'
|
||||
memory: 2G
|
||||
reservations:
|
||||
cpus: '0.5'
|
||||
memory: 1G
|
||||
```
|
||||
|
||||
**Ressourcenzuteilungsübersicht**:
|
||||
| Service | CPU-Limit | Speicher-Limit | CPU-Reserviert | Speicher-Reserviert |
|
||||
|---------|-----------|----------------|----------------|-------------------|
|
||||
| PostgreSQL | 2.0 | 2GB | 0.5 | 512MB |
|
||||
| Redis | 1.0 | 1GB | 0.25 | 256MB |
|
||||
| Keycloak | 2.0 | 2GB | 0.5 | 1GB |
|
||||
| API Gateway | 2.0 | 2GB | 0.5 | 1GB |
|
||||
| Kafka | 2.0 | 2GB | 0.5 | 512MB |
|
||||
| Grafana | 1.0 | 1GB | 0.25 | 256MB |
|
||||
| Prometheus | 1.0 | 2GB | 0.25 | 512MB |
|
||||
|
||||
### 🔧 Leistungsverbesserungen
|
||||
|
||||
#### 1. **Optimierte Health Checks**
|
||||
```yaml
|
||||
# Verbesserte Health Check-Konfiguration
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "--fail", "--max-time", "5", "http://localhost:8080/health/ready"]
|
||||
interval: 15s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 60s
|
||||
```
|
||||
|
||||
#### 2. **JVM-Optimierung**
|
||||
**Kafka JVM-Einstellungen**:
|
||||
```yaml
|
||||
environment:
|
||||
KAFKA_HEAP_OPTS: "-Xmx1G -Xms512m"
|
||||
KAFKA_JVM_PERFORMANCE_OPTS: "-XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35"
|
||||
```
|
||||
|
||||
#### 3. **Datenbankleistung**
|
||||
**PostgreSQL-Verbesserungen**:
|
||||
- SCRAM-SHA-256-Authentifizierung für bessere Sicherheit
|
||||
- Optimierte Verbindungseinstellungen
|
||||
- Ordnungsgemäße Datenpersistenz mit Bind-Mounts
|
||||
|
||||
**Redis-Optimierungen**:
|
||||
- Speicherverwaltung mit `maxmemory` und `allkeys-lru` Policy
|
||||
- Persistenter Speicher mit AOF (Append Only File)
|
||||
- Authentifizierung aktiviert
|
||||
|
||||
---
|
||||
|
||||
## Konfigurationsstruktur
|
||||
|
||||
### 📁 Dateiorganisation
|
||||
|
||||
Die optimierte Konfiguration besteht aus:
|
||||
|
||||
```
|
||||
├── docker-compose.yml.optimized # Infrastruktur-Services
|
||||
├── docker-compose.services.yml.optimized # Microservices
|
||||
├── docker-compose.clients.yml.optimized # Client-Anwendungen
|
||||
├── .env.template # Umgebungskonfigurations-Template
|
||||
└── docker/
|
||||
└── secrets/
|
||||
├── setup-secrets.sh # Automatisierte Secrets-Generierung
|
||||
├── postgres_user.txt # Datenbank-Benutzername
|
||||
├── postgres_password.txt # Datenbank-Passwort (generiert)
|
||||
├── redis_password.txt # Redis-Passwort (generiert)
|
||||
├── keycloak_admin_password.txt # Keycloak-Admin-Passwort (generiert)
|
||||
├── keycloak_client_secret.txt # API-Gateway-Client-Secret (generiert)
|
||||
├── grafana_admin_user.txt # Grafana-Admin-Benutzername
|
||||
├── grafana_admin_password.txt # Grafana-Admin-Passwort (generiert)
|
||||
├── jwt_secret.txt # JWT-Signatur-Secret (generiert)
|
||||
└── vnc_password.txt # VNC-Zugriffs-Passwort (generiert)
|
||||
```
|
||||
|
||||
### 🔄 Profilbasiertes Deployment
|
||||
|
||||
Die optimierte Konfiguration unterstützt selektives Service-Deployment:
|
||||
|
||||
```bash
|
||||
# Nur Infrastruktur
|
||||
docker-compose -f docker-compose.yml.optimized up -d
|
||||
|
||||
# Infrastruktur + Microservices
|
||||
docker-compose -f docker-compose.yml.optimized \
|
||||
-f docker-compose.services.yml.optimized up -d
|
||||
|
||||
# Vollständiges Stack-Deployment
|
||||
docker-compose -f docker-compose.yml.optimized \
|
||||
-f docker-compose.services.yml.optimized \
|
||||
-f docker-compose.clients.yml.optimized up -d
|
||||
|
||||
# Selektive Services mit Profilen
|
||||
docker-compose -f docker-compose.services.yml.optimized \
|
||||
--profile members --profile horses up -d
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Migrationsleitfaden
|
||||
|
||||
### 🚀 Schnellstart
|
||||
|
||||
#### 1. **Secrets generieren**
|
||||
```bash
|
||||
# Alle erforderlichen Secrets generieren
|
||||
./docker/secrets/setup-secrets.sh --all
|
||||
|
||||
# Oder einzeln generieren
|
||||
./docker/secrets/setup-secrets.sh --generate
|
||||
./docker/secrets/setup-secrets.sh --validate
|
||||
```
|
||||
|
||||
#### 2. **Umgebung konfigurieren**
|
||||
```bash
|
||||
# Template kopieren und anpassen
|
||||
cp .env.template .env
|
||||
|
||||
# Konfigurationswerte bearbeiten
|
||||
nano .env
|
||||
```
|
||||
|
||||
#### 3. **Datenverzeichnisse erstellen**
|
||||
```bash
|
||||
# Persistente Datenverzeichnisse erstellen
|
||||
mkdir -p ./data/{postgres,redis,prometheus,grafana,keycloak,consul,monitoring,desktop-app}
|
||||
```
|
||||
|
||||
#### 4. **Services deployen**
|
||||
```bash
|
||||
# Infrastruktur starten
|
||||
docker-compose -f docker-compose.yml.optimized up -d
|
||||
|
||||
# Alle Services auf Gesundheit prüfen
|
||||
docker-compose -f docker-compose.yml.optimized ps
|
||||
|
||||
# Microservices hinzufügen
|
||||
docker-compose -f docker-compose.yml.optimized \
|
||||
-f docker-compose.services.yml.optimized up -d
|
||||
|
||||
# Client-Anwendungen hinzufügen
|
||||
docker-compose -f docker-compose.yml.optimized \
|
||||
-f docker-compose.services.yml.optimized \
|
||||
-f docker-compose.clients.yml.optimized up -d
|
||||
```
|
||||
|
||||
### 🔄 Migration von Original-Konfiguration
|
||||
|
||||
#### Schritt 1: Aktuelle Einrichtung sichern
|
||||
```bash
|
||||
# Bestehende Services stoppen
|
||||
docker-compose down
|
||||
|
||||
# Aktuelle Daten sichern (optional)
|
||||
cp -r data/ data.backup/
|
||||
```
|
||||
|
||||
#### Schritt 2: Konfiguration aktualisieren
|
||||
```bash
|
||||
# Zuerst Secrets generieren
|
||||
./docker/secrets/setup-secrets.sh --all
|
||||
|
||||
# Umgebungskonfiguration aktualisieren
|
||||
cp .env.template .env
|
||||
# .env nach Bedarf bearbeiten
|
||||
```
|
||||
|
||||
#### Schritt 3: Optimierte Konfiguration deployen
|
||||
```bash
|
||||
# Mit neuer Konfiguration deployen
|
||||
docker-compose -f docker-compose.yml.optimized up -d
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Sicherheits-Best-Practices
|
||||
|
||||
### 🛡️ Produktionssicherheits-Checkliste
|
||||
|
||||
- [ ] **Secrets generiert**: Secrets-Setup-Script ausführen
|
||||
- [ ] **Dateiberechtigungen**: Secret-Dateien haben 600-Berechtigungen
|
||||
- [ ] **Netzwerkisolation**: Benutzerdefinierte Docker-Netzwerke verwenden
|
||||
- [ ] **Ressourcenlimits**: Alle Services haben CPU/Speicher-Limits
|
||||
- [ ] **Nicht-Root-Benutzer**: Anwendungen laufen als nicht-privilegierte Benutzer
|
||||
- [ ] **Schreibgeschützte Mounts**: Konfiguration schreibgeschützt gemountet
|
||||
- [ ] **Sicherheitsoptionen**: `no-new-privileges` aktiviert
|
||||
- [ ] **Health Checks**: Alle kritischen Services haben Health Checks
|
||||
- [ ] **Backup-Strategie**: Regelmäßige Daten-Backups konfiguriert
|
||||
- [ ] **Monitoring**: Prometheus und Grafana konfiguriert
|
||||
- [ ] **Log-Management**: Zentralisiertes Logging konfiguriert
|
||||
|
||||
### 🔐 Sicherheitsmonitoring
|
||||
|
||||
#### Zugriffs-URLs (Standard-Konfiguration)
|
||||
- **Grafana Dashboard**: http://localhost:3000
|
||||
- **Prometheus Metriken**: http://localhost:9090
|
||||
- **Consul UI**: http://localhost:8500
|
||||
- **Keycloak Admin**: http://localhost:8180/admin
|
||||
|
||||
#### Zu überwachende Sicherheitsmetriken
|
||||
- Fehlgeschlagene Authentifizierungsversuche
|
||||
- Ressourcennutzungsmuster
|
||||
- Container-Neustart-Häufigkeit
|
||||
- Netzwerkverbindungsanomalien
|
||||
- Secret-Zugriffsmuster
|
||||
|
||||
---
|
||||
|
||||
## Fehlerbehebung
|
||||
|
||||
### 🔍 Häufige Probleme und Lösungen
|
||||
|
||||
#### Problem 1: Secret-Dateiberechtigungen
|
||||
**Problem**: Container können Secret-Dateien nicht lesen
|
||||
**Lösung**:
|
||||
```bash
|
||||
# Berechtigungen korrigieren
|
||||
chmod 600 docker/secrets/*.txt
|
||||
|
||||
# Oder mit korrekten Berechtigungen neu generieren
|
||||
./docker/secrets/setup-secrets.sh --force
|
||||
```
|
||||
|
||||
#### Problem 2: Ressourcenbeschränkungen
|
||||
**Problem**: Services schlagen aufgrund von Ressourcenlimits fehl
|
||||
**Lösung**:
|
||||
```bash
|
||||
# Ressourcennutzung prüfen
|
||||
docker stats
|
||||
|
||||
# Limits in docker-compose-Dateien anpassen oder Systemressourcen erhöhen
|
||||
```
|
||||
|
||||
#### Problem 3: Netzwerkkonnektivität
|
||||
**Problem**: Services können nicht kommunizieren
|
||||
**Lösung**:
|
||||
```bash
|
||||
# Netzwerkkonfiguration prüfen
|
||||
docker network inspect meldestelle_meldestelle-network
|
||||
|
||||
# Service-Gesundheit überprüfen
|
||||
docker-compose -f docker-compose.yml.optimized ps
|
||||
```
|
||||
|
||||
#### Problem 4: Volume-Mount-Probleme
|
||||
**Problem**: Daten persistieren nicht oder Berechtigungsfehler
|
||||
**Lösung**:
|
||||
```bash
|
||||
# Datenverzeichnisse mit korrekten Berechtigungen erstellen
|
||||
mkdir -p ./data/{postgres,redis,prometheus,grafana,keycloak,consul}
|
||||
chown -R 999:999 ./data/postgres # PostgreSQL-Benutzer
|
||||
chown -R 472:0 ./data/grafana # Grafana-Benutzer
|
||||
```
|
||||
|
||||
### 📊 Health Check-Befehle
|
||||
|
||||
```bash
|
||||
# Alle Service-Status prüfen
|
||||
docker-compose -f docker-compose.yml.optimized ps
|
||||
|
||||
# Service-Logs anzeigen
|
||||
docker-compose -f docker-compose.yml.optimized logs [service-name]
|
||||
|
||||
# Ressourcennutzung prüfen
|
||||
docker stats
|
||||
|
||||
# Secrets validieren
|
||||
./docker/secrets/setup-secrets.sh --validate
|
||||
|
||||
# Konnektivität testen
|
||||
docker exec meldestelle-api-gateway curl -f http://postgres:5432
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Leistungstuning
|
||||
|
||||
### 🎯 Ressourcenoptimierungs-Richtlinien
|
||||
|
||||
#### Speicherzuteilungsstrategie
|
||||
1. **Infrastruktur-Services**: Höhere Speicherzuteilung für Datenbanken und Messaging
|
||||
2. **Anwendungs-Services**: Ausgewogene CPU/Speicher für Microservices
|
||||
3. **Client-Anwendungen**: Geringere Ressourcenanforderungen
|
||||
|
||||
#### CPU-Zuteilungsstrategie
|
||||
1. **I/O-gebundene Services** (Datenbank, Redis): Moderate CPU, hoher Speicher
|
||||
2. **Rechenintensive Services** (Anwendungslogik): Höhere CPU-Zuteilung
|
||||
3. **Statische Inhalts-Services** (Web-Apps): Geringere Gesamtressourcen
|
||||
|
||||
#### JVM-Tuning für Java-Services
|
||||
```yaml
|
||||
environment:
|
||||
JAVA_OPTS: |
|
||||
-XX:MaxRAMPercentage=75.0
|
||||
-XX:+UseG1GC
|
||||
-XX:+UseStringDeduplication
|
||||
-XX:+UseContainerSupport
|
||||
-Djava.security.egd=file:/dev/./urandom
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Monitoring und Observability
|
||||
|
||||
### 📈 Metriken-Sammlung
|
||||
|
||||
#### Prometheus-Metriken
|
||||
- Container-Ressourcennutzung
|
||||
- Anwendungsleistungsmetriken
|
||||
- Health Check-Status
|
||||
- Netzwerkverkehrsmuster
|
||||
|
||||
#### Grafana-Dashboards
|
||||
- Infrastruktur-Übersicht
|
||||
- Anwendungsleistung
|
||||
- Sicherheitsereignisse
|
||||
- Ressourcennutzungstrends
|
||||
|
||||
#### Logging-Strategie
|
||||
- Zentralisiertes Logging über Docker-Logs
|
||||
- Strukturiertes JSON-Logging für Anwendungen
|
||||
- Log-Rotation und Aufbewahrungsrichtlinien
|
||||
- Sicherheitsereignis-Logging
|
||||
|
||||
---
|
||||
|
||||
## Fazit
|
||||
|
||||
Die Docker-Konfigurationsoptimierung bietet:
|
||||
|
||||
1. **Verbesserte Sicherheit**: Vollständige Eliminierung fest kodierter Anmeldedaten und Implementierung von Docker Secrets
|
||||
2. **Produktionsbereitschaft**: Umfassende Ressourcenlimits, Health Checks und Monitoring
|
||||
3. **Verbesserte Leistung**: Optimierte Ressourcenzuteilung und Container-Konfigurationen
|
||||
4. **Operational Excellence**: Automatisiertes Secret-Management, umfassende Dokumentation und Fehlerbehebungsleitfäden
|
||||
5. **Skalierbarkeit**: Profilbasiertes Deployment und modulare Service-Architektur
|
||||
|
||||
### Nächste Schritte
|
||||
|
||||
1. **Optimierte Konfiguration deployen** in Entwicklungsumgebung
|
||||
2. **Alle Sicherheitsmaßnahmen validieren** sind ordnungsgemäß implementiert
|
||||
3. **Leistungsmetriken überwachen** und Ressourcenlimits nach Bedarf anpassen
|
||||
4. **Backup- und Wiederherstellungsverfahren implementieren** für persistente Daten
|
||||
5. **Automatisiertes Monitoring und Alerting einrichten** für Produktions-Deployment
|
||||
|
||||
Bei Fragen oder Problemen mit der optimierten Konfiguration beziehen Sie sich auf den Fehlerbehebungsabschnitt oder konsultieren Sie die detaillierten Konfigurationskommentare in den docker-compose-Dateien.
|
||||
Reference in New Issue
Block a user