diff --git a/minio/iac/modules/minio_app/main.tf b/minio/iac/modules/minio_app/main.tf index 0a5cb0b..ad2dbe8 100644 --- a/minio/iac/modules/minio_app/main.tf +++ b/minio/iac/modules/minio_app/main.tf @@ -56,8 +56,21 @@ resource "minio_iam_policy" "app" { Version = "2012-10-17" Statement = [ { - Effect = "Allow" - Action = ["s3:GetObject", "s3:PutObject", "s3:DeleteObject"] + Effect = "Allow" + # ⚠ LES DEUX ACTIONS DU MULTIPART QUE `s3:PutObject` NE COUVRE PAS — mesuré + # le 2026-09-07 sur le homelab, avec les identifiants de kadans-api rejoués + # depuis un poste : ouvrir un téléversement et déposer ses parts passent + # (ce sont des PutObject), mais `ListObjectParts` rend 403 AccessDenied. + # L'app ne pouvait donc JAMAIS refermer un téléversement en parts : toute + # vidéo qui dépasse la taille d'une part échouait à l'assemblage, à tous + # les coups, derrière un « stockage injoignable » qui ne nommait rien. + # `AbortMultipartUpload` était refusé pareil : l'app ne pouvait pas non + # plus abandonner ce qu'elle avait ouvert — seule la règle de cycle de vie + # ci-dessus ramassait, un jour plus tard. + Action = [ + "s3:GetObject", "s3:PutObject", "s3:DeleteObject", + "s3:ListMultipartUploadParts", "s3:AbortMultipartUpload", + ] Resource = [for b in var.buckets : "arn:aws:s3:::${b}/*"] }, {