[décision] État Terraform distant et authentification sans service principal #73
Labels
No labels
Compat/Breaking
EC01
EC02
EC03
EC04
EC05
EC06
Kind/BDD
Kind/Back
Kind/Bug
Kind/CICD
Kind/Cloud
Kind/Contenu
Kind/Data
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Front
Kind/IA
Kind/Infra
Kind/Monitoring
Kind/Security
Kind/Testing
Portée/Post-jury
Priority
Critical
Priority
High
Priority
Low
Priority
Medium
Reviewed
Confirmed
Reviewed
Duplicate
Reviewed
Invalid
Reviewed
Won't Fix
Status
Abandoned
Status
Blocked
Status
Need More Info
ops/alerte
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
g2/enervision#73
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Contexte
Le
tfstatedoit vivre ailleurs que sur le poste. L'abonnement école ne donne pas accès à Entra ID et interdit la création d'un service principal, ce qui force unapplymanuel. Il faut tracer ce choix et sa mesure compensatoire.Sert EC01 (dossier d'architecture de Gabriel) et EC02 (revue de conception).
Options envisagées
az loginutilisateur : retenu.Sur quoi on tranche
Confidentialité de l'état, verrou de concurrence, absence de dépendance de fonctionnement, faisabilité dans les droits disponibles.
Décision retenue
À remplir à la fermeture. Sens attendu : backend
azurermsur le conteneur créé en #67,applymanuel lancé par Gabriel, preuveplanpuisapplycollée en MR, relecture obligatoire sur les chemins d'infra.Alternative écartée, et pourquoi
L'
applyautomatique en CI, faute de service principal. Compensé par la trace en MR et la relecture. À rouvrir si un service principal devient disponible.Fiche ADR produite
docs/adr/007-terraform-etat-distant.mdDépendances
Se rédige avec #68 (le squelette Terraform matérialise la décision).
Décision retenue
L'état vit dans le conteneur tfstate du compte de stockage créé par #67, sous la clé enervision/terraform.tfstate, via le backend azurerm. Le conteneur est créé hors Terraform, versioning actif.
L'authentification est celle de l'utilisateur, par az login, sur le tenant 7f4f3591-… verrouillé dans providers.tf. Aucun service principal n'est créé, aucun secret Azure n'entre dans le magasin de Forgejo — backend.tf ne porte que des noms de compte, de conteneur et de clé, qui ne sont pas des secrets et passent le scan de fuite.
L'apply est manuel, lancé par Gabriel. Toute MR touchant infra/terraform/ porte en commentaire la sortie de terraform plan -out avant la fusion, puis celle du terraform apply du plan enregistré après. Relecture par un pair obligatoire sur ces chemins.
Ce qui a fait pencher
L'état porte en clair les valeurs que le fournisseur lui rend, donc ENF-12 exclut de le versionner : la question n'était pas de savoir si un backend distant valait le détour, mais lequel. azurerm pose un bail sur le blob pendant l'opération — c'est la seule des trois options qui donne le verrou de concurrence sans compte externe — et le versioning du conteneur fournit le retour arrière, là où un état perdu se reconstruirait sinon ressource par ressource au terraform import. Terraform Cloud a été écarté pour la dépendance de fonctionnement : un compte hors abonnement, sur un service que le jury ne peut pas inspecter, pour une empreinte cloud limitée à trois ressources (#43).
Alternative écartée
L'apply automatique en CI, qui serait la façon normale de tenir ENF-09. Écarté faute de service principal : l'abonnement école ne donne pas accès à Entra ID, la chaîne n'a donc aucune identité pour parler à Azure. Le choix n'était pas entre manuel et automatique, il était entre manuel et rien.
Mesure compensatoire : la trace plan puis apply en MR, et la relecture obligatoire. Ce n'est pas équivalent — cela ne garantit pas que le geste a été fait, seulement qu'il est écrit et qu'un tiers l'a lu. À rouvrir si un service principal devient disponible.
Fiche ADR produite
docs/adr/0007-terraform-etat-distant.md — numérotée sur la série du groupe à quatre chiffres, comme le demande docs/adr/README.md, et non 007- comme annoncé plus haut dans ce ticket. Index des ADR mis à jour.