[infra] Installation de MinIO, buckets du médaillon et rétention #28
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 milestone
No project
No assignees
3 participants
Notifications
Total time spent: 18 hours
Due date
justine
18 hours
No due date set.
Blocks
Reference
g2/enervision#28
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-07, ENF-14
Épreuve servie
EC05 · Data, ETL et BI
Charge estimée
1 j.h
Ce qu'on veut obtenir
Installer MinIO sur le serveur et le configurer pour porter les trois zones du médaillon et les artefacts MLflow, sans qu'il soit joignable depuis le réseau de la salle.
Comment : en conteneur Docker, comme la pile de la forge. PostgreSQL reste en paquet système puisqu'il y est déjà, mais tout nouveau composant passe par Docker, sinon le playbook Ansible du #41 doit gérer deux façons de faire et on se retrouve avec deux manuels d'exploitation.
Critères d'acceptation
Comment on le vérifie
Commande mc ls local/ depuis le serveur, puis curl depuis un autre poste
Attendu les quatre buckets listés en local, connexion refusée depuis l'extérieur
Preuve les deux sorties collées à la fermeture
Manuel d'exploitation à mettre à jour
docs/runbooks/minio.md, création et sauvegarde des buckets
Risque et retour arrière
Un bucket exposé par erreur rendrait la mesure brute lisible par les quatre autres groupes. Retour arrière : arrêt du service, la zone or en base reste servie.
[infra] MinIO, médaillon et politique de rétentionto [infra] Installation de MinIO, buckets du médaillon et rétentionTicket précisé : le titre dit maintenant qu'il s'agit d'une installation, un critère a été ajouté pour le redémarrage automatique de la machine, et le moyen est tranché — conteneur Docker, comme la pile de la forge, pour que le playbook Ansible du #41 n'ait qu'une seule façon de faire à rejouer.
Le libellé
Kind/Dataa été retiré : MinIO est du stockage objet, donc de l'infrastructure.Justine porte ce ticket. MinIO est le socle du médaillon, donc du data lake, et il conditionne son #33 pour la zone bronze. C'est son travail et sa preuve : elle installe, elle documente la rétention, elle écrit le manuel et elle colle la preuve à la fermeture.
Pas besoin d'ouvrir un second ticket pour le même travail, les commentaires ici valent trace.
Un utilisateur MinIO dédié va apparaître dans le service, pour le registre MLflow (#30)
Justine, comme MinIO est ton service : le registre MLflow ne consommera pas
les identifiants racine, il crée son propre utilisateur. Je l'ai posé hors de
ton périmètre — aucun de tes scripts n'est modifié, aucun bucket n'est créé,
aucune rétention n'est touchée.
Ce qui est ajouté, par
infra/compose/mlflow/genere-identifiants.sh:mlflow-<8 hexa>, tiré au sort ;mlflow-artefacts, attachée à cet utilisateur.Ce que la politique autorise : lire, écrire et supprimer dans le bucket
mlflow, plus le téléversement en plusieurs parties — un artefact de modèledépasse vite le seuil où boto3 découpe l'envoi.
bronze,silveretgoldsont refusés, et le script éprouve ce refus avant d'écrire quoi que ce
soit : s'il arrive à lister une des trois zones, il s'arrête et n'écrit pas le
fichier de secrets. Le test d'intégration rejoue ce contrôle
(
tests/integration/test_registre_mlflow.py).Où vivent les identifiants :
/etc/enervision/mlflow.env, en0600 root,jamais dans le dépôt. Tes identifiants racine restent dans
/etc/enervision/minio.envet ne sont lus que le temps de créer l'utilisateur— par la variable
MC_HOST_, et non parmc alias set, pour ne pas laisserune seconde copie du secret racine dans
~/.mc/config.json. C'est la remarquede ton manuel, « le compte d'administration mériterait à terme un utilisateur
MinIO dédié », appliquée au premier consommateur du bucket
mlflow.Rotation et retrait de cet utilisateur :
docs/runbooks/mlflow.md, section 6.Si tu préfères que ce geste vive dans
init-buckets.shplutôt que dans la pileMLflow, dis-le et je déplace — je l'ai mis chez moi pour ne pas empiéter, pas
par principe.
Rien à faire de ton côté sur ce ticket : c'est une information, pas une demande.
Ton déploiement débloque les deux derniers critères du #30
Justine, constat fait sur
ml-stagiaire-02aujourd'hui : MinIO est fusionnédans
developmais n'est pas déployé sur le serveur.Le registre MLflow du #30 est installé et tourne, mais il ne peut pas écrire
d'artefact : il n'y a ni bucket ni identifiants. Le serveur journalise
NoCredentialsError, ce qui est le comportement correct.Ce qu'il me faut, et rien de plus — ce sont tes propres critères
d'acceptation, il n'y a rien à ajouter pour moi :
infra/compose/docker-compose.yml;mlflowcréé (toninit-buckets.shle fait déjà) ;/etc/enervision/minio.envproduit par tongenere-identifiants.sh;mcposé sur le serveur, comme le décrit ton manuel.Ensuite je joue mon
genere-identifiants.sh, qui crée l'utilisateur MinIOdédié — voir mon commentaire plus haut — et le #30 se ferme.
Deux choses à savoir avant de déployer, tirées de l'installation du jour :
/etc/enervision/existe maintenant, en0700 root: je l'ai créé pourle fichier de secrets du registre. Ton
genere-identifiants.shfaitinstall -ddessus, donc il est idempotent et ne cassera pas.127.0.0.1:9000:9000). Lejournal du 31 août dit « aucun conteneur ne démarre en réseau bridge sur ce
LXC », et c'est pour ça que la pile PostgreSQL et la mienne sont en réseau
hôte. Je ne sais pas si ça vaut encore — Docker est en 29.1.3 sur la machine
— mais c'est à éprouver au démarrage plutôt qu'à découvrir après. Si le
bridge ne porte pas,
network_mode: hostavec l'écoute bornée par laconfiguration MinIO donne le même résultat côté ENF-14. Dans les deux cas la
vérification qui compte est celle de ton manuel :
curldepuis un autreposte.
Je ne touche pas à ta pile. Dis-moi quand c'est en service et je finis le #30
dans la demi-heure.
Merci — le #30 est bouclé. Deux relevés pour toi
MinIO en service, j'ai enchaîné dans la demi-heure : utilisateur MinIO dédié
mlflow-7ffe27e5créé avec la politiquemlflow-artefacts, artefacts écrits etrelus dans le bucket
mlflow, test d'intégration du registre à 14 / 14. Preuvessur le #30.
Deux choses relevées au passage, sur ton périmètre :
1.
/etc/enervision/minio.envest en640 root:deploy.Ton critère d'acceptation dit « droits 600 hors du dépôt », et ton propre test
l'affirme :
Donc
test_les_identifiants_sont_hors_du_depot_en_600doit être rouge chez toi.Deux lectures possibles et je ne veux pas trancher à ta place : soit c'est
volontaire pour le compte
deploydu #41, et c'est le critère et le test qu'ilfaut corriger — en disant pourquoi le groupe
deploya le droit de lire ; soitc'est un accident, et c'est le fichier. Je n'y ai pas touché.
2. J'ai installé le client
mcen/usr/local/bin/mc(
RELEASE.2025-08-13T08-35-41Z), par la commande de ton manuel — il n'était paslà et mon générateur en dépend. Ton alias
localexistait déjà pour root, jen'ai rien changé à
~/.mc.Et une bonne nouvelle qui contredit le journal du 31 août : ton réseau
bridge fonctionne sur ce LXC. MinIO écoute bien sur
127.0.0.1:9000et9001viadocker-proxy, et depuis mon poste les deux ports sont refusés,comme 5000 et 5433. Docker est en 29.1.3 sur la machine — le constat du 31 août
ne vaut plus, ce qui mériterait une ligne au journal parce que trois piles ont
été écrites en réseau hôte pour cette raison.
depuis un poste tiers pas d'accès
Le critère "Les identifiants sont générés, jamais choisis, et stockés en droits 600 hors du dépôt." devrait être modifié.
Actuellement les identifiants sont générés, jamais choisis, et stockés hors du dépôt dans un fichier appartenant à root, sans aucun accès pour les autres utilisateurs et en lecture seule pour les groupes de déploiement : 0600 root:root (en installation manuelle) et 0640 root:deploy (après Ansible).
Le 600 du critère initial fige la façon dont le composant est installé à la main, pas la propriété de sécurité. Le compte deploy doit lire le fichier puisque env_file est lu par le client Compose (infra/ansible/roles/app/tasks/main.yml:86).
Vous validez @lenaic @olivier ?
justine/28-installation-MiniOto justine/28-droits-minio-envjustine/28-droits-minio-envto justine/28-installation-MiniOOk donc changement du critère en "Les identifiants sont générés, jamais choisis, et stockés hors du dépôt, illisibles pour qui n'est ni root ni le groupe de déploiement (0600 root:root ou 0640 root:deploy)."
Les modifications ont été ajoutées dans la branche justine/28-droits-minio-env