-
Vincent Mazenod authoredVincent Mazenod authored
vault.md 3.33 KiB
vault
By HashiCorp
Installation
-
téléchargement d'un binaire
- https://releases.hashicorp.com/vault/
- décompresser dans /usr/local/bin
- configurer les permissions
- créer un service systemd
Configuration
- /etc/vault/vault.hcl
backend "file" {
path = "/var/lib/vault"
}
ui = true
disable_mlock = true
listener "tcp" {
address = "10.0.0.1:8200"
tls_disable = 1
}
Secret engine
KV2
vault login token=<root-token>
vault secrets enable -path=cri kv
vault kv enable-versioning cri/ # kv2
- les secrets sont versionnés
- il est possible d'utiliser PATCH et pas seulement PUT
Authentification
-
par token
- root
- d'application
-
par ldap
- en réalité génère un token dans ~/.vault-token contenant
LDAP
$ vault write auth/ldap/config \
url="ldaps://samantha.local.isima.fr" \
userattr="sAMAccountName" \
userdn="dc=local,dc=isima,dc=fr" \
groupattr="cn" \
groupfilter="(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={{.UserDN}}))" \
groupdn="ou=GROUPES_LOCAUX,dc=local,dc=isima,dc=fr" \
binddn="cn=vault,ou=Comptes de Services,dc=local,dc=isima,dc=fr" \
bindpass="secret" \
insecure_tls="false" \
starttls="true"
Policy
/etc/vault/cri.hcl
# Write and manage secrets in key-value secret engine
path "secret/*" {
capabilities = ["create", "read", "update", "delete", "list"]
}
# To enable secret engines
path "sys/mounts/*" {
capabilities = [ "create", "read", "update", "delete" ]
}
path "secret/data/cri/*" {
capabilities = ["create", "read", "update", "delete", "list", "sudo"]
}
path "cubbyhole/*" {
capabilities = ["create", "read", "update", "delete", "list"]
}
$ vault policy write cri /etc/vault/cri.hcl
Map policy and ldap group
$ vault write auth/ldap/groups/cri policies=cri
Utilisation
- le même binaire à télécharger
- cross plateforme
- deux variables d'environnement
- $VAULT_ADDR=https://vault.isima.fr
- $VAULT_TOKEN ou
- l'api
Workflow
$ vault login -method=ldap username=vimazeno
$ vault secrets list
$ vault list cri/
$ vault kv get cri/tokens
$ vault kv get cri/tokens # à chaque put on écrase les entrées qu'on ne réécrit pas
$ vault kv get cri/tokens -format=json
$ vault kv get cri/tokens -format=json | jq .data
$ vault kv get cri/tokens -format=json | jq .data.password
$ vault kv put cri/tokens root=pipo2
$ vault kv patch cri/tokens root1=pipo1
$ vault delete cri/tokens
création de token
$ vault policy write vault/apps/my.hcl
$ vault token create -policy=my
token et ci/cd
- on teste en local avec ses droits via ldaps
- on génère un token en variable de CI/CD pour autoriser l'appli à lire des secrets
Générer un secret
Un secret robuste en ligne de commande se génère avec la commande openssl
comme suit
$ openssl rand -base64 256
Stocker le secret directement dans hashicorp vault
$ vault kv put cri/tokens root=$(openssl rand -base64 25)