Aller au contenu

Recovery keys management#

Toutes les opérations sont réalisées dans le repository git caascad/applications/vault.

Clés GPG des opérateurs#

Les clés GPG des opérateurs servent à déverrouiller Vault ainsi qu'à réaliser certaines opérations d'administration comme le rekey.

Chaque opérateur doit déjà disposer d'une paire de clés publique/privée, obtenue lors de la configuration de son poste de travail.

Les opérateurs autorisés à administrer Vault doivent avoir leur clé publique présente dans le dossier helm/keys (voir ci-dessous).

Trouver le fingerprint d'une clé#

Le fingerprint d'une clé enregistrée dans votre trousseau GPG s'obtient avec cette commande :

gpg --list-keys <filtre>
Le filtre ci-dessus peut-être le nom, le prénom ou l'e-mail de la personne. Voir l'exemple ci-dessous où smi est une partie du nom Smith.

Exemple :

➜ gpg --list-keys smi
pub   rsa4096 2023-01-10 [SC]
      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
uid           [  full  ] John Smith <john.smith@orange.com>
sub   rsa4096 2023-01-10 [E]
Le fingerprint est ici XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.

Ajouter, modifier ou supprimer un opérateur#

Ajouter, modifier ou supprimer la clé publique GPG de l'opérateur dans le répertoire helm/keys.

git switch master
git pull
git switch -c key_<username>
gpg --export <fingerprint> | base64 -w0 > helm/keys/<username>.asc
git add helm/keys/<username>.asc
git commit -m "<add|mod> <username>.asc"
git rm helm/keys/<username>.asc
git commit -m "del <username>.asc"

Lancer un git push, créer une MR, la faire valider puis la merger.

Puis jouer (ou faire jouer) la procédure de mise à jour des recovery-keys.

Mise à jour des recovery-keys (aka rekey)#

Cette opération nécessite l'intervention de deux opérateurs précédemment autorisés à administrer Vault.

L'opération se déroule ainsi :

  1. l'opérateur 1 initie un rekey ;
  2. l'opérateur 2 participe au rekey ;
  3. l'opérateur 2 supprime les recovery keys (ce sont les anciennes, elles ont été rendues obsolètes par le rekey) ;
  4. l'opérateur 2 est le premier à récupérer sa nouvelle recovery key ;
  5. tous les opérateurs (dont l'opérateur 1) récupèrent leur nouvelle recovery key.

Procédure de rekey (2 opérateurs)#

L'opérateur 1 lance cette série de commandes :

git switch master
git pull
nix-shell

LINE=stg  # ou LINE=prd

export VAULT_ADDR="https://vault.infra-${LINE}.caascad.com"
vault login -method oidc

export VAULT_TOKEN="$(vault token lookup -format=json | jq -r '.data.id')"

vault-recovery-key rekey-status
# pour l'op. 1, vérifier qu'il n'y a pas de rekey en cours
# pour l'op. 2, vérifier qu'il y a un rekey en cours

vault-recovery-key rekey helm/keys "recovery-keys/infra-${LINE}"

Puis l'opérateur 2 lance la même série de commandes ci-dessus.

Lorsque le rekey est fini, l'opérateur 2 (ou n'importe quel opérateur) le vérifie :

vault-recovery-key rekey-status
# vérifier qu'il n'y a aucun problème et qu'il n'y a pas de rekey en cours

Enfin, l'opérateur 2 prépare la mise à jour des recovery keys :

LINE=stg  # ou LINE=prd

git switch -c "rekey_$(date +'%F')"
git rm recovery-keys/infra-${LINE}/*
git commit -m "${LINE} : removed obsolete recovery keys after rekey"
git push

Il reste à créer une MR, la faire valider et la merger.

Récupération des recovery-keys (tous les opérateurs)#

Chaque opérateur, chacun à son tour, va récupérer sa recovery key.

Créer une nouvelle branche :

git remote update
git switch master
git pull
git switch -c recovery_key_<username>

Puis récupérer votre clé :

nix-shell
LINE=stg  # ou LINE=prd

export VAULT_ADDR=https://vault.infra-${LINE}.caascad.com
vault login -method oidc
export VAULT_TOKEN="$(vault token create -policy=caascad-vault-operator -format=json | jq -r '.auth.client_token')"

mkdir -p recovery-keys/infra-${LINE}
vault-recovery-key retrieve recovery-keys/infra-${LINE}

vault-recovery-key check recovery-keys/infra-${LINE}
# Des erreurs sur des fingerprints peuvent s'afficher.
# Vérifier que votre fingerprint ne fait pas partie de la liste.

git add recovery-keys/infra-${LINE}/<fingerprint>
# Attention : n'ajouter que votre recovery key !
git status
git commit -m "${LINE} : <username> recovery key"
git push

Si d'autres opérateurs sont prêts à effectuer l'opération juste après vous, vous pouvez leur communiquer votre branche.

Sinon, créer une MR, la faire valider et la merger.

Vérification des recovery keys#

Cette opération est à réaliser régulièrement après un rekey tant que tous les opérateurs n'ont pas mis leur recovery key à jour :

nix-shell
LINE=stg  # ou LINE=prd

export VAULT_ADDR=https://vault.infra-${LINE}.caascad.com
vault login -method oidc
export VAULT_TOKEN="$(vault token create -policy=caascad-vault-operator -format=json | jq -r '.auth.client_token')"

vault-recovery-key check recovery-keys/infra-${LINE}