# Apprendre en prenant des décisions.

Adrien Murillo — Murillo Consulting

Adrien Murillo, consultant DevOps et DevSecOps à Toulouse. Kubernetes, CI/CD, sécurité Cloud, MCO/MCS et homologation SSI pour les environnements critiques.

## Projets publics, distincts des missions

### [Kube Aegis Forge](/projets/kube-aegis-forge)

Plateforme Kubernetes GitOps reproductible et sécurisée de bout en bout.

L'extension AWS est validée hors ligne. Aucun déploiement AWS réel n'est revendiqué.

[GitHub](https://github.com/murillo-consulting/kube-aegis-forge)

### [BastShield](/projets/bastshield)

Socle Kubernetes souverain pour cloud, virtualisation locale et environnements déconnectés.

Le chemin Scaleway reste expérimental et exige une revue opérateur avant tout déploiement.

[GitHub](https://github.com/murillo-consulting/BastShield)

### [Fortplane](/projets/fortplane)

Socle Kubernetes sécurisé pour environnements connectés, à sortie limitée ou déconnectés.

Les validations de cluster et l'assemblage hors ligne exigent Zarf et un environnement Kubernetes dédié.

[GitHub](https://github.com/murillo-consulting/Fortplane)

### [Labz](/projets/labz)

Cyber range AWS jetable pour entraînement, simulation d'attaque et détection.

Les AMI sont dépendantes du compte et de la région. Un déploiement réel peut être coûteux et vulnérable par conception.

[GitHub](https://github.com/murillo-consulting/Labz)

### [Gate](/projets/gate)

Passerelle LLM locale avec DLP, routage multi-fournisseur, budgets et audit signé.

Les clés réelles restent injectées à l'exécution. Les exemples de déploiement doivent être durcis avant production.

[GitHub](https://github.com/murillo-consulting/Gate)

### [ControlLoom](/projets/controlloom)

Espace Git-native pour relier contrôles de sécurité, preuves d'implémentation et revues.

Les preuves sensibles et rapports d'audit privés ne doivent pas être placés dans un espace de travail public.

[GitHub](https://github.com/murillo-consulting/ControlLoom)

### [LangGraph Resilient Agent](/projets/langgraph-resilient-agent)

Agent durable avec approbation humaine, effets idempotents et audit expurgé.

L'identité par en-têtes et SQLite sont des adaptateurs locaux à remplacer en production.

[GitHub](https://github.com/murillo-consulting/langgraph-resilient-agent)

### [Spring AI Secure RAG](/projets/spring-ai-secure-rag)

RAG cloisonné par locataire avec citations vérifiées et abstention déterministe.

L'index en mémoire et l'identité par en-têtes sont explicitement limités à la démonstration locale.

[GitHub](https://github.com/murillo-consulting/spring-ai-secure-rag)

### [Impôts France MCP](/projets/impots-france-mcp)

MCP fiscal français avec moteur Rust/Wasm et règles officielles versionnées.

Aucun endpoint partagé n'est garanti et les résultats restent des simulations, pas des conseils fiscaux.

[GitHub](https://github.com/murillo-consulting/impots-france-mcp)

### [cli-skills](/projets/cli-skills)

Compétences portables pour auditer, documenter et concevoir avec des agents de code.

Les compétences assistent le travail. Elles ne remplacent ni la revue humaine ni les tests du projet cible.

[GitHub](https://github.com/murillo-consulting/cli-skills)

## Incident & gouvernance

Une plateforme interne devient indisponible. Un compte administrateur présente une connexion inhabituelle. Vous participez à la cellule de décision.

### Les premières minutes

Vous ne savez pas encore si la panne et la connexion sont liées. Quelle première décision proposez-vous ?

Mobiliser les responsables, contenir le compte suspect et préserver les traces utiles.

La coordination permet de décider du périmètre de confinement avec l’exploitation. Préserver les traces aide à vérifier les hypothèses. Une reconstruction générale trop tôt peut effacer des éléments utiles.

Horodatage, compte concerné, systèmes touchés et décision de confinement.

### La pression pour redémarrer

Une sauvegarde est disponible. Le métier demande une reprise immédiate. Que faut-il établir ?

Que la sauvegarde est exploitable et que la restauration peut être vérifiée dans un environnement maîtrisé.

L’existence d’une sauvegarde ne prouve ni son intégrité ni la capacité de reprise. Il faut définir les contrôles techniques et métiers, puis valider le résultat de la restauration.

Rapport de restauration, contrôles d’intégrité et validation métier.

### Accepter le risque restant

Le service peut reprendre avec une mesure temporaire. Une faiblesse reste ouverte. Comment organiser la décision ?

Faire valider le risque par le responsable habilité, avec une action, un propriétaire et une date de réexamen.

L’arbitrage doit appartenir au responsable du risque. La mesure temporaire devient suivable si sa portée, son propriétaire et sa date de réexamen sont explicites.

Décision datée, risque résiduel, responsable et échéance.

## Assistant IA & permissions

Une équipe prépare un assistant qui consulte des documents internes et peut créer des tickets. Vous relisez son architecture avant le pilote.

### Une consigne dans un document

Un document récupéré demande à l’assistant d’envoyer son contexte à une adresse externe. Quel contrôle est prioritaire ?

Traiter le document comme une donnée non fiable et interdire les sorties et outils non autorisés.

Le contenu récupéré ne doit pas devenir une instruction de confiance. Les contrôles d’accès et de sortie doivent être appliqués par le système qui exécute les actions, avec des tests sur les scénarios d’injection.

Test d’injection avec vérification des appels d’outils et des sorties réseau.

### Le bon document, la mauvaise personne

L’assistant cite un document que l’utilisateur n’a pas le droit de lire. Où placer le contrôle ?

Dans la recherche et l’accès aux documents, avec l’identité et les droits de l’utilisateur.

Une réponse filtrée trop tard peut déjà exposer des données. La recherche doit appliquer les autorisations avant de transmettre les documents au modèle, puis vérifier les sorties selon le contexte.

Tests croisés avec deux identités et des documents de droits différents.

### Passer de la suggestion à l’action

Le pilote peut maintenant modifier des tickets existants. Quelle condition ajoutez-vous ?

Une autorisation précise par action, une validation humaine pour les effets sensibles et un journal des changements.

L’autonomie doit rester proportionnée aux effets. Une permission précise et une validation des actions sensibles réduisent la portée d’une erreur. Le journal permet de retrouver ce qui a été modifié.

Matrice des actions autorisées et test d’une modification refusée.

## Rust & robustesse

Vous concevez un petit outil Rust qui importe une configuration et appelle une API. Le compilateur est satisfait. Vous préparez la livraison.

### Une entrée inattendue

Une valeur obligatoire manque dans le fichier. Quel comportement préparez-vous ?

Une erreur explicite et testée, sans effet partiel non documenté.

Le compilateur ne définit pas le comportement métier d’une entrée invalide. Une erreur explicite rend le diagnostic possible. Tester ce chemin évite qu’un échec banal devienne une interruption incompréhensible.

Test d’import invalide, message d’erreur utile et code de sortie non nul.

### Une API qui ne répond plus

L’outil attend une réponse externe. Que devez-vous préciser ?

Une limite de temps, une stratégie de reprise et les opérations qui peuvent être rejouées.

Le langage ne fixe pas la politique réseau. Une reprise peut dupliquer une action si elle n’est pas idempotente. Délai, nombre de tentatives et comportement en échec doivent être décidés et testés.

Test de timeout et vérification qu’une reprise ne duplique pas une action.

### Le passage à une autre équipe

Le binaire fonctionne sur votre poste. Que livrez-vous en complément ?

Le code, les versions de dépendances, les instructions et les tests qui décrivent le contrat de l’outil.

La reprise exige de pouvoir reconstruire et vérifier le composant. Les limites et le contrat d’erreur comptent autant que le scénario nominal.

Construction dans un environnement propre et exécution documentée des tests.

## [Rustlings](https://github.com/rust-lang/rustlings)

Des exercices de Rust à résoudre avec le compilateur. Pour pratiquer progressivement les types, les erreurs et les tests.

En local · Rust et Cargo nécessaires · MIT

## [Backdoors & Breaches](https://github.com/blackhillsinfosec/play.backdoorsandbreaches.com)

Un support pour animer une simulation de réponse à incident. Utile pour faire discuter les rôles et l’ordre des actions.

Atelier animé · préparer le scénario et les règles · GPL-3.0

## [OWASP Juice Shop](https://github.com/juice-shop/juice-shop)

Une application volontairement vulnérable pour apprendre la sécurité web par défis. À utiliser dans un laboratoire isolé.

Laboratoire séparé · installation requise · MIT

## Navigation
- [Consultant DevOps et DevSecOps Cloud.](/profil)
- [Missions d’ingénierie.](/services)
- [Réalisations.](/realisations)
- [Projets open source.](/projets)
- [Des guides pour passer à l’action.](/ressources)
- [Parlons de votre projet.](/contact)
- [Du cadrage aux livrables.](/approche)
- [Des contextes. Des contraintes réelles.](/secteurs)
- [Apprendre en prenant des décisions.](/lab)
- [Mentions légales](/mentions-legales)
- [Confidentialité](/confidentialite)
- [Conditions générales d’utilisation](/conditions-utilisation)
- [Former vos équipes. Avec de la pratique.](/formation)

[Contact](mailto:contact@adrien-murillo.com)
