[infra] Bootstrap de l'état Terraform distant #67
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
Dependencies
No dependencies set
Reference
g2/enervision#67
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?
Exigence couverte
ENF-09
Épreuve servie
EC04 · Cloud et sécurisation
Charge estimée
0,5 j.h
Ce qu'on veut obtenir
Un stockage distant versionné pour
terraform.tfstate, créé hors Terraform pour sortir du problème de l'œuf et de la poule, rejouable sans erreur et documenté. C'est la première brique de « ce qui sera réellement créé » décrit dans #43, que ce ticket ne modifie pas.Critères d'acceptation
infra/terraform/bootstrap.sh(az CLI) crée le compte de stockage et le conteneurtfstatedansrg-FHeuze2023_cours-projet-eadl, active le versioning, et se rejoue sans erreur ni effet de bord.Standard_LRS,StorageV2, TLS 1.2 minimum, accès public blob désactivé.docs/runbooks/terraform-etat.mdexplique quoi lancer et pourquoi ce n'est pas géré par Terraform.Comment on le vérifie
Manuel d'exploitation à mettre à jour
docs/runbooks/terraform-etat.md(créé)Risque et retour arrière
Nom de compte déjà pris, l'unicité est mondiale : changer le suffixe. Suppression accidentelle : le versioning permet la récupération, sinon
terraform importreconstruit l'état.Dépendances
Aucune. Brique de base des tickets Terraform.
Preuves
Branche
florian/67-bootstrap-etat-terraform, commit094d961. Livrables :infra/terraform/bootstrap.shetdocs/runbooks/terraform-etat.md.Le script, deuxième passage — rejoué quatre fois, sortie identique, aucune erreur ni effet de bord :
Le conteneur et les propriétés demandées :
enableHttpsTrafficOnly=truepar ailleurs. Aucun secret dans le script : aucuneclé de compte n'est lue, tout passe par le plan de gestion et l'identité d'
az login, comme le demande l'ADR 0007.Quatre écarts avec le ticket, imposés par l'abonnement école
rg-FHeuze-eadl→ levrai est
rg-FHeuze2023_cours-projet-eadl.stenervisiong2tfstate, créé ce matin, déjàconforme). Il est adopté plutôt que doublé : l'étiquette
storageaccountnumberdu groupe plafonne le nombre de comptes, et unecréation de plus part en
RequestDisallowedByPolicy.denyexige une étiquetteusersur touteressource — c'est ce qui a fait échouer la première création. Le script la
reprend depuis le groupe, il sert donc dans le groupe de n'importe quel membre.
Devops-cours-projet-eadladataActions: []. Créer leconteneur ne donne aucun droit d'y écrire : plan de gestion et plan données
sont deux mondes. Le script attribue donc
Storage Blob Data Contributorsurle seul compte de stockage — sans quoi le
terraform initdu #68 partiraiten 403 avec tout en place, ce qui est le dépannage le plus coûteux du lot.
L'attribution passe par
az rest: toute sous-commandeaz role assignmentéchoue en
MissingSubscription, l'abonnement ne donnant pas accès à Entra ID.Ce qui est vérifié pour la suite
Écriture réelle dans le conteneur avec la seule identité
az login, sans clé —upload,list,deleteen--auth-mode login, tous passés. Le #68 peut doncposer
use_azuread_auth = true, conforme à l'ADR 0007. À reporter dansbackend.tf:La récupération d'un état écrasé par le versioning a été jouée pour de vrai
avant d'être écrite dans le manuel : deux versions d'un blob d'essai, lecture de
la version antérieure, réinstallation en version courante, ménage fait.
Réserve pour #43
Le #43 demande qu'un plafond de dépense soit déclaré avant toute création.
Il n'existe pas, et le rôle ne porte aucune action
Microsoft.Consumption: jene peux pas le poser. L'exposition est négligeable —
Standard_LRS, quelqueskilo-octets d'état — mais l'ordre demandé par le #43 n'est pas tenu, et cela le
concerne.