Control de acceso a las herramientas
Las herramientas deben comprobar que el usuario (no solo el agente) está autorizado: los agentes no son sujetos principales.
Control de acceso a las herramientas es una lección gratuita de AI Agents en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de AI Agents, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de AI Agents incluye 4 lecciones en total.
Partes de esta lección aún no han sido traducidas y se muestran en inglés.
Las herramientas no son sujetos
El modelo «llama a una herramienta», pero la ACCIÓN real la realiza su código. El usuario —no el agente— es el sujeto cuyos permisos importan.
Autorice según la identidad del USUARIO, nunca simplemente porque «el agente lo decidió».
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)Transmita el contexto del usuario
Pase el objeto del usuario a cada llamada de herramienta:
def dispatch(tool_call, user):
args = json.loads(tool_call.function.arguments)
fn = TOOLS[tool_call.function.name]
return fn(**args, user=user)Permisos por herramienta
Defina qué herramientas puede usar cada rol:
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]]Delimitar el acceso a los datos
Las herramientas que consultan la base de datos deben delimitar automáticamente las consultas según el usuario:
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,))Audite cada llamada de herramienta
Registre: quién, qué, cuándo, con qué argumentos y el resultado. Este es su rastro forense cuando algo sale mal:
audit_log({
'user_id': user.id,
'tool': tool_name,
'args': args,
'result_status': result.status,
'timestamp': now()
})Confirme las acciones destructivas
Incluso para usuarios autorizados, compruebe dos veces las operaciones destructivas:
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,))Herramientas con OAuth y tokens delimitados
Para los agentes que actúan en nombre de un usuario en servicios externos, delimite estrictamente el alcance de los tokens de OAuth:
# Token only has gmail.send scope, not gmail.read
send_email = build_with_token(user_token_scoped_send)Límites de las cuentas de servicio
La propia cuenta de servicio del agente debe tener los permisos mínimos:
- Usuario de base de datos de solo lectura para las herramientas de análisis
- Buckets de S3 por cliente
- Redes aisladas mediante 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}')
Interfaz de permisos visible para el usuario
Muestre al usuario qué puede hacer el agente en su nombre. Permítale revocar los permisos de cada herramienta. Es fundamental para generar confianza.
Reautenticación para operaciones de alto riesgo
Haga que las herramientas sensibles requieran una autenticación reciente (último inicio de sesión < 5 minutos):
if tool.is_sensitive and user.last_auth_age_seconds > 300:
raise StaleAuthError('Please re-authenticate to perform this action.')Pruebe la autorización como el código
Escriba pruebas que verifiquen que «el usuario A no puede reembolsar el pedido del usuario B»; nunca dé por hecho que los controles de acceso funcionan. Son la principal fuente de errores de seguridad de los agentes.
Principio de autorización
¿Los permisos de quién se comprueban cuando el agente llama a una herramienta?
Repaso
El usuario es el sujeto. Pase la identidad del usuario a cada herramienta. Delimite los datos según el usuario. Audite cada llamada. Confirme las operaciones destructivas. Pruebe la autorización igual que prueba el código.
Preguntas frecuentes
¿La lección «Control de acceso a las herramientas» es gratis?
Sí — el texto completo de «Control de acceso a las herramientas» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de AI Agents, actualiza a CoddyKit PRO. El curso de AI Agents incluye 4 lecciones en total.
¿Qué aprenderé en «Control de acceso a las herramientas»?
Las herramientas deben comprobar que el usuario (no solo el agente) está autorizado: los agentes no son sujetos principales. Practicas AI Agents con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar AI Agents?
No se requiere experiencia previa. AI Agents en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «Control de acceso a las herramientas»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de AI Agents?
Sí. Cada lección de AI Agents incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Defensas contra la inyección de prompts
- Filtrado de salidas (Llama Guard, NeMo)
- Ejecución aislada para agentes de código
- Control de acceso a las herramientas