View a markdown version of this page

ゲートウェイのインバウンド認可を設定する - Amazon Bedrock AgentCore

ゲートウェイのインバウンド認可を設定する

ゲートウェイを作成する前に、インバウンド認可を設定する必要があります。インバウンド認可は、AgentCore ゲートウェイを介してターゲットにアクセスしようとするユーザーを検証します。AgentCore は、次のタイプのインバウンド認可をサポートしています。

  • JSON ウェブトークン (JWT) – 認可に使用される安全でコンパクトなトークン。JWT を作成したら、ゲートウェイの作成時に認可設定として指定します。プロバイダーのセットアップと設定で、任意の ID プロバイダーを使用して JWT を作成できます。

  • IAM ID – ゲートウェイにアクセスしようとしている IAM ID AWS の認証情報を通じて認可します。

  • オフロードされた認可タイプ – ゲートウェイは独自の認可決定を行わず、代わりにダウンストリームターゲット、ゲートウェイにアタッチされたポリシーエンジン、インターセプタ Lambda 関数などの別のコンポーネントに認可をオフロードします。このカテゴリには、認証のみ認可なしが含まれます。詳細とガイダンスについては、「オフロードされたインバウンド認可」を参照してください。

注記

AWS マネジメントコンソールまたは AgentCore CLI を使用してゲートウェイを作成する場合は、ゲートウェイの作成時に Amazon Cognito を使用してデフォルトのインバウンド認可設定を作成できます。デフォルトの認可設定を使用する場合は、この前提条件をスキップできます。

Amazon Cognito を使用してデフォルトの認可設定を使用する予定がない場合は、設定方法を学ぶために使用する予定の認可のタイプに対応するトピックを選択します。

IAM ベースのインバウンド認可

IAM ベースのインバウンド認可では、ゲートウェイ発信者の IAM 認証情報を認可に使用できます。このオプションは、ゲートウェイを呼び出すユーザーが認証できる IAM ID を作成する場合に使用できます。

IAM ベースのインバウンド認可を設定するには

  1. ゲートウェイ発信者の既存の IAM ID を作成または使用します。

  2. 次のアクセス許可を含むアイデンティティベースの IAM ポリシーを作成します。

    • bedrock-agentcore:InvokeGateway – ゲートウェイを作成したら、セキュリティのベストプラクティスとして作成したゲートウェイに Resourceフィールドがスコープされるように、このポリシーを変更する必要があります。

  3. ポリシーをゲートウェイ発信者 ID にアタッチします。

ポリシーの例

次の例は、ID にアタッチして、ID を使用してゲートウェイを呼び出せるようにできるポリシーを示しています。 my-gateway-12345

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowGatewayInvocation", "Effect": "Allow", "Action": [ "bedrock-agentcore:InvokeGateway" ], "Resource": [ "arn:aws:bedrock-agentcore:us-east-1:123456789012:gateway/my-gateway-12345" ] } ] }

リソース

JSON ウェブトークン (JWT) ベースのインバウンド認可

JSON ウェブトークン (JWT) は、認可に使用される安全でコンパクトなトークンです。サポートされている ID プロバイダーを使用して JWT を作成できます。JWT を作成したら、JWT を取得し、ゲートウェイの作成時に認可設定として指定できます。

重要

JWT トークンに基づくインバウンド認可を使用すると、CloudTrail で JWT トークンの一部のクレームがログに記録されます。エントリには、提供されたウェブ ID トークンのサブジェクトが含まれます。このフィールドでは、個人を特定できる情報 (PII) を使用しないことをお勧めします。例えば、OIDC 仕様で提案されているように、代わりに GUID またはペア単位の識別子を使用できます。

AgentCore CLI を使用してデフォルトの JWT を設定するか、サポートされている ID プロバイダーで手動で作成できます。JWT をセットアップするためのさまざまな方法の詳細については、次のトピックから選択してください。

デフォルトの JWT を設定する

AgentCore CLI を使用すると、Amazon Cognito を使用してデフォルトの認可設定を簡単に作成し、ゲートウェイの作成時に使用できます。を実行するとagentcore create、CLI からインバウンド認可を設定するように求められ、自動的に Amazon Cognito ユーザープールを設定できます。

agentcore create

コマンドが完了すると、AgentCore CLI は認証情報と認可情報を提供します。

  • ゲートウェイを作成するときは、オーソライザー設定を使用します。

  • ゲートウェイを呼び出す際のインバウンド認可については、クライアント ID、クライアントシークレット、トークンエンドポイントを使用してアクセストークンを取得する必要があります。アクセストークンを取得する方法の詳細については、Amazon Cognito デベロッパーガイドのAgentCore ゲートウェイを使用する」または「トークン発行者エンドポイントを使用する」の例を参照してください。

JWT を手動でセットアップする

Amazon Bedrock AgentCore は、すべての ID プロバイダーの JWTs をサポートしています。いくつかの例は、プロバイダーのセットアップと設定で確認できます。

JWT を作成するプロセスでは、次の値を書き留めます。この値は、ゲートウェイを作成するときに、ユースケースに適用できる場合に CustomJWTAuthorizerConfiguration に入力します。

  • 検出 URL – ログイン認証情報とトークンエンドポイントを取得できる URL。

  • クライアント ID – トークンをリクエストするクライアントアプリケーションのパブリック識別子で、 client_idクレームに対して検証されます。

  • クライアントシークレット – クライアントアプリケーションがトークンを取得するためのアクセスを認証するプライベートキー。

  • 許可された対象者audクレームを介してトークンの意図した受信者またはコンシューマーを検証する識別子。

  • 許可されたスコープ – ユーザーのアカウントへのアプリケーションのアクセスの制限を定義するスコープ。詳細については、OAuth スコープ」を参照してください。

  • その他の必須クレーム値 – 使用するオーソライザーによっては、認証のためにクレームフィールドの値を に一致させるために必要なカスタムクレームフィールドとルールを指定する必要がある場合があります。

以下を実行するには、これらの値が必要です。

認証チャレンジにおけるスコープアドバタイズ

クライアントが有効なアクセストークンなしで JWT 認可ゲートウェイにリクエストを送信すると、ゲートウェイは必要な OAuth スコープをアドバタイズするWWW-Authenticateヘッダーを含むエラーレスポンスを返します。これは RFC 6750 ベアラートークンチャレンジ形式に従い、MCP 準拠のクライアントがトークンの取得に必要なスコープを自動的に検出できるようにします。

ゲートウェイは、エラーに応じて次のレスポンスを返します。

  • 401 Unauthorized – リクエストにトークンがないか、無効なトークンがあります。WWW-Authenticate ヘッダーには、 resource_metadata および scopeパラメータが含まれます。

  • 403 Forbidden – トークンは有効ですが、必要なスコープは含まれていません。WWW-Authenticate ヘッダーには、error="insufficient_scope"scope、および resource_metadataパラメータが含まれます。

scope 値には、ゲートウェイの CustomJWTAuthorizerConfiguration許可されたスコープとして設定されたスペース区切りのスコープが含まれます。resource_metadata 値は、ゲートウェイの OAuth 保護されたリソースメタデータドキュメントを で指し/.well-known/oauth-protected-resource、クライアントが取得して認可サーバーとサポートされているスコープを検出できます。

プライベート (VPC がホストする) ID プロバイダーを使用する

AgentCore Gateway は、VPC 内でホストされている ID プロバイダーによる JWT ベースのインバウンド認可をサポートしています。AgentCore customJWTAuthorizerがパブリックインターネットに公開されることなくプライベート OIDC 検出、トークン、JWKS エンドポイントに到達できるように、 privateEndpointで を設定できます。

AgentCore Identity がAWSServiceRoleForBedrockAgentCoreIdentityサービスにリンクされたロールがまだ存在しない場合にユーザーに代わって作成できるようにidentity-network.bedrock-agentcore.amazonaws.com、IAM プリンシパルには のiam:CreateServiceLinkedRoleアクセス許可が必要です。

は、 のドメインprivateEndpointに適用されますdiscoveryUrl。ID プロバイダーが他のエンドポイントに異なるドメインを使用する場合 (たとえば、トークンまたは JWKS エンドポイントが検出 URL とは異なるドメインに解決される場合)、 privateEndpointOverridesを使用して、追加のドメインごとに個別のプライベートエンドポイント設定を指定します。

次の例では、マネージド Lattice を使用してプライベート ID プロバイダーを持つゲートウェイを作成します。

{ "name": "my-private-idp-gateway", "protocolType": "MCP", "roleArn": "arn:aws:iam::123456789012:role/my-gateway-role", "authorizerType": "CUSTOM_JWT", "authorizerConfiguration": { "customJWTAuthorizer": { "allowedAudience": [ "my-audience" ], "discoveryUrl": "https://my-idp.internal.example.com/.well-known/openid-configuration", "privateEndpoint": { "managedVpcResource": { "vpcIdentifier": "vpc-0abc123def456", "subnetIds": ["subnet-0abc123", "subnet-0def456"], "endpointIpAddressType": "IPV4", "securityGroupIds": ["sg-0abc123def"] } } } } }

トークンまたは JWKS エンドポイントが検出 URL とは異なるドメインを使用している場合は、追加のドメインごとにprivateEndpointOverridesエントリを追加します。現在、 privateEndpointOverridesはセルフマネージド Lattice リソースでのみサポートされています。

{ ... "authorizerConfiguration": { "customJWTAuthorizer": { "allowedAudience": ["my-audience"], "discoveryUrl": "https://my-idp.internal.example.com/.well-known/openid-configuration", "privateEndpoint": { "selfManagedLatticeResource": { "resourceConfigurationIdentifier": "arn:aws:vpc-lattice:us-east-1:123456789012:resourceconfiguration/rcfg-abc123" } }, "privateEndpointOverrides": [ { "domain": "my-token-server.internal.example.com", "privateEndpoint": { "selfManagedLatticeResource": { "resourceConfigurationIdentifier": "arn:aws:vpc-lattice:us-east-1:123456789012:resourceconfiguration/rcfg-def456" } } } ] } } }

セルフマネージド Lattice、クロスアカウント設定、高度な設定については、「VPC Lattice を使用して VPC のプライベートリソースに接続する」を参照してください。インバウンドプライベート IdP シナリオとアウトバウンドプライベート IdP シナリオの両方をカバーする包括的なガイドについては、「プライベート ID プロバイダーに接続する」を参照してください。

オフロードされたインバウンド認可

オフロードされたインバウンド認可では、ゲートウェイは独自の認可決定を行いません。代わりに、認可を別のコンポーネントにオフロードします。

  • ダウンストリームターゲットサービス。受信したリクエストを承認します。

  • アクセスポリシーを評価するゲートウェイにアタッチされたポリシーエンジン。

  • インターセプター Lambda 関数。リクエストがターゲットに到達する前にカスタム認証または認可ロジックを実行します。

AgentCore には 2 つのオフロードタイプがあります。

  • 認証のみ (AUTHENTICATE_ONLY) – ゲートウェイは発信者の SigV4 署名を検証して発信者を認証しますが、認可の決定は行いません。リクエストは署名する必要がありますが、認証された発信者はターゲットに転送されます。

  • No Authorization (NONE) – ゲートウェイはインバウンド認証または認可を実行しません。リクエストは認証されず、すべての発信者がターゲットに転送されます。

どちらのタイプでも、認可が実際に適用される場所を決定します。

  • ポリシーエンジン – ポリシーエンジンをゲートウェイにアタッチして、アクセスポリシーを一元的に評価します。これは本番稼働用ゲートウェイに推奨されるパターンであり、OAuth と一緒に頻繁に使用されます。

  • Interceptor Lambda 関数 – リクエストがターゲットに到達する前に、独自の認証または認可ロジックを実行します。これは、組み込みのインバウンド認可オプションが要件を満たさない本番稼働用ゲートウェイに推奨されます。

  • ダウンストリームターゲット – ターゲットが受け取ったリクエストに認可を適用できるようにします。これは、ランタイムの認証と認可を変更せずに既存のランタイムの前にゲートウェイを配置するなど、実験やプログレッシブオンボーディングに役立ちます。これにより、ランタイムが既に信頼している認証を引き続き適用している間に、ゲートウェイ機能を段階的に導入できます。

重要

AUTHENTICATE_ONLY または を選択してインバウンド認可をオフロードする場合NONE、AgentCore Gateway は単独で認可を適用しません。このシナリオでは、ポリシーエンジン、インターセプター Lambda 関数、ダウンストリームターゲットなどの別のコンポーネントに認可をオフロードする必要があります。オフロードしないと、呼び出し元はターゲットに到達できます。

認証のみの認可

認証専用認可 (AUTHENTICATE_ONLY) では、ゲートウェイは発信者の署名バージョン 4 (SigV4) 署名を検証して ID を確認しますが、独自の認可決定は行いません。認証された IAM プリンシパルは、アクセス許可に関係なくゲートウェイを呼び出すことができ、リクエストはターゲットに転送されます。認可は、ダウンストリームのターゲットサービスまたはゲートウェイにアタッチされたポリシーエンジンに委任されます。

重要

ではAUTHENTICATE_ONLY、ゲートウェイは認可ポリシーを適用しません。有効な SigV4-signedリクエストはすべてターゲットに転送されます。ダウンストリームターゲットが独自の認可ロジックを実装しているか、ゲートウェイにポリシーエンジンをアタッチしてアクセスを制御します。ターゲットまたはゲートウェイポリシーレベルで適切な認可がない場合、認証された発信者はバックエンドサービスにアクセスできます。

認可なし

を使用して、認可なしで設定されたゲートウェイを作成できますauthorizerType=NONE。ゲートウェイは受信ゲートウェイリクエストに対して認可を実行せず、リクエストは認証されていない可能性があります。

重要

以下に示すすべてのセキュリティのベストプラクティスを実装していない限り、本番環境のワークロードには認可ゲートウェイを使用しないでください。カスタム認証ロジックが必要な場合は、リクエストがターゲットに到達する前にインターセプタ Lambda 関数を使用して認証を処理することを検討してください。

セキュリティのベストプラクティス

  1. でゲートウェイを作成するために組織内のアクセスを選択的に許可/拒否するには、 bedrock-agentcore:GatewayAuthorizerType条件キーを使用します。 authorizerType=NONE

  2. テストに便宜上、No Authorization ゲートウェイを使用しないでください。パブリックにするゲートウェイには使用する必要がありますが、パブリックゲートウェイが認証されていないユーザーを処理できるように、独自のカスタムスロットリングルールとチェックを実装しています。

  3. 機密情報で応答する可能性のあるターゲットでは、認可なしゲートウェイを使用しないでください。ターゲットは独自の認可設定で設定されていますが、ゲートウェイに別のセキュリティレイヤーを追加することをお勧めします。

認証を変更せずに既存のランタイムをオンボードする

オフロードされたインバウンドタイプを、発信者の ID をランタイムに転送する一致するアウトバウンド認可タイプとペアリングする場合、ゲートウェイへのオンボーディングは、既存のクライアントでエンドポイントオーバーライドを設定するのと同じくらい簡単です。認証の変更は必要ありません。

  • IAM ランタイムAUTHENTICATE_ONLYインバウンド認可と発信者 IAM 認証情報 (CALLER_IAM_CREDENTIALS) アウトバウンド認可を組み合わせます。ゲートウェイは SigV4 発信者を認証し、同じ発信者 ID を使用してランタイムへのリクエストに署名するため、ランタイムの既存の IAM 認可は変更されずに適用されます。詳細については、「発信者 IAM 認証情報」を参照してください。

  • OAuth ランタイム認可なしインバウンド認可とトークンパススルー (JWT_PASSTHROUGH) アウトバウンド認可を組み合わせます。ゲートウェイは、インバウンド JWT を変更せずにランタイムに転送するため、ランタイムはトークンを現在とまったく同じように検証します。(トークンパススルーはベアラートークンを転送するため、JWT-" インバウンドタイプ - JWT インバウンド認可 または が必要ですNONE。 SigV4-basedAUTHENTICATE_ONLYでベアラートークンを持たない では利用できません)。詳細については、「トークンパススルー」を参照してください。

    注記

    トークンパススルー (JWT_PASSTHROUGH) は本番環境では推奨されません。インバウンドトークンを変更せずに転送すると、ゲートウェイとダウンストリームターゲットの両方で同じトークンが受け入れられるため、厳密にスコープする必要があります。例えば、各トークンの対象者 (aud) は目的のリソースに制限する必要があります。推奨されるパターンは、OBO (on-behalf-of) トークン交換です。ここで、ゲートウェイは、発信者のトークンを再生するのではなく、発信者のトークンをターゲットのオーディエンススコープの新しいトークンと交換します。トークンパススルーを使用すると、実験、テスト、オンボーディングが簡単になり、長期の本番ワークロードでは OBO に移行できます。

警告

このセクションの ID 転送設定は、ダウンストリームランタイムのみに依存してリクエストを承認します。ゲートウェイは独自の承認を追加しません。これらは、テスト、実験、および中断の少ないオンボーディングを目的としています。本番ゲートウェイの場合は、ゲートウェイで認可を適用します。JWT または IAM インバウンド認可を設定するか、ポリシーエンジンをアタッチするか、インターセプタ Lambda 関数を使用します。採用後に発信者がゲートウェイをバイパスできないようにするには、「ゲートウェイを介したトラフィックの強制」を参照してください。