Skip to content
Snippets Groups Projects

vault

vault

By HashiCorp

Installation

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
  • 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)

SEE ALSO