AI Agents · Leçon

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.

Leçon 4 sur 415 étapes

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.

Gratuit pour commencer

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

  1. Protections contre l’injection de prompt
  2. Filtrage des sorties (Llama Guard, NeMo)
  3. Exécution en bac à sable pour les agents de code
  4. Contrôle d’accès aux outils
← Retour à AI Agents