Vault KV Secrets Deployment
Deploy HashiCorp Vault KV v2 secrets engine for enterprise secrets management, integrating with the existing dsec system for secure credential bootstrapping.
Prerequisites
-
Vault cluster operational on vault-01.inside.domusdigitalis.dev / vault-02.inside.domusdigitalis.dev
-
dsec secrets loaded:
dsource d000 dev/vault -
SSH access to Vault nodes (password or certificate)
-
Root token available for initial setup
Related Documentation
| Document | Description |
|---|---|
Dual-PKI architecture with root/intermediate CAs |
|
8-phase migration plan from dsec to Vault KV |
|
Certificate-based SSH authentication |
|
Issuing certificates from Vault PKI |
Architecture Overview
Phase 2: Connect to Vault
Check Vault Status
vault status
Key Value
--- -----
Seal Type shamir
Initialized true
Sealed false
Total Shares 3
Threshold 2
Version 1.15.x
Cluster Name vault-cluster
HA Enabled true
HA Cluster https://vault-01:8201
HA Mode active
Phase 4: Create KV Path Structure
Infrastructure Secrets
Store API credentials for network infrastructure:
vault kv put kv/domus/infrastructure/ise \
api_host="10.50.1.20" \
description="ISE ERS API credentials"
vault kv put kv/domus/infrastructure/vyos \
api_host="10.50.1.1" \
description="VyOS router credentials"
vault kv put kv/domus/infrastructure/freeipa \
host="freeipa-01.inside.domusdigitalis.dev" \
bind_dn="uid=admin,cn=users,cn=accounts,dc=inside,dc=domusdigitalis,dc=dev" \
description="FreeIPA LDAP bind credentials"
Server Secrets
Per-server credentials:
vault kv put kv/domus/servers/ise-01 \
hostname="ise-01.inside.domusdigitalis.dev" \
ip="10.50.1.20" \
description="ISE primary admin node"
vault kv put kv/domus/servers/vault-01 \
hostname="vault-01.inside.domusdigitalis.dev" \
ip="10.50.1.60" \
description="Vault primary / Certificate Manager"
vault kv put kv/domus/servers/keycloak-01 \
hostname="keycloak-01.inside.domusdigitalis.dev" \
ip="10.50.1.80" \
description="Keycloak IdP"
Phase 5: Create Access Policies
Infrastructure Read-Only Policy
vault policy write infra-readonly - <<'EOF'
path "kv/data/domus/infrastructure/*" {
capabilities = ["read", "list"]
}
path "kv/metadata/domus/infrastructure/*" {
capabilities = ["list"]
}
EOF
Full KV Admin Policy
vault policy write kv-admin - <<'EOF'
path "kv/*" {
capabilities = ["create", "read", "update", "delete", "list"]
}
EOF
netapi Service Policy
vault policy write netapi-service - <<'EOF'
path "kv/data/domus/infrastructure/ise" {
capabilities = ["read"]
}
path "kv/data/domus/infrastructure/vyos" {
capabilities = ["read"]
}
path "transit/encrypt/netapi-key" {
capabilities = ["update"]
}
path "transit/decrypt/netapi-key" {
capabilities = ["update"]
}
EOF
Phase 6: Configure AppRole Authentication
Create netapi AppRole
vault write auth/approle/role/netapi \
secret_id_ttl=720h \
token_ttl=1h \
token_max_ttl=4h \
token_policies="netapi-service"
Get Role ID
vault read auth/approle/role/netapi/role-id
Key Value --- ----- role_id abc12345-xxxx-xxxx-xxxx-xxxxxxxxxxxx
dsec Integration Pattern
Usage Pattern
# 1. Load Vault credentials from dsec
dsource d000 dev/vault
# 2. Set Vault address
export VAULT_ADDR="https://vault-01.inside.domusdigitalis.dev:8200"
# 3a. Admin operations (root token)
vault login "$VAULT_ROOT_TOKEN"
vault kv get kv/domus/infrastructure/ise
# 3b. Automated tools (AppRole)
VAULT_TOKEN=$(vault write -field=token auth/approle/login \
role_id="$VAULT_APPROLE_ROLE_ID" \
secret_id="$VAULT_APPROLE_SECRET_ID")
export VAULT_TOKEN
vault kv get kv/domus/infrastructure/ise
Rollback Procedure
Completion Checklist
| Phase | Status |
|---|---|
Phase 1: Bootstrap |
[ ] dsec loaded, environment verified |
Phase 2: Connection |
[ ] Vault unsealed, authenticated |
Phase 3: KV Engine |
[ ] KV v2 enabled at /kv/ |
Phase 4: Structure |
[ ] infrastructure/, servers/, applications/ paths created |
Phase 5: Policies |
[ ] infra-readonly, kv-admin, netapi-service policies created |
Phase 6: AppRole |
[ ] netapi role created, credentials stored in dsec |
Phase 7: Verification |
[ ] KV read/list working, AppRole login successful |
Phase 8: Audit |
[ ] Audit logging enabled |
Next Steps
-
Configure SSH CA for certificate-based SSH access
-
Migrate remaining dsec secrets to Vault KV
-
Integrate netapi with Vault backend (future)
-
Configure Kubernetes service account authentication (future)