docs(minio) — le raisonnement part dans l'ADR, le code garde ce qui protège
Helm Charts / Detect changed charts (push) Successful in 22s
Helm Charts / Detect changed charts (pull_request) Successful in 16s
MinIO / Auth with gitea for vault (push) Failing after 8m33s
MinIO / Tofu - minio IAC (push) Has been skipped
MinIO / Auth with gitea for vault (pull_request) Failing after 8m32s
MinIO / Tofu - minio IAC (pull_request) Has been skipped
Hashicorp Vault / Auth with gitea for vault (pull_request) Failing after 8m32s
Hashicorp Vault / Tofu - Vault IAC (pull_request) Has been skipped
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Library charts tool (pull_request) Has been skipped
Hashicorp Vault / Auth with gitea for vault (push) Failing after 8m31s
Hashicorp Vault / Tofu - Vault IAC (push) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
Helm Charts / Application charts pgcat (pull_request) Has been skipped

Les décisions de conception (qui déclare, qui détient, pourquoi les octets ne
passent pas par l'API) vivent désormais dans
`factory/doc/adr/20260726-stockage-objet-minio.md`.

Le code ne garde que ce qu'un relecteur ne peut pas deviner et qui l'empêcherait
de casser quelque chose : l'absence VOLONTAIRE de s3:GetObject/PutObject dans la
politique du provisionneur, l'absence VOLONTAIRE de basic-auth sur l'ingress
S3, le caractère inconditionnel de la règle Vault, et l'avertissement sur les
noms d'actions MinIO non éprouvés. Chaque fichier pointe l'ADR.

283 → 230 lignes sur minio/iac. tofu fmt propre, tofu validate réussi sur les
deux racines.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
Claude-Session: https://claude.ai/code/session_01CoafGWmRVESaWX819USUUA
This commit is contained in:
2026-07-26 10:19:28 +02:00
co-authored by Claude Opus 5
parent ec71571b98
commit 7074a94d7e
9 changed files with 43 additions and 125 deletions
+7 -22
View File
@@ -1,21 +1,10 @@
# ── Le compte PROVISIONNEUR : ce que `tools` doit fournir en plus du module ───
# Compte de PROVISIONNEMENT : crée buckets, politiques et comptes de service —
# aucun droit sur les objets. C'est lui que lisent les rôles CI des apps, pour
# qu'elles déclarent leurs buckets sans qu'on leur confie le root.
# Décisions : factory/doc/adr/20260726-stockage-objet-minio.md
#
# Une app qui déclare ses buckets depuis son propre dépôt doit pouvoir les
# créer — donc disposer de droits d'ADMINISTRATION sur MinIO. Lui donner le
# ROOT serait absurde : le root lit et écrit TOUS les objets de TOUTES les apps.
#
# Ce compte-ci ne peut que PROVISIONNER : créer un bucket, une politique, un
# compte de service, et les attacher. Il n'a AUCUN droit de lecture ou
# d'écriture sur les objets. Une app compromise pourrait créer des buckets —
# une nuisance —, pas lire les vidéos d'une autre.
#
# Le root, lui, reste dans `kvv2/minio/config`, que seul le rôle CI `minio`
# peut lire.
#
# ⚠ NON VÉRIFIÉ CONTRE LE SERVEUR : les noms d'actions d'administration MinIO
# ci-dessous viennent de la documentation, pas d'un essai — je n'ai pas
# d'identifiants admin en main. Le PREMIER `apply` les confirmera ou les
# corrigera ; c'est le seul point de cette PR que je ne peux pas prouver ici.
# ⚠ Noms d'actions issus de la documentation MinIO, NON éprouvés contre le
# serveur : le premier apply les confirmera ou les corrigera.
resource "minio_iam_policy" "provisioner" {
name = "provisioner"
policy = jsonencode({
@@ -37,8 +26,7 @@ resource "minio_iam_policy" "provisioner" {
Resource = ["arn:aws:s3:::*"]
},
{
# Créer et inspecter un bucket — mais PAS lire ni écrire ses objets :
# `s3:GetObject` et `s3:PutObject` sont volontairement absents.
# s3:GetObject / s3:PutObject volontairement ABSENTS.
Effect = "Allow"
Action = ["s3:CreateBucket", "s3:DeleteBucket", "s3:ListAllMyBuckets", "s3:GetBucketLocation", "s3:GetBucketPolicy", "s3:PutBucketPolicy"]
Resource = ["arn:aws:s3:::*"]
@@ -63,9 +51,6 @@ resource "minio_iam_user_policy_attachment" "provisioner" {
policy_name = minio_iam_policy.provisioner.id
}
# Lisible par le rôle CI de CHAQUE app (règle générique ajoutée à `app_policy`) :
# c'est ce qui permet à une app de provisionner ses propres buckets sans qu'on
# lui confie le root.
resource "vault_kv_secret_v2" "provisioner" {
mount = "kvv2"
name = "minio/provisioner"