[infra] L'attribution RBAC Azure est déclarée en Terraform, pas seulement en bash #237
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 project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
g2/enervision#237
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
Ce qu'on veut obtenir
L'unique attribution de rôle Azure du projet — « Storage Blob Data Contributor »
sur le compte
stenervisiong2tfstate— est posée parinfra/terraform/bootstrap.sh,en
az role assignment create. Elle fonctionne, mais elle n'apparaît nulle partdans l'état Terraform : le seul moyen de savoir qui a quel droit sur le stockage
est de lire un script de trente lignes et de croire qu'il a été joué.
Le critère C25 demande des politiques d'accès configurées, et la façon dont on le
démontre partout ailleurs dans ce dépôt est la lecture d'un état ou d'un fichier
versionné. L'IAM Azure est le seul endroit où l'on demande au relecteur de faire
confiance à un effet de bord.
On veut que
terraform state showrende le principal, le rôle et la portée.Ce que ce ticket ne fait pas : retirer la création du bootstrap. L'œuf et la
poule est le même qu'au #67 — sans cette attribution,
terraform initéchoue en 403sur le conteneur d'état, donc Terraform ne peut pas être ce qui la crée la première
fois. Le script reste l'amorçage ; Terraform l'adopte et devient la référence
lisible. Les deux ne doivent simplement plus pouvoir diverger sans qu'on le voie.
Critères d'acceptation
azurerm_role_assignmentest déclarée dansinfra/terraform/,portant le rôle « Storage Blob Data Contributor » sur le compte de stockage de
l'état, pour le principal de la session.
terraform planqui suit l'import affiche « No changes ».
bash infra/terraform/bootstrap.shjoué après l'import ne fait plus divergerles deux sources : le
terraform plan -refresh-onlysuivant ne propose aucunchangement.
terraform state showde la ressource rend les trois valeurs qu'un relecteurdoit pouvoir vérifier : identifiant du principal, nom du rôle, portée.
bootstrap.shdit en commentaire, à l'endroit où il crée l'attribution, qu'elleest désormais aussi déclarée en Terraform et laquelle des deux fait foi.
RoleAssignmentExists.Comment on le vérifie
Preuve à joindre à la demande de fusion : la sortie du
planavant fusion, celle del'
applyaprès, comme le prescrit l'ADR 0007et le modèle de MR. Banc statique : le contrôle
fmt/validatedu #72 couvrirala forme dès qu'il existera ; ce ticket n'en dépend pas.
Manuel d'exploitation à mettre à jour
docs/runbooks/terraform-etat.md— section « Poser l'état sur un poste neuf » :ajouter la manœuvre
terraform import, et ce qu'il faut faire quand l'applyéchoue en
RoleAssignmentExists(l'attribution existe, elle n'est pas dans l'état).infra/terraform/README.md— le tableau des fichiers gagne la ressource.Risque et retour arrière
Le risque principal est l'import raté. Sans import, l'
applytente de créer uneattribution qui existe déjà et échoue en
RoleAssignmentExists— sans dégât, mais laconfiguration reste bloquée tant que l'import n'est pas fait. Retour arrière :
terraform state rm azurerm_role_assignment.etat_donnees, qui retire la ressource del'état sans toucher à Azure — on revient exactement à la situation d'aujourd'hui.
Second risque, moins visible : un
terraform destroyemporterait alors l'attribution,et avec elle l'accès au conteneur d'état. Si le rôle le permet, poser un
prevent_destroycomme sur le conteneur d'archive ; sinon, l'écrire dans le runbook.Le critère « le
terraform planqui suit l'import affiche No changes » nesera pas tenu, et ce n'est pas l'import qui est en cause.
L'import est fait, il est propre :
azurerm_role_assignment.etat_donneesnepropose plus rien,
state showrend les trois valeurs, et un passage debootstrap.shsuivi deterraform plan -refresh-onlyne fait diverger aucuneressource. Les cinq autres critères sont tenus.
Ce qui reste au
plan, ce sont trois lignes du #69, jamais appliquées :L'
applydu 10/09 a échoué sur les deux premières en403 AuthorizationFailed — Microsoft.Insights/actionGroups/write. Lecture dela définition du rôle
Devops-cours-projet-eadlfaite dans la foulée : il neporte que
Microsoft.Insights/components/*etdiagnosticSettings/*. NiactionGroups, nimetricAlerts. Le #69 et l'amendement du 07/09 de l'ADR0012 affirmaient
Microsoft.Insights/*accordé — c'était une déduction, pasune mesure. L'alerte de capacité n'a donc jamais été en service. La
troisième ligne, la rétention, est le refus déjà connu de l'ADR 0012.
Aucun membre du groupe ne peut débloquer ça : le rôle est le même pour tous, et
donner ses droits à quelqu'un d'autre donne aussi son blocage. Il faut qu'un
compte enseignant ajoute
Microsoft.Insights/actionGroupsetmetricAlertsaurôle, ou attribue « Monitoring Contributor » sur le groupe.
La MR porte donc le plan complet, avec ces trois lignes expliquées, plutôt
qu'un « No changes » qui n'existe pas. Les affirmations fausses relevées au
passage sont corrigées dans la même MR, datées et sourcées.