Контроль доступа к инструментам
Инструменты должны проверять, что авторизован именно пользователь, а не только агент: агенты не являются субъектами доступа
«Контроль доступа к инструментам» — бесплатный урок AI Agents на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AI Agents, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AI Agents содержит 4 уроков всего.
Части этого урока еще не переведены и отображаются на английском.
Инструменты не являются субъектами полномочий
Модель «вызывает инструмент», но фактическое ACTION выполняется вашим кодом. Пользователь, а не агент, является субъектом, чьи разрешения имеют значение.
Авторизуйте действия на основе личности USER, а не просто потому, что «агент так решил».
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)Передавайте контекст пользователя
Передавайте объект пользователя в каждый вызов инструмента:
def dispatch(tool_call, user):
args = json.loads(tool_call.function.arguments)
fn = TOOLS[tool_call.function.name]
return fn(**args, user=user)Разрешения для каждого инструмента
Определите, какие инструменты может использовать каждая роль:
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]]Ограничение доступа к данным
Инструменты, выполняющие запросы к базе данных, должны автоматически ограничивать область данных по пользователю:
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,))Аудитируйте каждый вызов инструмента
Записывайте в журнал: кто, что и когда сделал, с какими аргументами и каким результатом. Это ваша криминалистическая цепочка событий, если что-то пойдёт не так:
audit_log({
'user_id': user.id,
'tool': tool_name,
'args': args,
'result_status': result.status,
'timestamp': now()
})Подтверждайте разрушительные действия
Даже для авторизованных пользователей дополнительно проверяйте разрушительные операции:
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,))Инструменты с ограниченной областью OAuth-токена
Если агент действует от имени пользователя во внешних сервисах, максимально сужайте область действия OAuth-токенов:
# Token only has gmail.send scope, not gmail.read
send_email = build_with_token(user_token_scoped_send)Границы сервисной учётной записи
Собственная сервисная учётная запись агента должна иметь минимальный набор разрешений:
- Пользователь базы данных только для чтения для инструментов аналитики
- Отдельные корзины S3 для каждого клиента
- Сети, изолированные с помощью 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}')
Понятный пользователю интерфейс разрешений
Показывайте пользователю, что агент может делать от его имени. Позвольте ему отзывать разрешения для отдельных инструментов. Это критически важно для доверия.
Повторная аутентификация для важных операций
Для чувствительных инструментов требуйте недавнюю аутентификацию (последний вход выполнен менее 5 минут назад):
if tool.is_sensitive and user.last_auth_age_seconds > 300:
raise StaleAuthError('Please re-authenticate to perform this action.')Проверяйте авторизацию как код
Пишите тесты, которые проверяют, что «пользователь A не может вернуть деньги за заказ пользователя B» — никогда не предполагайте, что средства контроля доступа работают. Именно они являются источником № 1 ошибок безопасности агентов.
Принцип авторизации
Чьи разрешения проверяются, когда агент вызывает инструмент?
Итоги
Пользователь является субъектом полномочий. Передавайте личность пользователя в каждый инструмент. Ограничивайте область данных по пользователю. Аудитируйте каждый вызов. Подтверждайте разрушительные операции. Проверяйте авторизацию так же, как проверяете код.
Часто задаваемые вопросы
Урок «Контроль доступа к инструментам» бесплатный?
Да — полный текст урока «Контроль доступа к инструментам» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AI Agents, подпишись на CoddyKit PRO. Курс AI Agents содержит 4 уроков всего.
Чему я научусь в уроке «Контроль доступа к инструментам»?
Инструменты должны проверять, что авторизован именно пользователь, а не только агент: агенты не являются субъектами доступа Ты практикуешь AI Agents с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать AI Agents?
Предыдущий опыт не требуется. AI Agents на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Контроль доступа к инструментам»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке AI Agents?
Да. Каждый урок AI Agents включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Защита от внедрения промптов
- Фильтрация вывода (Llama Guard, NeMo)
- Изолированное выполнение кода для агентов
- Контроль доступа к инструментам