Vault installieren
# Ubuntu
wget -O- https://apt.releases.hashicorp.com/gpg | gpg --dearmor | tee /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/hashicorp.list
apt update && apt install -y vault
# Version
vault version
Dev-Server (Test, kein Produktivbetrieb!)
# Dev-Server starten (alles im RAM, kein TLS)
vault server -dev -dev-root-token-id="root"
# In neuem Terminal:
export VAULT_ADDR='http://127.0.0.1:8200'
export VAULT_TOKEN='root'
vault status
Produktiv-Deployment (Docker)
# docker-compose.yml
services:
vault:
image: hashicorp/vault:1.17
ports:
- "8200:8200"
environment:
VAULT_ADDR: 'https://0.0.0.0:8200'
VAULT_API_ADDR: 'https://vault.firma.de:8200'
cap_add:
- IPC_LOCK
volumes:
- ./vault-config:/vault/config
- ./vault-data:/vault/data
command: vault server -config=/vault/config/vault.hcl
Secrets speichern und lesen
# KV Secrets Engine aktivieren
vault secrets enable -path=secret kv-v2
# Secret speichern
vault kv put secret/meine-app db_password="SuperGeheimesPasswort" api_key="mein-api-key-12345"
# Secret lesen
vault kv get secret/meine-app
vault kv get -field=db_password secret/meine-app
# Secret aus Anwendung (HTTP API)
curl --header "X-Vault-Token: $VAULT_TOKEN" --request GET $VAULT_ADDR/v1/secret/data/meine-app | jq .data.data
Dynamic Credentials (PostgreSQL)
# Database Secrets Engine aktivieren
vault secrets enable database
# PostgreSQL konfigurieren
vault write database/config/postgresql plugin_name="postgresql-database-plugin" allowed_roles="app-role" connection_url="postgresql://vault-admin:password@db:5432/appdb"
# Rolle definieren (temporäre Credentials)
vault write database/roles/app-role db_name="postgresql" creation_statements="CREATE ROLE "{{name}}" WITH LOGIN PASSWORD '{{password}}' VALID UNTIL '{{expiration}}'; GRANT SELECT ON ALL TABLES IN SCHEMA public TO "{{name}}";" default_ttl="1h" max_ttl="24h"
# Temporäre Credentials anfordern
vault read database/creds/app-role
# Erzeugt: username=v-app-role-AbCdEf, password=<random>, lease=1h
PKI – interne CA
# PKI Secrets Engine = interne Certificate Authority
vault secrets enable pki
vault secrets tune -max-lease-ttl=87600h pki
# Root CA generieren
vault write -field=certificate pki/root/generate/internal common_name="Firma Internal CA" ttl=87600h > firma-ca.crt
# Zertifikate ausstellen (automatisch)
vault write pki/roles/intern allowed_domains="firma.local,firma.de" allow_subdomains=true max_ttl=720h
vault write pki/issue/intern common_name="app.firma.local"
FAQ
Wie verwalten wir Vault-Tokens sicher?
Für Anwendungen AppRole-Authentifizierung nutzen. Kubernetes-Umgebungen nutzen den Vault Kubernetes Auth. Root-Token nur für Bootstrap, danach sicher verwahren.
Fazit
HashiCorp Vault beseitigt die Hauptursache für Datenpannen: hart-codierte Credentials in Code und Konfigurationsdateien.
Secrets Management für KMU in Heidelberg, Mannheim und der Rhein-Neckar-Region. Anfragen.