View a markdown version of this page

Amazon Bedrock AgentCore のリソースベースのポリシー - Amazon Bedrock AgentCore

Amazon Bedrock AgentCore のリソースベースのポリシー

Amazon Bedrock AgentCore のリソースベースのポリシーを使用すると、どのプリンシパル (AWS アカウント、IAM ユーザー、または IAM ロール) が Amazon Bedrock AgentCore リソース (現在、ランタイム、ゲートウェイ、メモリでサポートされています) を呼び出して管理できるかを制御できます。IAM スタイルのポリシーをリソースに直接アタッチして、ランタイムセッションの開始、ゲートウェイの呼び出し、メモリへのアクセス、またはその他の管理および呼び出しアクションを実行できるユーザーに関するルールを定義できます。

リソースベースのポリシーは、アイデンティティベースの IAM ポリシーと組み合わせて動作し、Amazon Bedrock AgentCore リソースのアクセスコントロールを提供します。ID ベースのポリシーは IAM ID にアタッチされ、実行できるアクションを指定しますが、リソースベースのポリシーはリソースに直接アタッチされ、それらにアクセスできるユーザーを指定します。

サポートされているリソース

Amazon Bedrock AgentCore は、次のリソースのリソースベースのポリシーをサポートしています。

  • エージェントランタイムとエージェントエンドポイント - エージェントの呼び出しと管理オペレーションへのアクセスを制御します。

  • ゲートウェイ - ゲートウェイ呼び出しオペレーションへのアクセスを制御する

  • メモリ - メモリオペレーションへのアクセスを制御する

リソースベースのポリシーの仕組み

アイデンティティベースのポリシーとリソースベースのポリシー

側面 アイデンティティベースのポリシー リソースベースのポリシー

添付ファイル

IAM ユーザー、ロール、またはグループにアタッチ

Amazon Bedrock AgentCore リソースに直接アタッチ

管理

IAM AWS による管理

Amazon Bedrock AgentCore APIsを使用して管理

指定

アクションとリソース (プリンシパルは暗黙的)

プリンシパル、アクション、および条件 (リソースは暗黙的)

ユースケース

ID ができることを定義する

リソースにアクセスできるユーザーを定義する

ポリシーの評価

Amazon Bedrock AgentCore リソースに対してリクエストが行われると、 はアイデンティティベースのポリシーとリソースベースのポリシーの両方 AWS を評価します。次の表は、さまざまなポリシーの組み合わせがアクセスにどのように影響するかを示しています。

IAM ポリシー リソースポリシー 結果

アクセスを付与します

サイレント

許可されています

アクセスを付与します

アクセスを付与します

許可されています

アクセスを付与します

アクセスを拒否する

拒否

サイレント

サイレント

拒否

サイレント

アクセスを付与します

許可されています

サイレント

アクセスを拒否する

拒否

アクセスを拒否する

サイレント

拒否

アクセスを拒否する

アクセスを許可する

拒否

アクセスを拒否する

アクセスを拒否する

拒否

主な原則:

  • 明示的な拒否 : アクションを明示的に拒否するポリシーがある場合、他のポリシーに関係なくアクセスは拒否されます。

  • Policy Can Allow : アイデンティティベースまたはリソースベースのポリシーで アクションが許可されている場合 (ポリシーが拒否しない場合)、アクセスは許可されます。

  • デフォルトの拒否: アクションを明示的に許可するポリシーがない場合、アクセスは拒否されます

エージェントランタイムとエンドポイントの階層認可

エージェントエンドポイントは、エージェントのランタイムの特定のバージョンへのアドレス可能なアクセスポイントです。各エンドポイントはランタイム設定の特定のバージョンを指し、DEFAULT エンドポイントは自動的に最新バージョンにルーティングされます。InvokeAgentRuntime や などのランタイム API InvokeAgentRuntimeCommand オペレーションを承認すると、 はエージェントランタイムと呼び出されるエージェントエンドポイントの両方について、アイデンティティベースのポリシーとリソースベースのポリシーの両方 AWS を評価します。

リクエストを承認するには、次の条件を満たす必要があります。

  • 呼び出し元のプリンシパルにアタッチされたアイデンティティベースのポリシーは、エージェントのランタイムリソースとエージェントエンドポイントリソースの両方で アクションを許可する必要があります。

  • エージェントランタイムのリソースベースのポリシーは、 アクションを許可する必要があります (ポリシーが存在する場合)

  • エージェントエンドポイントのリソースベースのポリシーは、 アクションを許可する必要があります (ポリシーが存在する場合)

重要

プリンシパルにクロスアカウントアクセスを提供するには、エージェントランタイムとエージェントエンドポイントの両方へのアクセスを許可するリソースベースのポリシーを作成する必要があります。いずれかのリソースがアクセスを拒否するか、明示的な許可ステートメントがない場合、リクエストは拒否されます。

例: クロスアカウントアクセスを許可するには、両方のリソースにポリシーが必要です。

// Policy for Agent Runtime (attached to // arn:aws:bedrock-agentcore:us-west-2:111122223333:runtime/AGENTID) { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:role/CrossAccountRole" }, "Action": "bedrock-agentcore:InvokeAgentRuntime", "Resource": "arn:aws:bedrock-agentcore:us-west-2:111122223333:runtime/AGENTID" } ] } // Policy for Agent Endpoint (attached to // arn:aws:bedrock-agentcore:us-west-2:111122223333:runtime/AGENTID/endpoint/ENDPOINTID) { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:role/CrossAccountRole" }, "Action": "bedrock-agentcore:InvokeAgentRuntime", "Resource": "arn:aws:bedrock-agentcore:us-west-2:111122223333:runtime/AGENTID/endpoint/ENDPOINTID" } ] }

認証タイプの考慮事項

リソースベースのポリシーの記述方法は、エージェントランタイムまたはゲートウェイ用に設定された認証タイプによって異なります。

SigV4 認証

Principal 要素で特定の AWS プリンシパル (IAM ユーザー、ロール、またはアカウント) を使用します。例: "Principal": {"AWS": "arn:aws:iam::123456789012:role/MyRole"}。ポリシーは、呼び出し元の IAM アクセス許可と組み合わせて評価されます。AgentCore Gateway によってのみ呼び出されるランタイムを制限する例については、「ゲートウェイへの IAM (SigV4) インバウンド呼び出しを制限する」を参照してください。

OAuth 認証

ポリシーステートメントでは、ワイルドカードプリンシパル (「プリンシパル」:「*」) を使用する必要があります。OAuth トークンは、ポリシー評価の前に AWS Identity Service によって検証されます。登録された ID プロバイダー (IdP) から有効な JWT トークンを持つ認証された OAuth ユーザーのみがリソースを呼び出すことができます。匿名または認証されていないリクエストは、ポリシー評価の前に拒否されます。条件キーを使用してアクセスを制限します (例: aws:SourceVpcaws:SourceVpce)。

重要

エージェントランタイムまたはゲートウェイは、作成時に SigV4 または OAuth 認証のいずれかでのみ設定でき、両方を同時に設定することはできません。つまり、1 つのリソースベースのポリシーは 1 つの認証タイプにのみ適用されます。

ポリシーの構造

リソースベースのポリシーは、次の構造を持つ JSON ドキュメントです。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "StatementId", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::account-id:role/role-name" }, "Action": "bedrock-agentcore:ActionName", "Resource": "arn:aws:bedrock-agentcore:region:account-id:resource-type/resource-id", "Condition": { "ConditionOperator": { "ConditionKey": "ConditionValue" } } } ] }
重要

ポリシードキュメントの Resourceフィールドには、ポリシーがアタッチされているリソースの正確な ARN が含まれている必要があります。「リソース」:「*」の使用はサポートされていないため、検証エラーが発生します。

サポートされているアクション

エージェントランタイムアクション

  • bedrock-agentcore:InvokeAgentRuntime - エージェントランタイムを呼び出す

  • bedrock-agentcore:InvokeAgentRuntimeForUser - X-Amzn-Bedrock-AgentCore-Runtime-User-Id ヘッダーを使用してエージェントランタイムエンドポイントを呼び出す

  • bedrock-agentcore:InvokeAgentRuntimeCommand - アクティブなランタイムセッションでシェルコマンドを実行する

  • bedrock-agentcore:InvokeAgentRuntimeCommandShell - アクティブなランタイムセッションでインタラクティブな WebSocket シェルセッションを開く

  • bedrock-agentcore:InvokeAgentRuntimeWithWebSocketStream - WebSocket ストリームを使用してエージェントランタイムを呼び出す

  • bedrock-agentcore:InvokeAgentRuntimeWithWebSocketStreamForUser - X-Amzn-Bedrock-AgentCore-Runtime-User-Id ヘッダーを使用して WebSocket ストリームでエージェントランタイムを呼び出す

  • bedrock-agentcore:StopRuntimeSession - アクティブなランタイムセッションを停止する

  • bedrock-agentcore:GetAgentCard - エージェントカード情報を取得する

ゲートウェイアクション

  • bedrock-agentcore:InvokeGateway - ゲートウェイを呼び出す

メモリアクション

  • bedrock-agentcore:GetMemory - メモリリソースを取得する

  • bedrock-agentcore:UpdateMemory - メモリリソースを更新する

  • bedrock-agentcore:DeleteMemory - メモリリソースを削除する

  • bedrock-agentcore:CreateEvent - メモリリソースにイベントを作成する

  • bedrock-agentcore:GetEvent - メモリリソースからイベントを取得する

  • bedrock-agentcore:DeleteEvent - メモリリソースからイベントを削除する

  • bedrock-agentcore:ListEvents - メモリリソースからのイベントを一覧表示する

  • bedrock-agentcore:ListActors - メモリリソースからアクターを一覧表示する

  • bedrock-agentcore:ListSessions - メモリリソースからのセッションを一覧表示する

  • bedrock-agentcore:GetMemoryRecord - メモリリソースからメモリレコードを取得する

  • bedrock-agentcore:ListMemoryRecords - Memory リソースからのメモリレコードを一覧表示する

  • bedrock-agentcore:RetrieveMemoryRecords - Memory リソースからメモリレコードを検索する

  • bedrock-agentcore:DeleteMemoryRecord - メモリリソースからメモリレコードを削除する

  • bedrock-agentcore:BatchCreateMemoryRecords - メモリリソースでメモリレコードをバッチ作成する

  • bedrock-agentcore:BatchUpdateMemoryRecords - メモリリソースのメモリレコードをバッチ更新する

  • bedrock-agentcore:BatchDeleteMemoryRecords - メモリリソース内のメモリレコードをバッチ削除

  • bedrock-agentcore:StartMemoryExtractionJob - メモリリソース内で抽出ジョブを開始する

  • bedrock-agentcore:ListMemoryExtractionJobs - メモリリソース内の抽出ジョブを一覧表示する

条件キー

条件キーを使用して、ポリシーのアクセスコントロールをさらに絞り込むことができます。使用可能な条件キーの完全なリストについては、「Bedrock AgentCore 条件キー」とAWS 「グローバル条件コンテキストキー」を参照してください。

一般的なユースケースと例

このセクションでは、一般的なシナリオのリソースベースのポリシーの実用的な例を示します。各例の Resourceフィールドには、ポリシーがアタッチされているリソースの正確な ARN が含まれている必要があります。サンプル ARNs を実際のリソース ARNs。

別の AWS アカウントでロールを許可する

別の AWS アカウントの特定のロールへの API アクセスを付与します。

// Policy attached to arn:aws:bedrock-agentcore:us-west-2:111122223333:runtime/AGENTID { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::123456789012:role/DeveloperRole", "arn:aws:iam::123456789012:role/AdminRole" ] }, "Action": "bedrock-agentcore:InvokeAgentRuntime", "Resource": "arn:aws:bedrock-agentcore:us-west-2:111122223333:runtime/AGENTID" } ] }

送信元 IP アドレスに基づいてトラフィックを拒否する

特定の IP アドレス範囲からの受信トラフィックをブロックします。

// Policy attached to arn:aws:bedrock-agentcore:us-west-2:111122223333:runtime/AGENTID { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:role/ApplicationRole" }, "Action": "bedrock-agentcore:InvokeAgentRuntime", "Resource": "arn:aws:bedrock-agentcore:us-west-2:111122223333:runtime/AGENTID" }, { "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::123456789012:role/ApplicationRole" }, "Action": "bedrock-agentcore:InvokeAgentRuntime", "Resource": "arn:aws:bedrock-agentcore:us-west-2:111122223333:runtime/AGENTID", "Condition": { "IpAddress": { "aws:SourceIp": [ "192.0.2.0/24", "198.51.100.0/24" ] } } } ] }

特定の VPC からのトラフィックのみを許可する

特定の VPC からのリクエストへのアクセスを制限します。

// Policy attached to arn:aws:bedrock-agentcore:us-west-2:111122223333:runtime/AGENTID { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:role/ApplicationRole" }, "Action": "bedrock-agentcore:InvokeAgentRuntime", "Resource": "arn:aws:bedrock-agentcore:us-west-2:111122223333:runtime/AGENTID" }, { "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::123456789012:role/ApplicationRole" }, "Action": "bedrock-agentcore:InvokeAgentRuntime", "Resource": "arn:aws:bedrock-agentcore:us-west-2:111122223333:runtime/AGENTID", "Condition": { "StringNotEquals": { "aws:SourceVpc": "vpc-1a2b3c4d" } } } ] }

VPC 制限による OAuth 認証

エージェントランタイムまたはゲートウェイが OAuth 認証で設定されている場合は、ワイルドカードプリンシパルを使用する必要があります。この例では、OAuth 認証リクエストを特定の VPC に制限します。

// Policy attached to arn:aws:bedrock-agentcore:us-west-2:111122223333:runtime/AGENTID { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowOAuthFromVPC", "Effect": "Allow", "Principal": "*", "Action": "bedrock-agentcore:InvokeAgentRuntime", "Resource": "arn:aws:bedrock-agentcore:us-west-2:111122223333:runtime/AGENTID", "Condition": { "StringEquals": { "aws:SourceVpc": "vpc-1a2b3c4d" } } } ] }
重要

OAuth 認証には、ワイルドカードプリンシパル (「プリンシパル」:「*」) が必要です。OAuth トークンは、ポリシー評価の前に AWS Identity Service によって検証されます。登録された ID プロバイダーから有効な JWT トークンを持つユーザーのみがリソースにアクセスできます。匿名または認証されていないリクエストは、ポリシー評価に達する前に拒否されます。条件キー (、 aws:SourceVpc など) aws:SourceVpce を使用してアクセスをさらに制限する

リソースポリシーの管理

次のいずれかの方法を選択します。

AWS CLI
  1. ====== リソースポリシーを作成または更新する

    put-resource-policyコマンドを使用します。

    aws bedrock-agentcore-control put-resource-policy \ --resource-arn arn:aws:bedrock-agentcore:us-west-2:111122223333:runtime/AGENTID \ --policy file://policy.json

    リソースポリシーを取得する

    get-resource-policyコマンドを使用します。

    aws bedrock-agentcore-control get-resource-policy \ --resource-arn arn:aws:bedrock-agentcore:us-west-2:111122223333:runtime/AGENTID

    リソースポリシーを削除する

    delete-resource-policyコマンドを使用します。

    aws bedrock-agentcore-control delete-resource-policy \ --resource-arn arn:aws:bedrock-agentcore:us-west-2:111122223333:runtime/AGENTID
Python (Boto3)
  1. 次の例は、Python SDK (Boto3) AWS を使用してリソースポリシーを管理する方法を示しています。

    import boto3 import json client = boto3.client('bedrock-agentcore-control', region_name='us-west-2') # Define the resource ARN resource_arn = 'arn:aws:bedrock-agentcore:us-west-2:111122223333:runtime/AGENTID' # Put resource policy # Note: The Resource field must match the resource ARN to which the policy is attached policy = { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::123456789012:role/MyRole"}, "Action": "bedrock-agentcore:InvokeAgentRuntime", "Resource": resource_arn } ] } response = client.put_resource_policy( resourceArn=resource_arn, policy=json.dumps(policy) ) # Get resource policy response = client.get_resource_policy( resourceArn='arn:aws:bedrock-agentcore:us-west-2:111122223333:runtime/AGENTID' ) print(response['policy']) # Delete resource policy response = client.delete_resource_policy( resourceArn='arn:aws:bedrock-agentcore:us-west-2:111122223333:runtime/AGENTID' )

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

最小特権アクセス許可を適用する

ユースケースに必要な最小限のアクセス許可のみを付与します。

// Policy attached to arn:aws:bedrock-agentcore:us-west-2:111122223333:runtime/AGENTID { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/ApplicationRole" }, "Action": "bedrock-agentcore:InvokeAgentRuntime", "Resource": "arn:aws:bedrock-agentcore:us-west-2:111122223333:runtime/AGENTID" } ] }

混乱した代理の防止

AWS サービスへのアクセスを許可するときは、常に条件キーを使用してください。

// Policy attached to arn:aws:bedrock-agentcore:us-west-2:111122223333:gateway/GATEWAYID { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "bedrock-agentcore:InvokeGateway", "Resource": "arn:aws:bedrock-agentcore:us-west-2:111122223333:gateway/GATEWAYID", "Condition": { "StringEquals": { "aws:SourceAccount": "111122223333" }, "ArnEquals": { "aws:SourceArn": "arn:aws:lambda:us-west-2:111122223333:function/SpecificFunction" } } } ] }

重要なコントロールに明示的な拒否を使用する

セキュリティクリティカルな制限には、明示的な拒否ステートメントを使用します。

// Policy attached to arn:aws:bedrock-agentcore:us-west-2:111122223333:runtime/AGENTID { "Version": "2012-10-17", "Statement": [ { "Sid": "DenyAllExceptVPC", "Effect": "Deny", "Principal": "*", "Action": "bedrock-agentcore:InvokeAgentRuntime", "Resource": "arn:aws:bedrock-agentcore:us-west-2:111122223333:runtime/AGENTID", "Condition": { "StringNotEquals": { "aws:SourceVpc": "vpc-12345678" }, "Bool": { "aws:ViaAWSService": "false" } } } ] }

トラブルシューティング

アクセス拒否エラー

「アクセスが拒否されました」というエラーが表示された場合:

  • 両方のポリシーを確認する: ID ベースポリシーとリソースベースのポリシーの両方を検証する

  • 明示的な拒否を探す: すべての許可を上書きするポリシーでの明示的な拒否

  • プリンシパル ARN の検証: ポリシーのプリンシパル ARN が発信者と一致することを確認します。

  • チェック条件 : すべての条件キーが true に評価されることを確認する

  • SCPs の確認: 組織のサービスコントロールポリシーはリソースポリシーを上書きできます

ポリシー検証エラー

一般的なポリシー検証エラー:

  • 無効な JSON: ポリシーが有効な JSON であることを確認します

  • 無効な ARN 形式: すべての ARNs が正しい形式に従っていることを確認します

  • サポートされていないアクション: リソースタイプですべてのアクションがサポートされていることを確認します

  • 必須要素がない: バージョン、ステートメント、効果、プリンシパル、アクションが存在することを確認する