Перейти к основному содержимому

Идентичность агента — это инфраструктурный примитив, а не логин

Автономным агентам нужны делегированные, отзываемые машинные идентичности с собственными ключами, скоупами и журналами аудита — а не заимствованные пользовательские сессии.

Макросъёмка печатной платы с дорожками, паяными соединениями и маркировкой компонентов при малой глубине резкости.

Допущение о сессии ломается

Большинство агентных систем построены на неявном допущении, унаследованном от веб-автоматизации: что агент — это ускоренный браузер. Он несёт пользовательскую сессию, предъявляет те же cookies и обращается к тем же эндпоинтам. Это допущение держится, пока агент только читает. Оно рушится в тот момент, когда агент пытается совершить транзакцию.

OAuth не отвечает на этот вопрос. Access token описывает предоставление прав от владельца ресурса клиентскому приложению. Он фиксирует, на что согласился человек, а не то, какой автономный процесс сейчас пользуется этим предоставлением. Когда у одного пользователя три агента работают против одного и того же аккаунта, токен у всех одинаковый. Нет способа отозвать одного агента, не отозвав остальных, и нет способа постфактум приписать конкретную транзакцию конкретному действующему лицу.

Пробел здесь не в аутентификации. Пробел — в идентичности.

Что нужно делегированной идентичности

Делегированная машинная идентичность — это учётные данные, выпущенные control plane принципала конкретному агенту и несущие собственный жизненный цикл. У неё есть три свойства, которых нет у пользовательской сессии.

Стабильный идентификатор, отдельный от принципала

Агенту нужен собственный ключевой материал и собственный график ротации. Принципал — человек или организация, от чьего имени действует агент, — остаётся корнем полномочий, но агент является отдельным субъектом с отдельным публичным ключом. Именно это разделение делает возможной атрибуцию: подписанный запрос называет агента, и ключ агента подтверждает это утверждение, не раскрывая учётные данные принципала.

Ротация должна быть независимой. Если ключ агента скомпрометирован, его ротация не должна заставлять человека заново аутентифицироваться везде. И наоборот, если учётные данные принципала ротируются, делегированное предоставление агента должно выживать через путь перевыпуска, а не через смену пароля.

Circuit board macro

Явное сужение скоупа

Делегированное предоставление должно быть узким одновременно по трём осям:

  • По контрагенту. Агент, уполномоченный покупать у одного мерчанта, не уполномочен покупать у другого. Скоупы должны называть relying party, а не обобщённую поверхность API.
  • По классу транзакции. Чтение, резервирование, фиксация и возврат — это разные полномочия. Большинству агентов первые два нужны гораздо чаще, чем третье.
  • По временному окну. Предоставление, выпущенное для сценария оформления заказа, должно истекать, когда сценарий завершается, а не когда истекает session cookie. Короткоживущие предоставления с явным продлением проще осмыслить, чем долгоживущие токены с широкими скоупами.

Конкретный механизм для этого — подписанный capability token: структурированные учётные данные, которые агент предъявляет контрагенту и которые содержат идентификатор агента, разрешённого контрагента, разрешённый класс действий, окно действия и цепочку подписей обратно к принципалу. Контрагент проверяет цепочку и применяет скоуп локально. Control plane принципала не обязан быть онлайн, чтобы транзакция прошла, но остаётся единственной стороной, способной выпустить новое предоставление.

Путь отзыва, не затрагивающий человека

Отзыв — свойство, которое чаще всего отсутствует. Если единственный способ остановить агента — сменить пароль аккаунта, то агент на самом деле не делегирован — он выдаёт себя за другого. Отзыв должен быть полноценной операцией: пометить идентификатор агента как отозванный в control plane, опубликовать это состояние и позволить контрагентам отклонять предъявление отозванных учётных данных. Учётные данные человека при этом не задействованы.

Правило проектирования: идентичность как ресурс control plane

Практическое следствие в том, что идентичность агента относится к той же категории, что учётные данные базы данных или сервисный аккаунт. Она выпускается, ограничивается скоупами, лимитируется по частоте, отзывается и логируется инфраструктурой, а не формой входа.

Это значит, что control plane нужен реестр с определённым жизненным циклом для каждого агента:

agent_id        stable, opaque, never reused
principal_id    the authority root
key_material    public key, rotation schedule
scopes          [{counterparty, action_class, window}]
state           active | suspended | revoked
rate_limits     per counterparty, per action_class
audit_log       append-only, every presentation recorded

Server rack closeup

Каждое использование идентичности пишется в журнал аудита: какой агент, какой контрагент, какой класс действий, какое предоставление и каков результат. Это та запись, которая делает спорную транзакцию разрешимой. Без неё агент, действующий от имени принципала, неотличим от принципала, действующего напрямую, и подотчётность снова схлопывается к человеку.

Проектируйте под отказ

Контрагенты будут фингерпринтить автономный трафик и лимитировать его по частоте. Некоторые будут отказывать outright. Это нормальное рабочее условие, а не путь ошибки. Агентная архитектура, которая трактует отказ как исключение, подлежащее повтору, будет генерировать эскалирующий трафик против контрагента, который уже принял решение. Правильное поведение — зафиксировать отказ, показать его принципалу и остановиться.

Ограничение частоты принадлежит и стороне агента по эту сторону границы. Делегированная идентичность с потолком на контрагента не даёт агенту исчерпать квоту, которая нужна и принципалу. Это также даёт сигнал: устойчивое давление лимитов на одного контрагента — свидетельство того, что скоуп неверен, а не того, что агенту нужно больше мощности.

Компромисс

Эта схема дороже, чем переиспользование сессии. Она требует реестра, механизма подписи, графика ротации, канала отзыва и конвейера аудита. Она добавляет задержку к каждой транзакции, потому что контрагент должен проверить цепочку учётных данных, а не просто принять cookie. Она требует координации с контрагентами, которые могут вообще пока не принимать делегированные учётные данные — и тогда у агента нет соответствующего требованиям пути, и он должен откатываться к подтверждению с участием человека.

Эта цена и есть суть. Альтернатива — агент, действующий с полными полномочиями человека, которого нельзя атрибутировать, нельзя сузить и нельзя остановить, не сломав доступ человека. Как только агенты начинают совершать транзакции с третьими сторонами, единица подотчётности уже сместилась. Инфраструктура должна последовать за ней.

К чему это приводит

Идентичность агента — не функция аутентификации, прикрученная к существующему продукту. Это примитив, определяющий, чем агенту позволено быть. Команды, которые относятся к ней как к логину, будут снова и снова обнаруживать, что контрагенты считают их агентов неизвестным классом клиентов, и снова и снова не будут знать, что ответить на вопрос, кто действует и по чьим полномочиям.

Команды, которые относятся к ней как к инфраструктуре — выпускаемой, ограничиваемой скоупами, лимитируемой по частоте, отзываемой, логируемой, — будут знать ответ. У них также будет журнал аудита, чтобы это доказать.

ПоделитьсяXLinkedInПостоянная ссылка5 мин чтения

Связанное чтение

На какие вопросы это отвечает

Why can't an agent just reuse the user's OAuth session?

An OAuth token records what a human consented to, not which autonomous process is acting. If several agents run under one token, they cannot be attributed, scoped or revoked independently. Delegated identity separates the agent from the principal.

What does a delegated agent identity need to include?

A stable agent identifier distinct from the principal, its own key material and rotation schedule, scopes narrowed per counterparty, per action class and per time window, and a revocation path that does not require the human to change a password.

How should an agent handle a counterparty refusing its traffic?

Treat refusal as a normal response. Record it, surface it to the principal and stop. Retrying against a counterparty that has already made a policy decision escalates traffic without changing the outcome.

What is the main trade-off of delegated agent identity?

It adds a registry, signing, rotation, revocation and audit infrastructure, plus validation latency at every counterparty. Some counterparties may not accept delegated credentials at all, forcing a human-in-the-loop fallback.