# Capability Lease (habilitation de capacité)

*Une autorisation étroite pour une exécution, avec une expiration et des budgets. Les habilitations filles ne peuvent être que plus étroites.*

> **Une Capability Lease** est une autorisation portant sur des données précises et des opérations précises, avec une expiration explicite et des budgets. Elle est délivrée à **une seule exécution** et c’est le seul moyen pour une exécution de toucher au NAS. Une habilitation fille ne peut qu’être plus étroite que sa mère.

**AN-04** · Niveau de conformité : L1 Authority · Groupe : Autorité

## Le problème

Le RBAC et les ACL supposent des utilisateurs stables avec des permissions larges et durables. Un agent a besoin de permissions taillées pour la tâche, qui s’arrêtent quand la tâche se termine. Pire, des identifiants de longue durée se trouvent souvent à portée de l’agent : lors de l’incident d’avril 2026, le jeton se trouvait dans un fichier sans rapport, créé pour gérer des domaines mais capable de tout faire.

## Fonctionnement

- **Qui détient la clé.** Les identifiants de longue durée restent chez l’orchestrateur ou le propriétaire ; une exécution reçoit une habilitation, pas une clé. Le modèle ne voit jamais un identifiant de longue durée.
- **Une habilitation est un jeton d’accès.** Ses `authorization_details` ([RFC 9396](https://www.rfc-editor.org/rfc/rfc9396)) décrivent les chemins, les actions et la branche ; elle est demandée par le propriétaire ou l’orchestrateur par [échange de jetons (RFC 8693)](https://www.rfc-editor.org/rfc/rfc8693), la revendication `act` enregistre la chaîne de délégation, et le NAS conserve un état pour la révocation et le comptage des budgets.
- **Seulement restreindre.** Une habilitation fille doit être un sous-ensemble de sa mère, ce que le NAS vérifie au moment de l’émission.
- **Budgets.** Octets lus et écrits, nombres de requêtes et, facultativement, octets sortants et plafond de dépense, comptés à la passerelle. Ils servent de **disjoncteur**, pas de facturation exacte.
- **Enveloppe de politiques.** Le propriétaire fixe une plage à l’avance ; les habilitations à l’intérieur sont émises automatiquement et tout ce qui est en dehors passe par une [Human Gate](https://agentnas.com/fr/concepts/human-gate/). Un accès de longue durée s’exprime par une enveloppe, pas par une habilitation de longue durée.
- **B et C sont déclarés explicitement.** Une habilitation indique la sensibilité la plus élevée qu’elle peut lire et si elle peut écrire dans des arbres protégés ou envoyer des données vers l’extérieur. Ce sont des entrées pour les [Trust Labels](https://agentnas.com/fr/concepts/trust-labels/).
- **Révocation.** Un TTL court (4 heures par défaut, 24 au plus) plus une révocation immédiate, qui se propage aux habilitations filles.
- **`purpose` est enregistré, pas imposé :** un texte libre ne peut pas être vérifié par une machine.

## Commencer petit

- Écrivez une commande `nas lease create` : pour chaque rôle, émettez un jeton avec un préfixe de chemin, des actions et un TTL, remettez-le au sandbox dans une variable d’environnement, et faites imposer préfixe et actions par le NAS.
- Cela suffit déjà à arrêter la première moitié de ce genre d’incident : le jeton ne peut rien faire en dehors de l’habilitation.
- Les budgets, les chaînes de délégation et les enveloppes de politiques peuvent venir plus tard.

## Esquisse d’interface

À titre d’illustration seulement. Les noms de champs peuvent changer avant la spécification v0.3.

*lease.json*

```json
{
  "lease_id": "lse_7Qk3",
  "run": "run_91ab",
  "principal": "agt_cleo",
  "on_behalf_of": "usr_wei",
  "parent": null,
  "purpose": "Draft the Q4 release notes",
  "paths": ["/shared/launch/**", "/agents/cleo/workspace/**"],
  "actions": ["read", "write", "propose"],
  "branch": "cleo/run_91ab",
  "sensitivity_max": "private",
  "egress": false,
  "requires_gate": ["merge", "delete", "share"],
  "budgets": { "bytes_read": 200000000, "bytes_written": 5000000, "requests": 5000 },
  "expires_at": "2026-11-12T16:00:00Z"
}
```

## Ce que demande la spécification

- Une habilitation DOIT avoir une expiration et NE DOIT PAS être renouvelée au-delà du TTL maximal ; un renouvellement exige une nouvelle émission.
- Une habilitation fille DOIT être un sous-ensemble de sa mère, et le NAS DOIT le vérifier à l’émission.
- La révocation d’une habilitation DOIT se propager à toutes ses habilitations filles.
- Un accès de longue durée DOIT s’exprimer par une enveloppe de politiques et NE DOIT PAS devenir une habilitation de longue durée.
- Une habilitation DOIT déclarer son plafond de sensibilité et si elle autorise la sortie de données et les écritures protégées.
- Les identifiants de longue durée NE DOIVENT PAS être exposés à un modèle ni à une exécution.

## Ce qui est emprunté, et ce qui est nouveau

Tout ce qui précède, ce sont des briques établies. **Ce qui est nouveau :** prendre la **forme d’une exécution et d’une tâche** comme unité et réunir la branche, les budgets et les propriétés de la Rule of Two dans une seule habilitation. Les jetons et les modèles de capacités ne sont pas nouveaux.

- [OAuth Token Exchange (RFC 8693)](https://www.rfc-editor.org/rfc/rfc8693)
- [OAuth Rich Authorization Requests (RFC 9396)](https://www.rfc-editor.org/rfc/rfc9396)
- [Biscuit](https://github.com/biscuit-auth/biscuit)
- [UCAN](https://ucan.xyz/specification/)
- [IETF attenuating agent tokens draft](https://datatracker.ietf.org/doc/draft-niyikiza-oauth-attenuating-agent-tokens/)

## Limites assumées

- Elle ne couvre que les opérations dans le NAS et ne peut pas régir ce qu’un agent fait ailleurs.
- `purpose` ne peut pas être imposé, et les budgets sont approximatifs.
- Une habilitation ne peut pas empêcher le mauvais usage **dans le cadre d’une autorité légitime** ; c’est le travail des branches et des validations.

## Questions ouvertes

- Comment faire passer `purpose` d’un texte libre à une intention structurée qu’une machine peut vérifier ?
- Comment comptabiliser les budgets en cas de fédération ?

## Questions

### En quoi une habilitation diffère-t-elle d’une clé d’API ?

Une clé d’API est un secret partagé de longue durée, et son détenteur peut faire tout ce que le compte peut faire. Une habilitation est liée à une exécution, limite les chemins, les actions et la durée, et ne peut qu’être restreinte ; elle cesse de fonctionner à l’expiration et peut être révoquée à tout moment.

### Pourquoi ne pas simplement utiliser OAuth ?

C’est OAuth : une habilitation est un jeton d’accès, demandé par échange de jetons (RFC 8693) et décrit avec des Rich Authorization Requests (RFC 9396). Agent NAS n’ajoute que ce qu’OAuth ne spécifie pas : l’exécution comme unité, et la réunion de la branche, des budgets et des propriétés de la Rule of Two dans une même autorisation.

### Que devient une exécution quand son habilitation expire ?

Le montage passe en lecture seule puis est démonté ; les nouvelles requêtes sont refusées et enregistrées. La branche est conservée jusqu’à l’expiration de son propre TTL, de sorte que le travail terminé n’est pas perdu et peut encore être fusionné après relecture.

## Concepts liés

- [Human Gate (validation humaine)](https://agentnas.com/fr/concepts/human-gate/): N’apparaît qu’avant les actions irréversibles, tournées vers l’extérieur ou qui élèvent les privilèges, et montre le vrai diff.
- [Trust Labels (étiquettes de confiance)](https://agentnas.com/fr/concepts/trust-labels/): Deux petites étiquettes plus la contamination de session appliquent la Rule of Two.
- [Flight Recorder (enregistreur de vol)](https://agentnas.com/fr/concepts/flight-recorder/): Un enregistrement par exécution, chaîné par hachage, qui inclut ce que l’exécution a lu.

---

URL canonique : https://agentnas.com/fr/concepts/capability-lease/
Mis à jour le: 2026-11-11 · Brouillon de spécification v0.2 · CC BY 4.0
