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 |