Ausgangspunkt ist ein Single-Node Vault/Consul Cluster in einem Docker-Setup. Dieses soll migriert werden auf den internen Raft-Storage von Vault. Der Consul-Container hat den Hostnamen "consul", der Vault-Container wenig überraschend "vault".
Die bisherige Consul-Konfiguration sieht so aus:
{ "retry_join" : ["127.0.0.1"], "data_dir": "/consul/data", "log_level": "INFO", "server": true, "node_name": "vault", "addresses": { "http": "0.0.0.0" }, "bind_addr": "127.0.0.1", "bootstrap_expect": 1, "ui_config": { "enabled": true }, "encrypt": "...", "acl": { "enabled": true, "default_policy": "deny", "down_policy": "extend-cache", "enable_token_persistence": true } }
Wichtig ist, dass die Migration mit einem ausreichend-berechtigtem Token durchgeführt wird. Vor allem, wenn wie bei mir, die "default_policy" auf "deny" steht. Entweder man stellt einfach die policy auf "allow" oder gibt dem "anonymous"-Token das Schreibrecht auf den Keyprefix "vault/".
Für die Migration wird dann noch eine spezielle Konfigurationsdatei "migrate.hcl" benötigt:
storage_source "consul" { address = "http://consul:8500" path = "vault" } storage_destination "raft" { path = "/vault/data/raft" node_id = "9444ac3b-d192-9330-b253-b3d6dea5b42b" } cluster_addr = "https://127.0.0.1:8200"
Mit der Migrationsdatei wir als Datenquelle der Consul-Knoten definiert. Als Ziel ein Verzeichnis im Dateisystem. Die "node_id" bekommt man aus dem Consul-Cluster.
Migration durchführen:
Die Daten sollen in ein neues Docker-Volume "vault_data" gespeichert werden. Dieses wird für die Migration in den temporären Vault-Container gemountet. Als Mountpoint wird der Pfad aus der "migrate.hcl" genommen. Natürlich muss der temporäre Vault-Container im gleichen Netzwerk laufen wie Consul.
docker run --rm -it hashicorp/vault:1.15 vault operator migrate -v vault_data:/vault/data -config=/tmp/migrate.hcl -log-level=DEBUG
Danach kann man Vault mit einer angepassten storage_source Konfiguration starten:
storage "raft" { path = "/vault/data/raft/" node_id = "9444ac3b-d192-9330-b253-b3d6dea5b42b" }
Nach der Umstellung startete Vault mit dem internen Raft-Storage-Backend ohne Probleme.
Quellen und Links:
[1] | https://developer.hashicorp.com/vault/docs/concepts/integrated-storage/migrate-consul-storage |