Limiter les outils utilisables par l’assistant

CybersécuritéBeginner
Pratiquer maintenant

Introduction

Un assistant de projet aide à lire les documents de planification. Il propose un appel d’outil : une requête structurée comme documents.read. Tool Server exécute l’action. Une proposition plausible n’est pas une autorisation d’exécution.

Vous maintenez un service de formation synthétique. Commencez par une lecture normale, puis retirez les droits inutiles d’écriture et de suppression par deux petites modifications. Les propositions sont rejouées de façon déterministe, sans réponse d’un modèle en direct. L’authentification, les décisions et les opérations documentaires sont réelles. Ce laboratoire ne teste pas la résistance aux injections de prompt.

Utilisez Policy Editor pour la configuration, Test Client pour les requêtes authentifiées et Assistant Tool Lab pour la page de relecture. Les terminaux correspondent à deux utilisateurs système d’une même instance. Policy Editor dispose volontairement de droits de maintenance ; Test Client ne peut ni modifier la politique ni utiliser sudo. Une connaissance élémentaire du terminal suffit.

Préserver la lecture et retirer l’écriture

Dans cette étape, observez une lecture normale, puis retirez le droit d’écriture de l’assistant.

Sélectionnez l’onglet Assistant Tool Lab dans l’interface du laboratoire pour commencer cette étape.

Les comptes de formation sont alice et bob. Un principal est l’identité établie par authentification. Chaque compte a le rôle assistant, qui regroupe ses droits sur les outils. Les documents sont synthétiques : alice-notes appartient à Alice, bob-notes à Bob, et Bob partage team-plan avec Alice. Seul demo-pad est jetable.

Passez à l’onglet Assistant Tool Lab. Choisissez alice, saisissez training-alice, puis cliquez sur Sign in. Gardez l’outil documents.read et le document alice-notes, puis cliquez sur Replay proposal. La trace distingue la proposition non fiable du résultat serveur. Attendez HTTP 200, le principal alice, la décision allowed et Synthetic Alice planning notes. Il s’agit d’une lecture réelle.

Assistant Tool Lab distingue une proposition rejouée du résultat autorisé du serveur

Passez à l’onglet Test Client. La commande préparée assistant envoie des requêtes HTTP avec un compte authentifié. replay passe par la route de relecture ; call atteint directement le gestionnaire. Les deux mots suivants désignent l’outil et le document. Exécutez :

Passez à l’onglet Test Client avant d’exécuter la commande suivante.

assistant replay documents.read team-plan

Attendez HTTP 200 et Synthetic shared project plan. Observez maintenant les droits excessifs uniquement sur le document jetable :

assistant replay documents.write demo-pad

Attendez HTTP 200 et "effect": "written". Le serveur a réellement modifié ce document de démonstration. Un rôle de lecture seule ne devrait pas pouvoir le faire.

Passez à l’onglet Policy Editor. cat affiche un fichier ; ce chemin absolu identifie la liste active des outils autorisés :

Passez à l’onglet Policy Editor avant d’exécuter la commande suivante.

cat /home/labex/project/tools.json

JSON utilise des noms et valeurs entre guillemets, un deux-points entre nom et valeur et des crochets pour une liste. La liste assistant contient lecture, écriture et suppression. Retirer une option du menu laisserait les appels directs ouverts ; le contrôle du gestionnaire charge cette liste à chaque requête.

Remplacez le fichier par cette politique intermédiaire. cat > path écrit le texte au lieu de l’afficher. Le délimiteur entre guillemets EOF commence un bloc de texte littéral ; le EOF final doit être seul sur sa ligne. Tout le petit fichier est remplacé : répéter l’opération corrige une faute.

cat > /home/labex/project/tools.json <<'EOF'
{
  "assistant": ["documents.read", "documents.delete"]
}
EOF

Revenez à l’onglet Test Client et répétez la proposition d’écriture :

Passez à l’onglet Test Client avant d’exécuter la commande suivante.

assistant replay documents.write demo-pad

Attendez HTTP 403 et tool_denied. Un 403 signifie que le service a reçu puis refusé la requête ; une erreur de connexion signifie qu’il n’a pas atteint la décision. La CLI affiche les refus attendus sans fermer le shell. Si policy_error apparaît, passez à l’onglet Policy Editor et répétez l’édition JSON complète, puis revenez à l’onglet Test Client pour réessayer les requêtes. Aucun redémarrage n’est nécessaire.

assistant call documents.read alice-notes

La lecture doit toujours renvoyer HTTP 200. Le contrôle teste le refus d’écriture et les lectures normales des deux comptes authentifiés ; aucun résultat copié n’est exigé.

Fermer la voie de suppression directe

Dans cette étape, terminez le rôle de lecture seule et testez le gestionnaire direct ainsi que la relecture.

Sélectionnez l’onglet Policy Editor dans l’interface du laboratoire pour commencer cette étape.

La suppression est une opération distincte. Bloquer l’écriture ne bloque pas automatiquement la suppression. Passez à l’onglet Policy Editor et remplacez la liste par la seule opération nécessaire, avec la même technique d’édition complète :

Passez à l’onglet Policy Editor avant d’exécuter la commande suivante.

cat > /home/labex/project/tools.json <<'EOF'
{
  "assistant": ["documents.read"]
}
EOF

Passez à l’onglet Test Client et envoyez une suppression directe sur le document jetable :

Passez à l’onglet Test Client avant d’exécuter la commande suivante.

assistant call documents.delete demo-pad

Attendez HTTP 403 et tool_denied. Comme call contourne la page de relecture, cela confirme que l’interface visible n’est pas la frontière d’application des droits. Testez aussi l’écriture directe :

assistant call documents.write demo-pad

Attendez le même refus. Vérifiez qu’Alice peut toujours lire un document légitimement partagé :

assistant call documents.read team-plan

Attendez HTTP 200 et Synthetic shared project plan. Passez à l’onglet Assistant Tool Lab et gardez la session d’Alice, choisissez documents.delete, saisissez demo-pad, puis cliquez sur Replay proposal. Le serveur doit également répondre tool_denied.

Assistant Tool Lab montre le refus par le serveur d’un outil de suppression inutile

Une consigne telle que « lis seulement » ne remplace pas ce contrôle. Le serveur doit décider indépendamment de la proposition. Désactiver tous les outils casserait aussi l’utilité de l’assistant. Si la lecture est refusée, vérifiez l’orthographe exacte de documents.read dans JSON. Le contrôle appelle le véritable contrôle des gestionnaires d’écriture et de suppression sur des documents jetables en mémoire et vérifie les lectures réelles permises ; il ne supprime jamais les documents de l’apprenant.

L’outil de lecture peut encore demander l’objet privé d’un autre utilisateur. Le prochain laboratoire ajoute cette frontière documentaire.

Résumé

Vous avez préservé les lectures normales et retiré écriture et suppression. Les propositions rejouées et les appels directs passent désormais par le même véritable contrôle serveur. Le droit d’utiliser un outil est une seule frontière : une lecture autorisée exige encore une décision par document.