minio_app : le compte de service peut refermer et abandonner un téléversement en parts (kadans#1033)

`ListObjectParts` et `AbortMultipartUpload` rendaient 403 AccessDenied avec les
identifiants de kadans-api — mesuré le 2026-09-07 sur le homelab, en rejouant les
appels de contrôle exacts de l'API depuis un poste. Ouvrir et déposer les parts
sont des PutObject et passaient ; l'assemblage n'a jamais pu avoir lieu, et toute
vidéo de plus d'une part échouait à la confirmation derrière « stockage injoignable ».

Co-Authored-By: Claude Fable 5.1 <[email protected]>
This commit is contained in:
2026-09-07 08:22:44 +02:00
co-authored by Claude Fable 5.1
parent bb3a5cdf5c
commit 56d0421943
+15 -2
View File
@@ -56,8 +56,21 @@ resource "minio_iam_policy" "app" {
Version = "2012-10-17" Version = "2012-10-17"
Statement = [ Statement = [
{ {
Effect = "Allow" Effect = "Allow"
Action = ["s3:GetObject", "s3:PutObject", "s3:DeleteObject"] # ⚠ 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}/*"] Resource = [for b in var.buckets : "arn:aws:s3:::${b}/*"]
}, },
{ {