Contrôle d’accès aux outils
Les outils doivent vérifier que l’utilisateur (et pas seulement l’agent) est autorisé : les agents ne sont pas des principaux.
Contrôle d’accès aux outils est une leçon AI Agents gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage AI Agents, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours AI Agents comprend 4 leçons au total.
Certaines parties de cette leçon n'ont pas encore été traduites et s'affichent en anglais.
Les outils ne sont pas les principaux
Le modèle « appelle un outil », mais c’est votre code qui exécute réellement l’ACTION. L’utilisateur — et non l’agent — est le principal dont les permissions comptent.
Autorisez l’accès en fonction de l’identité de l’USER, jamais simplement parce que « l’agent en a décidé ainsi ».
Authorise at the Tool Boundary
def refund_order(order_id, *, user):
order = db.get_order(order_id)
if order.customer_id != user.id and not user.is_staff:
raise PermissionError(f'User {user.id} cannot refund order {order_id}')
return stripe.refund(order.payment_id)Transmettre le contexte utilisateur
Transmettez l’objet utilisateur à chaque appel d’outil :
def dispatch(tool_call, user):
args = json.loads(tool_call.function.arguments)
fn = TOOLS[tool_call.function.name]
return fn(**args, user=user)Permissions par outil
Définissez les outils que chaque rôle peut utiliser :
ROLE_TOOLS = {
'customer': ['search_orders', 'open_ticket'],
'support': ['search_orders', 'refund_order', 'cancel_order'],
'admin': ['*']
}
visible_tools = [t for t in ALL_TOOLS if t.name in ROLE_TOOLS[user.role] or 'admin' in ROLE_TOOLS[user.role]]Définir le périmètre de l’accès aux données
Les outils qui interrogent la base de données doivent automatiquement définir le périmètre selon l’utilisateur :
def search_orders(query, user):
# NEVER let the model bypass this WHERE clause
return db.query('SELECT * FROM orders WHERE customer_id = %s AND ...', (user.id,))Journaliser chaque appel d’outil
Journalisez : qui, quoi, quand, avec quels arguments et quel résultat. C’est votre piste d’analyse lorsque quelque chose se passe mal :
audit_log({
'user_id': user.id,
'tool': tool_name,
'args': args,
'result_status': result.status,
'timestamp': now()
})Confirmer les actions destructrices
Même pour les utilisateurs autorisés, vérifiez une seconde fois les opérations destructrices :
def delete_account(user_id, confirmed=False, user=None):
if not confirmed:
return {'requires_confirmation': True, 'msg': 'Confirm deletion of account.'}
db.execute('DELETE ...', (user_id,))Outils limités par OAuth / jeton
Pour les agents qui agissent au nom d’un utilisateur dans des services externes, limitez strictement la portée des jetons OAuth :
# Token only has gmail.send scope, not gmail.read
send_email = build_with_token(user_token_scoped_send)Limites des comptes de service
Le compte de service propre à l’agent doit disposer du minimum de permissions :
- Utilisateur de base de données en lecture seule pour les outils d’analyse
- Buckets S3 propres à chaque client
- Réseaux isolés par VPC
Rate Limits Per Tool
def ratelimit(key, per_user_per_day=10):
counts = {}
def decorator(func):
def wrapper(user_id, *args, **kwargs):
counts.setdefault(user_id, 0)
if counts[user_id] >= per_user_per_day:
print(f'{key}: user {user_id} rate limited')
return None
counts[user_id] += 1
return func(user_id, *args, **kwargs)
return wrapper
return decorator
@ratelimit(key='tool:refund', per_user_per_day=2)
def refund_order(user_id, order_id):
print(f'refunding order {order_id} for user {user_id}')
return True
for i in range(3):
refund_order('user1', f'order{i}')
Interface de permissions visible par l’utilisateur
Montrez à l’utilisateur ce que l’agent peut faire en son nom. Permettez-lui de révoquer les permissions outil par outil. C’est essentiel pour instaurer la confiance.
Réauthentification pour les actions à forts enjeux
Faites en sorte que les outils sensibles exigent une authentification récente (dernière connexion < 5 minutes) :
if tool.is_sensitive and user.last_auth_age_seconds > 300:
raise StaleAuthError('Please re-authenticate to perform this action.')Tester l’autorisation comme du code
Écrivez des tests qui vérifient que « l’utilisateur A ne peut pas rembourser la commande de l’utilisateur B » — ne supposez jamais que les contrôles d’accès fonctionnent. Ils constituent la première source de failles de sécurité des agents.
Principe d’autorisation
Les permissions de qui sont-elles vérifiées lorsque l’agent appelle un outil ?
Récapitulatif
L’utilisateur est le principal. Transmettez l’identité de l’utilisateur à chaque outil. Définissez le périmètre des données selon l’utilisateur. Journalisez chaque appel. Confirmez les opérations destructrices. Testez l’autorisation comme vous testez le code.
Apprends AI Agents avec un tuteur IA — gratuit
Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.
- Cours
- 60
- Leçons
- 239
Questions Fréquemment Posées
La leçon « Contrôle d’accès aux outils » est-elle gratuite ?
Oui — le texte complet de « Contrôle d’accès aux outils » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours AI Agents, passe à CoddyKit PRO. Le cours AI Agents comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Contrôle d’accès aux outils » ?
Les outils doivent vérifier que l’utilisateur (et pas seulement l’agent) est autorisé : les agents ne sont pas des principaux. Tu pratiques AI Agents avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer AI Agents ?
Aucune expérience préalable n'est requise. AI Agents sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.
Combien de temps prend la leçon « Contrôle d’accès aux outils » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon AI Agents ?
Oui. Chaque leçon AI Agents inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Protections contre l’injection de prompt
- Filtrage des sorties (Llama Guard, NeMo)
- Exécution en bac à sable pour les agents de code
- Contrôle d’accès aux outils