06 — Sécurité
06 — Sécurité et permissions
Objectif : donner de la puissance à vos ingénieurs IA sans perdre le contrôle. Apprendre à configurer les permissions globalement, par agent, et par commande.
Un agent IA est un collaborateur enthousiaste mais inconscient des risques. C’est vous qui posez les garde-fous.
1. Les trois niveaux de permission
Chaque action peut être :
| Valeur | Comportement |
|---|---|
allow |
Autorisée sans demande |
ask |
Demande votre validation à chaque fois |
deny |
Interdite, l’outil est désactivé |
2. Les clés de permission
| Clé | Outils couverts |
|---|---|
read / edit / glob / grep / list |
Opérations fichiers |
bash |
Commandes shell |
task |
Invocation de subagents |
external_directory |
Lecture/écriture hors du projet |
webfetch / websearch |
Navigation web |
skill |
Chargement de skills |
lsp |
Serveurs LSP |
3. Configurer globalement
{ "permission": { "edit": "ask", "bash": { "*": "ask", "git status*": "allow", "git log*": "allow", "npm test*": "allow", "npm run typecheck*": "allow", "git push*": "ask", "rm *": "deny" } }}Règle d’or : la dernière règle qui correspond gagne. Placez le "*" en premier, les cas particuliers ensuite.
flowchart LR A[Commande bash] --> B{Règle correspondante ?} B -->|npm test *| C[allow<br/>exécution libre] B -->|git push *| D[ask<br/>validation demandée] B -->|rm *| E[deny<br/>bloqué] B -->|* (par défaut)| F[ask<br/>validation demandée] style C fill:#f0fdf4,stroke:#16a34a,color:#14532d style D fill:#fef9c3,stroke:#ca8a04,color:#713f12 style E fill:#fef2f2,stroke:#dc2626,color:#7f1d1d style F fill:#fef9c3,stroke:#ca8a04,color:#713f12permission: "allow"au niveau supérieur autorise tout — à éviter.- Le Plan mode repose sur les permissions de l’agent
plan:edit: denypar défaut.
4. Restreindre par agent
Un agent de revue ne doit jamais modifier le code :
---description: Reviews code for quality and best practices.mode: subagentpermission: edit: deny bash: "*": ask "git diff*": allow "git log*": allow webfetch: deny---Un agent de build peut écrire mais ne doit pas pousser :
{ "agent": { "build": { "permission": { "bash": { "*": "allow", "git push": "ask" } } } }}5. Contrôler l’accès aux subagents
permission.task contrôle quels subagents un agent peut invoquer :
{ "agent": { "orchestrator": { "mode": "primary", "permission": { "task": { "*": "deny", "frontend-engineer": "allow", "backend-engineer": "allow", "code-reviewer": "ask" } } } }}L’invocation manuelle
@subagentreste toujours possible pour vous, même si le task estdeny.
6. Protéger les accès hors projet
{ "permission": { "external_directory": { "*": "ask", "~/projects/partage/**": "allow", "~/secrets/**": "deny" } }}7. Contrôler les skills
{ "permission": { "skill": { "*": "allow", "internal-*": "deny", "experimental-*": "ask" } }}8. Et si la config casse le démarrage ?
Opencode refuse de démarrer avec une config invalide. Deux échappatoires :
# Ignorer la config du projet et démarrer avec les globals seulementOPENCODE_DISABLE_PROJECT_CONFIG=1 opencode
# Charger une config explicite alternativeOPENCODE_CONFIG=/chemin/vers/config-fixe.json opencodeVous pouvez alors corriger le fichier, puis redémarrer sans le flag.
9. Checklist sécurité
-
bashne contient pas"*": "allow"sur l’agent principal si vous êtes méfiant -
git pushenask(au minimum) -
rm *,sudo *,curl ... | bashendeny - Agents de lecture (
code-reviewer,security-auditor) :edit: deny -
external_directoryrestreint ;~/secrets/**endeny - Pas de secret en clair dans
opencode.json(utilisez{env:VAR}) - Redémarrez Opencode après toute modification de config
Récapitulatif
allow/ask/deny— le trio de base.- La dernière règle qui correspond gagne.
- Chaque agent a des droits minimaux selon son rôle.
- Les permissions par agent priment sur les permissions globales.
- La sécurité commence par un
opencode.jsonsoigné et unAGENTS.mdà jour.
Passez au chapitre 07 — Exercices pour mettre tout en pratique.