diff --git a/minio/iac/provisioner.tf b/minio/iac/provisioner.tf index 43be8c1..78f73e0 100644 --- a/minio/iac/provisioner.tf +++ b/minio/iac/provisioner.tf @@ -3,8 +3,9 @@ # qu'elles déclarent leurs buckets sans qu'on leur confie le root. # Décisions : factory/doc/adr/20260726-stockage-objet-minio.md # -# ⚠ Noms d'actions issus de la documentation MinIO, NON éprouvés contre le -# serveur : le premier apply les confirmera ou les corrigera. +# Noms d'actions confirmés par le premier apply réel (kadans, 2026-07-26) : le +# bloc admin passe tel quel ; côté s3 il manquait `s3:ListBucket`, que le +# provider appelle AVANT de créer un bucket pour savoir s'il existe déjà. resource "minio_iam_policy" "provisioner" { name = "provisioner" policy = jsonencode({ @@ -26,9 +27,15 @@ resource "minio_iam_policy" "provisioner" { Resource = ["arn:aws:s3:::*"] }, { - # s3:GetObject / s3:PutObject volontairement ABSENTS. + # s3:GetObject / s3:PutObject volontairement ABSENTS : le provisionneur + # ne LIT ni n'ÉCRIT aucun objet, c'est ce qui rend son partage entre + # rôles CI acceptable. + # + # `s3:ListBucket` est la seule concession : MinIO le demande pour un + # HeadBucket, et le provider teste l'existence du bucket avant de le + # créer. Il donne la vue des CLÉS d'un bucket, jamais leur contenu. Effect = "Allow" - Action = ["s3:CreateBucket", "s3:DeleteBucket", "s3:ListAllMyBuckets", "s3:GetBucketLocation", "s3:GetBucketPolicy", "s3:PutBucketPolicy"] + Action = ["s3:CreateBucket", "s3:DeleteBucket", "s3:ListBucket", "s3:ListAllMyBuckets", "s3:GetBucketLocation", "s3:GetBucketPolicy", "s3:PutBucketPolicy"] Resource = ["arn:aws:s3:::*"] }, ]