CSのTips一覧

AgentCore Gatewayの呼び出し元の認可と接続先への認証を分ける

Gatewayを呼べることと、その先の顧客データを操作できることは別。inboundとoutboundの両方で、誰の権限を使い、どの対象を許すかを設計する。

用語

inbound
呼び出し元からGatewayへ入る要求を扱う認証・認可。
outbound
Gatewayから接続先へ出る要求に使う認証。
サービスロール
サービスがAWSリソースへアクセスする際に使うIAMロール。

図と例

設計の流れ(独自の例)

inboundで呼び出し元を確認 → 接続先の認証方式を選ぶ → outboundで接続 → 顧客と操作対象を認可

仮定の例:Gatewayへのログインは有効でも、利用者Aが顧客Bの請求書を更新する権限はない。共有接続の先のAPIが顧客Bへの更新を拒否する。

実際のサービス・製品では

  • Amazon Bedrock AgentCore Gateway

    AWSはGatewayのinboundとoutboundを別資料で説明し、AUTHENTICATE_ONLYではGatewayが認可判断をしないことも明記している。

    資料を読む

解説

Gatewayへの到達と業務操作の許可を別々に試す。別顧客IDを引数へ入れるケースや、Gatewayから広いサービス権限で接続するケースを検証する。

inboundはGatewayへの呼び出しを受け付ける側の認証・認可、outboundはGatewayが接続先へアクセスする側の認証を扱う。接続方式によりGatewayのサービスロール、呼び出し元のIAM認証情報、OAuthなどを使えるが、全方式が利用者本人の権限を伝えるわけではない。共有のサービス権限で接続する場合は、接続先で顧客・操作対象・引数の認可を検証する。AUTHENTICATE_ONLYは署名を検証してもGateway自身で認可判断をしない方式なので、通常のIAM認可と同じだと考えない。ツールの一覧を絞るだけで実行時の認可を代替しない。

トレードオフ

対応する接続で利用者の権限を使う
得るもの:接続先で本人の権限を評価しやすい
払うもの:対象サービスと委任方式への対応が必要
共有のサービス権限で接続し業務APIで認可する
得るもの:共通の接続を運用しやすい
払うもの:APIが顧客・対象・操作の許可を検証する必要がある

さらに学ぶ

チェック

inbound認証が有効で、outboundは共有のサービス権限を使う。顧客をまたぐ操作を防ぐには?

  1. 業務APIで利用者と顧客・操作対象の許可を検証する
  2. Gatewayへ入れた人には全顧客の更新を許す
  3. ツールの説明文に他社データ禁止と書くだけにする
解答と解説

業務APIで利用者と顧客・操作対象の許可を検証する

Gatewayへの到達許可は接続先の全データへの許可を意味しない。共有接続でも、信頼できる利用者情報に基づく業務の認可が要る。

このTipを深掘りした記事