Outils pour utilisateurs

Outils du site


securite:vault

Ceci est une ancienne révision du document !


Vault

Installation

  1. Télécharger le fichier Vault requis selon le système.
  2. Télécharger le fichier Consul requis selon le système.

Décompresser les fichiers:

$ unzip vault_0.9.1_linux_amd64.zip
$ unzip consul_1.0.2_linux_amd64.zip
# mv vault /usr/local/bin
# mv consul /usr/local/bin

Créer un fichier de configuration pour Vault:

Le fichier de configuration de base est ceci:

storage "consul" {
  address = "127.0.0.1:8500"
  path = "vault"
}

listener "tcp" {
  address = "127.0.0.1:8200"
  tls_disable = 0
  tls_cert_file = "/etc/certs/vault.crt"
  tls_key_file  = "/etc/certs/vault.key"
}

On peut mettre cette configuration dans un fichier HCL, ex: vault.hcl.

Note: Si on a pas de certificat, on peut mettre tls_disable = 1, mais avec cette configuration, TLS n'est pas activé, donc les requêtes ne se feront pas en HTTPS. Correcte pour un environnement de développement/test, mais certainement pas en production.

Pour créer le certificat et la clé privée, suivre les instructions sur Créer un certificat signé par CA.

Démarrer Consul:

$ consul agent -server -bootstrap-expect 1 -data-dir /tmp/consul -bind 127.0.0.1

Démarrer Vault:

$ vault server -config=vault.hcl

S'il y une erreur Error initializing core: Failed to lock memory: cannot allocate memory, on peut exécuter cette commande:

$ sudo setcap cap_ipc_lock=+ep $(readlink -f $(which vault))

Voir disable_mlock pour plus d'info.

Pour se connecter au serveur en TLS avec le CLI, il faut spécifier VAULT_ADDR:

$ export VAULT_ADDR=https://127.0.0.1:8200

Ensuite, on peut faire:

$ vault init

Il faut noter les clés, idéalement à des endroits différents et elles-mêmes encryptées.

Après un init, Vault est en état Sealed. Il faut le déverrouiller en faisant:

$ vault unseal [unsealkey]

Par défaut, il faut entrer trois clés unseal différentes sur les cinq qui ont été donnés lors du vault init, ce qui signifie qu'il faut faire vault unseal trois fois.

Persistance des données

Consul ne semble pas persister les données. Peut-être une mauvaise configuration ? Reste que c'est la configuration standard montrée dans les guides sur Vault. On peut alors plutôt choisir un storage en fichiers ou en base de données, malgré que MySQL et Postgresql sont supportés par la communauté.

Préférable donc d'utiliser un storage en fichiers :

storage "file" {
  path = "/mnt/vault/data"
}

Les données sont persistées et si le serveur redémarre, un init ne sera pas nécessaire.

Gestion des secrets

On peut faire un autre secret backend:

$ vault mount kv

Ensuite on peut créer des secrets avec le principe key/value:

$ vault write kv/hello value=world
$ vault write kv/topsecretlogin user=root pass=god

Avec un fichier:

$ vault write kv/secretfile @secretfile.txt

On recommande d'encoder le fichier en Base64 avant de le stocker.

Pour avoir la liste des secrets :

$ vault list kv

Pour supprimer un secret:

$ vault delete kv/hello

Gestion de l'authentification et des autorisations

Tokens

$ vault token-create [-policy="policyname"]
Key            	Value
---            	-----
token          	c4a0d45f-4a16-3e59-d5a0-c70e0efb2d23
token_accessor 	a05ba56e-e679-91d6-4e8c-bdc2217955dc
token_duration 	0s
token_renewable	false
token_policies 	[root]

S'authentifier avec un token:

$ vault login c4a0d45f-4a16-3e59-d5a0-c70e0efb2d23
$ vault token revoke c4a0d45f-4a16-3e59-d5a0-c70e0efb2d23

Créer des policies

Documentation: Policies

Créer un fichier HCL comme celui-ci:

path "secret/app-name/*" {
  capabilities = ["create", "read", "update", "delete", "list"]
}

Après on peut créer le policy:

$ vault write sys/policy/policy-name policy=@app-name-policy.hcl

Autre façon:

$ vault policy-write <policy-name> ./policy.hcl

Créer un token avec la policy:

$ vault token create -policy="app-name"

Voir le contenu d'une policy en particulier:

$ vault policy read [policyname]

Lister des policies:

$ vault policy list

Créer des rôles

Documentation: Auth Backend: AppRole

Audit

Restart

Utiliser screen pour basculer d'un shell à l'autre.

$ export VAULT_ADDR=https://127.0.0.1:8200
$ screen -S consul
$ consul agent -server -bootstrap-expect 1 -data-dir /tmp/consul -bind 127.0.0.1
[ctrl-a d]
$ screen -S vault
$ vault server --config=vault.file.hcl
[ctrl-a d]
$ vault init
$ vault unseal <key>
$ vault auth <token>
$ vault mount kv

Sources et ressource

securite/vault.1527128364.txt.gz · Dernière modification : 2022/02/02 00:43 (modification externe)