Paillasse/docs/runbooks/compte-service-openstack.md
Adam Belkacemi ca2f6f3b7a ajoute le runbook de rotation du compte de service OpenStack
Redémarre aussi le worker de file quand Ansible change une variable de
.env : queue:work lit la configuration une seule fois au démarrage, et
garderait sinon l'ancien mot de passe après une rotation.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 21:01:08 +02:00

3.7 KiB

Runbook — Compte de service OpenStack paillasse-service

Compte utilisé par le portail pour tout ce qu'il demande à OpenStack (consoles Nova, stacks Heat). Authentification par mot de passe, pas par application credential : voir ADR 0002.

État attendu (à vérifier après toute intervention)

Point Attendu Vérification
Rôles member sur le projet paillasse, rien d'autre (reader apparaît en effectif : rôle impliqué par member) openstack role assignment list --user paillasse-service --user-domain Default --names (cloud kolla-admin)
Mot de passe 32 octets aléatoires (openssl rand -base64 32, 44 caractères) longueur seulement, jamais la valeur
Copie 1 (référence) /etc/kolla/clouds-paillasse.yaml, 600 root:root stat -c "%a %U:%G" ...
Copie 2 (lue par PHP) /var/www/portail/.env (OS_PASSWORD), 640 adam:www-data idem

Le mot de passe n'existe nulle part ailleurs : ni dans Git, ni sur le Mac, ni dans un gestionnaire de mots de passe. Personne n'a besoin de le connaître.

Rotation

Quand : si le secret a pu être exposé (fichier copié, sauvegarde mal chiffrée, affichage accidentel), au départ d'une personne ayant eu un accès root, et sinon une fois par an.

Durée d'interruption : quelques secondes pour les nouvelles authentifications ; aucune perte de données. Éviter un créneau de séance en cours.

1. Sur le serveur : nouveau mot de passe dans Keystone et dans la référence

ssh paillasse
sudo -i
export PATH=/opt/kolla-venv/bin:$PATH
export OS_CLIENT_CONFIG_FILE=/etc/kolla/clouds.yaml OS_CLOUD=kolla-admin

NOUVEAU=$(openssl rand -base64 32)
openstack user set --password "$NOUVEAU" paillasse-service
sed -i "s|^\(\s*password:\s*\).*|\1\"$NOUVEAU\"|" /etc/kolla/clouds-paillasse.yaml
unset NOUVEAU
chmod 600 /etc/kolla/clouds-paillasse.yaml

Ne pas exporter OS_PROJECT_NAME=paillasse ici : le compte admin n'a pas de rôle sur ce projet (401). Le mot de passe passe brièvement en argument de commande (visible par ps pendant l'appel) : risque accepté, le serveur n'a pas d'autre utilisateur interactif.

Vérifier que la référence fonctionne :

OS_CLIENT_CONFIG_FILE=/etc/kolla/clouds-paillasse.yaml OS_CLOUD=paillasse-service \
  openstack token issue -f value -c project_id

2. Depuis le Mac : reporter dans le portail

cd ansible && script -q /dev/null ansible-playbook portail.yml -i inventory.ini

Le rôle relit clouds-paillasse.yaml, met à jour OS_PASSWORD dans .env, régénère le cache de configuration et redémarre le worker de file.

3. Sur le serveur : oublier le jeton Keystone en cache

Le portail garde son jeton Keystone en cache 50 minutes. Que Keystone révoque ou non les jetons existants au changement de mot de passe (non vérifié sur ce serveur), le forcer à se réauthentifier tout de suite permet de constater une erreur maintenant plutôt que 50 minutes plus tard :

cd /var/www/portail
sudo -u www-data HOME=/tmp php8.3 artisan cache:forget openstack.authentification

4. Vérifier

sudo -u www-data HOME=/tmp php8.3 artisan tinker \
  --execute="echo strlen(app(App\Services\OpenStack\KeystoneAuth::class)->jeton()) > 0 ? 'ok' : 'echec';"

Puis ouvrir une console de lab ou admettre un élève de test.

En cas d'échec à mi-chemin

Si Keystone a le nouveau mot de passe mais pas le portail (étape 2 ratée) : les consoles et créations de stack échouent avec Authentification OpenStack refusée. Relancer l'étape 2 ; clouds-paillasse.yaml fait foi.

Si clouds-paillasse.yaml n'a pas été mis à jour (étape 1 interrompue après user set) : refaire toute l'étape 1 avec un nouveau mot de passe.