Set-OPS-Public/roles/serveur_step_ca/tasks/main.yml
Daniel Allaire 6e46ace4de sondes : les cinq qui manquaient le plus (autorite, base, annuaire, zones, edge)
CORRECTION DE COMPTE D ABORD. J avais annonce cinq groupes sans sonde. La
mesure en donne VINGT-SEPT : j avais compte ceux que j avais en tete, pas
ceux que le depot contient. Il en reste vingt-deux.

LES CINQ, PAR ORDRE DE DEGAT SILENCIEUX.

autorite (step_ca) — la plus urgente : nos certificats vivent 24 h, une AC
muette ne casse rien aujourd hui et casse TOUT demain, d un coup, sur les
21 machines. Elle surveille aussi l expiration de la RACINE, que personne
ne regarde parce qu elle vit des annees (relevee a 3642 jours).

base (postgresql) — une VRAIE requete, pas pg_isready : celui-ci dit que
le port repond, pas que la base sert. Plus le compte des connexions : a
saturation, chaque application tombe sans que la base ait l air morte.

annuaire (openldap) — elle COMPTE les entrees. Un annuaire vide repond
success a tout : le mensonge des sauvegardes vides, vert et sans contenu.

zones (powerdns) — un autoritatif sans zone repond NXDOMAIN a tout, ce qui
se lit comme « ce nom n existe pas ».

edge (nginx) — elle valide la configuration SUR DISQUE : nginx sert la
derniere valide, et une configuration cassee ne se voit qu au prochain
demarrage, souvent des mois plus tard.

Les cinq eprouvees vertes sur le sain puis rouges PAR PARAMETRE, sans
toucher a un service.

Etat : 20 sondes sur 19 roles, 23 services distincts, 70 instances, 67 au
vert. Les trois autres sont connues : deux sauvegardes sans donnee a
emporter, et Loki en delai de stabilisation apres redeploiement.

make prouver : CONFORME, 64 OK, 0 echec, 0 saute.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q
2026-09-10 03:47:03 -04:00

159 lines
5.8 KiB
YAML

---
- name: Exiger les secrets de l'AC (Vault)
ansible.builtin.assert:
that:
- serveur_step_ca_password | length > 0
- serveur_step_ca_provisioner_password | length > 0
fail_msg: >-
serveur_step_ca_password et serveur_step_ca_provisioner_password
sont requis (a fournir via Ansible Vault).
- name: Assurer le repertoire des trousseaux apt
ansible.builtin.file:
path: /etc/apt/keyrings
state: directory
owner: root
group: root
mode: "0755"
# LA GARDE « RECUPEREE UNE FOIS » A DISPARU AVEC CE QU'ELLE GARDAIT (2026-08-30).
#
# Elle evitait de recontacter le fournisseur a chaque passage — soixante-dix allers-retours
# externes pour des cles deja installees (arbitrage du 2026-08-09). La cle etant desormais
# VERSIONNEE, il n'y a plus d'aller-retour a eviter : `copy` ne sort pas, et son
# idempotence vient de la comparaison d'empreintes, pas d'un `stat` qu'on ecrit soi-meme.
#
# Le meme arbitrage est donc honore plus completement : la plateforme ne depend plus du
# tout de serveurs etrangers pour redeployer ce qu'elle possede deja.
# LA CLE DE SIGNATURE EST VERSIONNEE, PLUS TELECHARGEE (2026-08-30).
#
# Elle etait tiree de `packages.smallstep.com` par son NOM. Un tenant n'a pas de DNS
# sortant — il resout chez lui, sa requete ne traverse jamais la frontiere — et
# `get_url` n'a pas de mandataire, la ou `apt` s'en sort par le cache qui resout a sa
# place. Mesure sur `infra-pki-01`, premiere machine a porter l'autorite de Chezlepro :
#
# Request failed: <urlopen error [Errno -3] Echec temporaire dans la resolution du nom>
#
# Les cinq reprises de l'ancienne version ne pouvaient rien : elles etaient ecrites pour
# un serveur INTERMITTENT (mesure du 2026-08-23), pas pour une resolution fermee. Une
# reprise ne repare que ce qui est passager.
#
# MEME IDIOME QUE LES COLLECTIONS ET LES ROUES : le depot porte, la cible n'ouvre rien.
# C'est ce qui rend une lignee reproductible sans Internet. Empreinte, raison et
# procedure de mise a jour dans `files/README-cle-smallstep.md`.
#
# `serveur_step_ca_depot_cle_url` reste declaree : elle documente la provenance et sert
# a rafraichir le fichier depuis un poste qui a le DNS. Elle n'est plus lue au deploiement.
- name: Poser la cle de signature Smallstep (versionnee, aucun appel sortant)
ansible.builtin.copy:
src: smallstep-repo-signing-key.asc
dest: "{{ serveur_step_ca_depot_cle_fichier }}"
owner: root
group: root
mode: "0644"
- name: Ajouter le depot apt Smallstep
ansible.builtin.template:
src: smallstep.sources.j2
dest: /etc/apt/sources.list.d/smallstep.sources
owner: root
group: root
mode: "0644"
- name: Installer step-ca et step-cli
when: not ansible_check_mode # dry-run : le depot Smallstep n'est pas reellement ajoute
ansible.builtin.apt:
name: "{{ serveur_step_ca_paquets }}"
state: present
update_cache: true
- name: Creer l'utilisateur systeme step
ansible.builtin.user:
name: "{{ serveur_step_ca_utilisateur }}"
system: true
home: "{{ serveur_step_ca_steppath }}"
create_home: false
shell: /usr/sbin/nologin
- name: Creer le repertoire STEPPATH
ansible.builtin.file:
path: "{{ serveur_step_ca_steppath }}"
state: directory
owner: "{{ serveur_step_ca_utilisateur }}"
group: "{{ serveur_step_ca_utilisateur }}"
mode: "0700"
- name: Deployer le mot de passe de l'AC
ansible.builtin.copy:
content: "{{ serveur_step_ca_password }}"
dest: "{{ serveur_step_ca_steppath }}/password.txt"
owner: "{{ serveur_step_ca_utilisateur }}"
group: "{{ serveur_step_ca_utilisateur }}"
mode: "0600"
no_log: true
notify: Redemarrer step-ca
- name: Deployer le mot de passe du provisioner
ansible.builtin.copy:
content: "{{ serveur_step_ca_provisioner_password }}"
dest: "{{ serveur_step_ca_steppath }}/provisioner_password.txt"
owner: "{{ serveur_step_ca_utilisateur }}"
group: "{{ serveur_step_ca_utilisateur }}"
mode: "0600"
no_log: true
- name: Initialiser l'autorite de certification (une seule fois)
when: not ansible_check_mode # dry-run : le binaire step n'est pas encore installe
ansible.builtin.command:
cmd: >-
step ca init
--deployment-type standalone
--name "{{ serveur_step_ca_nom }}"
--dns "{{ serveur_step_ca_dns }}"
--address "{{ serveur_step_ca_adresse }}"
--provisioner "{{ serveur_step_ca_provisioner }}"
--password-file {{ serveur_step_ca_steppath }}/password.txt
--provisioner-password-file {{ serveur_step_ca_steppath }}/provisioner_password.txt
{{ '--acme' if serveur_step_ca_acme | bool else '' }}
creates: "{{ serveur_step_ca_steppath }}/config/ca.json"
become: true
become_user: "{{ serveur_step_ca_utilisateur }}"
environment:
STEPPATH: "{{ serveur_step_ca_steppath }}"
- name: Deployer l'unite systemd step-ca
ansible.builtin.template:
src: step-ca.service.j2
dest: /etc/systemd/system/step-ca.service
owner: root
group: root
mode: "0644"
notify: Redemarrer step-ca
- name: Activer et demarrer step-ca
when: not ansible_check_mode
ansible.builtin.systemd:
name: "{{ serveur_step_ca_service }}"
enabled: true
state: started
daemon_reload: true
# --- Sonde de supervision (docs/supervision-conception.md) --------------------------
# Le role qui possede la verite depose sa propre sonde ; le porteur (`client_sante`) la
# fait tourner et pousse le verdict, sans savoir ce qu'elle mesure.
- name: Assurer le repertoire des sondes de supervision
ansible.builtin.file:
path: /usr/local/lib/setops/sondes
state: directory
owner: root
group: root
mode: "0755"
- name: Deposer la sonde « autorite »
ansible.builtin.template:
src: sonde-autorite.sh.j2
dest: /usr/local/lib/setops/sondes/autorite.sh
owner: root
group: root
mode: "0750"