Реализация обмена токенами от имени пользователя для мультитенантных агентов с Amazon Bedrock AgentCore Gateway
Amazon/AWS
Okta
Auth0
Keycloak
Microsoft
Amazon Bedrock представил решение для сквозной передачи идентификации в мультитенантных ИИ-агентах с использованием протокола OAuth 2.0 Token Exchange (RFC 8693). Архитектура позволяет агенту обменивать входящий токен пользователя на новый токен, привязанный к конкретному арендатору и downstream-сервису, без необходимости реализовывать логику обмена в самом агенте. В статье подробно описывается эталонная реализация TravelBot с использованием Okta, Amazon API Gateway и AWS Lambda.
При развёртывании генеративных ИИ-агентов в мультитенантной архитектуре возникает проблема идентификации: когда агент вызывает downstream API от имени пользователя, чья личность должна передаваться? Передача токена пользователя без изменений создаёт проблему «конфузного заместителя» (confused deputy), а использование сервисного аккаунта агента разрушает аудит. Протокол OAuth 2.0 Token Exchange (RFC 8693) решает эту проблему, и Amazon Bedrock AgentCore Identity поддерживает его нативно. В статье описана эталонная реализация TravelBot — мультитенантный ассистент бронирования для двух арендаторов (Acme и Globex). Компоненты архитектуры включают: сервер авторизации-провайдера (выдаёт входящий JWT), Amazon Bedrock AgentCore Gateway (валидирует токен и оркестрирует обмен), AgentCore Identity (выполняет RFC 8693 обмен), поарендаторные серверы авторизации (выпускают OBO-токены), Amazon API Gateway HTTP API с JWT-авторизатором на каждого арендатора, и AWS Lambda с DynamoDB для бизнес-логики. Шаг за шагом: пользователь аутентифицируется через OIDC, агент передаёт входящий JWT в Gateway, Gateway валидирует подпись и аудиторию, выбирает credential provider для целевого арендатора и запрашивает у Identity OBO-токен. Identity отправляет запрос на обмен токена по RFC 8693 к серверу авторизации арендатора, получает новый токен с изменённым aud (привязанным к API арендатора) и сохранённым sub (исходный пользователь) и claim actor (AgentCore). Затем Gateway вызывает downstream API с этим токеном. Для Okta используются три Custom authorization server: TravelBot Provider, ACME Travel API и Globex Travel API. Для Auth0 и Keycloak также заявлена совместимость с RFC 8693, для Microsoft Entra ID используется grant_type = JWT_BEARER с requested_token_use = on_behalf_of (поддерживается AgentCore Identity через grantType JWT_AUTHORIZATION_GRANT). API Gateway проверяет issuer, audience и scope, Lambda выполняет авторизацию на основе authorized_scopes и хранит данные в DynamoDB, партиционируя по sub.
- Сокращения
- API = Application Programming Interface — программный интерфейс приложения
- JWT = JSON Web Token — JSON-веб-токен
- OAuth = Open Authorization — открытая авторизация
- OIDC = OpenID Connect — OpenID Connect
- OBO = on-behalf-of — от имени
- MCP = Model Context Protocol — протокол контекста модели
- HTTP = Hypertext Transfer Protocol — протокол передачи гипертекста
- IdP = Identity Provider — поставщик удостоверений
- JWKS = JSON Web Key Set — набор JSON-веб-ключей
- VPC = Virtual Private Cloud — виртуальное частное облако
Источник: AWS ML blog —
оригинал
