HashiCorp Vault mit Client Config
Tokens und Zugangsdaten sind unbedingt sicher aufzubewahren. Verliert man diese, kann die Vault unbrauchbar werden und die Daten verloren gehen!
Konfiguration
Docker
Zuerst legen wir die Ordnerstruktur an:
mkdir -p /srv/docker/vault/config
mkdir -p /srv/docker/vault/file
mkdir -p /srv/docker/vault/logs
Danach benötigen wir typischerweise ein docker-compose.yml
version: "3"
services:
vault:
image: hashicorp/vault
container_name: vault
volumes:
- /srv/docker/vault/config:/vault/config
- /srv/docker/vault/file:/vault/file
- /srv/docker/vault/logs:/vault/logs
cap_add:
- IPC_LOCK
restart: unless-stopped
networks:
default:
ipv4_address: 172.16.3.2
command: server
networks:
default:
driver: bridge
ipam:
driver: default
config:
- subnet: 172.16.3.0/24
driver_opts:
com.docker.network.bridge.name: br_vault
Und dazu noch die Vault Config:
ui = true
api_addr = "http://0.0.0.0:8200"
disable_mlock = true
storage "file" {
path = "/vault/file"
}
listener "tcp" {
address = "0.0.0.0:8200"
tls_disable = 1
}
Danach kann der Container gestartet werden:
docker-compose up -d
Vault Ersteinrichtung mit CLI
Wenn die Vault gestartet wurde und erreichbar ist, muss die Einrichtung einmalig durchgeführt werden.
Hierzu kann man den CLI Client nutzen und die URL des Containers temporär setzen.
Mit -key-shares=
gibt man die Menge der Schlüssel an die man erzeugen lassen möchte und mit -key-threshold=
wie viele benötigt werden um beim Neustart die Vault zu öffnen.
Beispiel: 10 Nutzer, von denen mindestens 3 benötigt werden um die Vault zu öffnen: -key-shares=10 -key-threshold=3
Sind nicht genügend Schlüssel zum öffnen verfügbar (können über den Browser eingegeben werden), bleibt die Vault dicht!
Ich kann es nicht oft genug erwähnen: SCHLÜSSEL / TOKEN SICHERN
export VAULT_ADDR=http://172.16.3.2:8200
vault operator init -key-shares=1 -key-threshold=1
Unseal Key 1: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Initial Root Token: hvs.xxxxxxxxxxxxxxxxxxxxx
# MAN BEACHTE:
Vault does not store the generated root key. Without at least 1 keys to
reconstruct the root key, Vault will remain permanently sealed!
It is possible to generate new unseal keys, provided you have a quorum of
existing unseal keys shares. See "vault operator rekey" for more information.
Nginx
Wie so häufig wird nginx als Proxy davor gestellt, hierfür ist keine große Konfiguration nötig und es kann eine einfache Proxy-Config genutzt werden:
server {
######################################
# NGINX vhost listen, logs, ssl, ...
######################################
# OPTIONALER Schutz um die Vault mit vorangehendem Basic Auth zu schützen
#auth_basic "Vault realm";
#auth_basic_user_file /etc/nginx/htpasswd/vault.htpasswd;
location / {
proxy_pass http://172.16.3.2:8200;
proxy_set_header X-Real-IP $remote_addr; # pass on real client's IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 900;
}
Danach kann die Nginx Config getestet und geladen werden:
nginx -t && nginx -s reload
Konfiguration Vault Adresse im Client
Nachdem die Vault über Nginx erreichbar gemacht wurde, kann die Adresse des Clients angepasst werden:
ohne Basic Auth
export VAULT_ADDR=https://vault.mydomain.com
lokal auf dem Docker Host
Falls man nicht über Nginx gehen möchte …
export VAULT_ADDR=http://172.16.3.2
Mit zusätzlichem Basic Auth
export VAULT_ADDR=https://USERNAME:PASSWORD@vault.mydomain.com
Login & Tests
Um die Anleitung nicht zu kompliziert werden zu lassen, sollen verschiedene Authentifizierungsverfahren hier nicht beleuchtet werden.
Der Standardlogin mit gerade erzeugtem Root-Token funktioniert wie folgt:
vault login
Token (will be hidden): <HIER TOKEN (beginnt mit hvs.) EINGEBEN>
Vault Status prüfen
Die Vault ist aktuell noch verschlossen (Sealed)
vault status
Key Value
--- -----
Initialized true
Sealed true
Total Shares 1
Threshold 1
Unseal Progress 0/1
Unseal Nonce n/a
Vault öffnen
Öffnen der Vault mit X Schlüsseln
vault operator unseal
Unseal Key (will be hidden): <UNSEAL TOKEN EINGEBEN>
Key Value
--- -----
Sealed false