Skip to content

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:#713f12
  • permission: "allow" au niveau supérieur autorise tout — à éviter.
  • Le Plan mode repose sur les permissions de l’agent plan : edit: deny par 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: subagent
permission:
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 @subagent reste toujours possible pour vous, même si le task est deny.

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 :

Terminal window
# Ignorer la config du projet et démarrer avec les globals seulement
OPENCODE_DISABLE_PROJECT_CONFIG=1 opencode
# Charger une config explicite alternative
OPENCODE_CONFIG=/chemin/vers/config-fixe.json opencode

Vous pouvez alors corriger le fichier, puis redémarrer sans le flag.

9. Checklist sécurité

  • bash ne contient pas "*": "allow" sur l’agent principal si vous êtes méfiant
  • git push en ask (au minimum)
  • rm *, sudo *, curl ... | bash en deny
  • Agents de lecture (code-reviewer, security-auditor) : edit: deny
  • external_directory restreint ; ~/secrets/** en deny
  • Pas de secret en clair dans opencode.json (utilisez {env:VAR})
  • Redémarrez Opencode après toute modification de config

Récapitulatif

  1. allow / ask / deny — le trio de base.
  2. La dernière règle qui correspond gagne.
  3. Chaque agent a des droits minimaux selon son rôle.
  4. Les permissions par agent priment sur les permissions globales.
  5. La sécurité commence par un opencode.json soigné et un AGENTS.md à jour.

Passez au chapitre 07 — Exercices pour mettre tout en pratique.