AgentCore Gatewayで実現するServiceNow向けOBOトークン交換――ユーザー権限を保つエージェント連携
エージェントからAPIまでユーザーIDを伝播させる構成
エージェントが企業APIを呼び出す際、下流サービスにアプリケーション自身の資格情報だけが渡ると、実際の利用者を識別できない。これにより監査証跡が不明瞭になり、ユーザー単位のアクセス制御を適用できず、最小権限の原則にも反する。
この記事が示す構成では、Amazon Bedrock AgentCore Gatewayを、AIエージェントとServiceNow REST APIの間に置くMCPサーバーとして利用する。認証基盤はMicrosoft Entra IDで、主要コンポーネントは次の3つだ。
- Entra IDで保護されたAIエージェントアプリケーション
- OBO(on-behalf-of)トークン交換を担うAgentCore Gateway
- Entra IDと連携するインバウンドOAuth統合を備えたServiceNow REST API
利用者はJWTでエージェントを呼び出す。エージェントは自身のアプリケーション登録に対応するaudienceを持つJWTでGatewayを認証し、GatewayはそのトークンをServiceNow APIコネクタ向けのトークンに交換する。ServiceNowは、交換後のトークンに含まれるpreferred_usernameを既存ユーザーに対応付け、そのユーザーの権限でAPI要求を処理する。
この構成の要点は、エージェントの認証とServiceNow APIの認証を同じトークンで済ませるのではなく、対象APIごとに適切なaudienceを持つトークンへ交換することにある。Gatewayが要求ごとに交換を行うため、エージェントから下流APIまで利用者のIDを引き継ぎながら、ServiceNow側のユーザー権限を適用できる。
OBO交換の仕組みと設定上の要点
エージェントからGatewayへ送られるJWTのaudienceは、エージェントのクライアントIDに対応する。一方、ServiceNowが受け入れるトークンには、ServiceNow APIコネクタのクライアントIDをaudienceとする必要がある。記事の例では、前者は3ff88e17-XXXX-XXXX-XXXX-XXXXXXXXXXXX、後者は5d4a7a11-XXXX-XXXX-XXXX-XXXXXXXXXXXXという形式で示されている。
Gatewayは受信したJWTに加え、エージェントアプリケーションのクライアント資格情報と対象スコープをEntraのトークンエンドポイントへ渡す。さらに、requested_token_use:on_behalf_ofを指定してOBO交換を要求する。Entraは委任への同意を検証し、元のユーザーのクレームを維持した、ServiceNow API向けの新しいトークンを発行する。
構築手順のうち、動作を左右する設定は次のとおり。
-
Entra IDに2つのアプリケーション登録を作成する。 ServiceNow APIコネクタ側では
user_impersonationスコープを公開する。エージェント側ではクライアントシークレットを作成し、APIコネクタへのAPI権限を設定する。 -
ServiceNowでOIDC連携を構成する。 インバウンド統合のクライアントIDにはAPIコネクタのIDを指定し、EntraのOIDCメタデータURLを登録する。ユーザーのメールアドレスが
preferred_usernameに格納される場合は、そのクレームをServiceNowのEmailフィールドに対応付ける。jti検証に関しては、Entraが発行するutiをjtiにマッピングして追加のリプレイ対策やdenylist運用に利用する選択肢も示されている。 -
AgentCore Gatewayのアウトバウンド認証を設定する。 OAuthクライアントにエージェントのクライアントIDとシークレット、EntraのディスカバリーURLを指定し、JWT authorization grantを選択する。
-
MCPバージョンとターゲットを設定する。 Gateway作成時にMCP version
2025-11-25を選ぶ。このバージョンがネイティブOBOに必要であり、それ以前のMCPバージョンで作成したGatewayではネイティブOBOを有効にできない。ターゲットにはServiceNow REST APIのOpenAPIスキーマを登録し、Outbound Authに先ほどのOAuth設定を選択する。 -
ターゲットに交換先のscopeとカスタムパラメーターを指定する。 例ではscopeを
api://5d4a7a11-xxxx-xxxx-xxxx-xxxxxxxxxxxx/user_impersonation、カスタムパラメーターをrequested_token_use:on_behalf_ofとする。このパラメーターが欠けるとEntraでOBO交換が行われず、ServiceNow呼び出しは認証エラーになる。
Gatewayは、受信JWTのaudienceを確認し、Entraへの交換要求、交換後トークンを付与したServiceNowへの転送を透過的に実行する。記事の例では、OpenAPIでTable APIの/incidentを公開し、sysparm_limit、sysparm_query、sysparm_fieldsを受け付けている。したがって、トークン交換だけでなく、エージェントに見せるAPI面をスキーマで限定できる構成になっている。
運用・セキュリティ上の含意
ネイティブOBOの利点は、カスタムのAWS Lambdaインターセプターを用意してトークン交換を実装・保守する必要がないことだ。交換処理がGatewayターゲットの設定に集約されるため、認証境界とAPI接続設定を確認しやすくなる。一方、正しい権限境界を成立させるには、Entraの委任権限、ServiceNowのユーザー対応付け、ServiceNowの認可スコープがすべて整合していなければならない。
ServiceNow側では、インバウンド統合に設定したauth scopeをTable API、またはエージェントが必要とするAPIに限定する。さらに、preferred_usernameが有効なServiceNowユーザーに対応していることを確認する。記事が挙げる主な認証エラーの確認点は、このユーザー対応付け、API endpointを許可するauth scope、エージェントアプリケーションに設定したAPI権限の3つだ。
本番環境では、ID伝播に加えてAmazon Bedrock Guardrailsを組み合わせ、入力・出力の検証や有害コンテンツのフィルタリングを行う選択肢がある。ただし、GuardrailsはOBOの認証・認可設定を代替するものではない。認証では「誰の権限で呼び出すか」を維持し、Guardrailsではエージェントの入出力を制御するという別々の責務として扱う必要がある。
開発者・エンジニア視点での考察
-
トークン交換をAPI境界の一部として設計する。 OBOは単なる資格情報の付け替えではなく、利用者の委任を下流API向けのaudienceとscopeに変換する処理である。ターゲットごとに交換先scopeを設定し、エージェント用トークンとServiceNow用トークンを混同しない構成にする。
requested_token_useのような必須パラメーターは、設定レビューや環境差分チェックの対象に含めたい。 -
認証テストを「成功/失敗」だけでなく、権限伝播まで検証する。 エンドツーエンド試験では、Gatewayの呼び出し成功に加えて、ServiceNowが
preferred_usernameを期待するユーザーへ解決すること、ユーザー権限に応じて返却データや操作可否が変わることを確認する。これにより、アプリケーション資格情報で呼び出してしまう設定不備や、過剰な共有権限を検出しやすくなる。 -
MCPツールのスキーマとServiceNowの認可範囲を一緒に管理する。 Gatewayで公開するOpenAPIスキーマは、エージェントが呼び出せるAPI操作を定義する。ServiceNowのauth scopeは、その先で許可されるAPI範囲を制限する。両者を合わせて最小限に保ち、必要なフィールドやクエリパラメーターだけを公開することが、エージェントの誤操作や意図しないデータアクセスを抑える実務的な防御となる。
Source / 元記事
この記事について
この記事は、公開されているニュース、論文、公式発表、RSSフィードなどをもとに、AIが要約・補足調査・考察を行って作成しています。
元記事の完全な翻訳・逐語的な要約ではなく、AIによる背景説明や開発者向けの考察を含みます。
重要な技術仕様・価格・提供状況などは、必ず元記事または公式情報をご確認ください。


