View a markdown version of this page

使用接口 VPC 终端节点 (AWS PrivateLink) 在您的 VPC 和您的 Amazon Bedrock AgentCore 资源之间创建私有连接 - 亚马逊基岩 AgentCore

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用接口 VPC 终端节点 (AWS PrivateLink) 在您的 VPC 和您的 Amazon Bedrock AgentCore 资源之间创建私有连接

您可以使用 AWS PrivateLink 在您的 VPC 和亚马逊基岩 AgentCore之间创建私有连接。您可以像在 VPC 中 AgentCore 一样进行访问,无需使用互联网网关、NAT 设备、VPN 连接或直接连接连接。您的 VPC 中的实例不需要公有 IP 地址即可访问 AgentCore。

您可以通过创建由提供支持的接口终端节点来建立此私有连接 AWS PrivateLink。我们将在您为接口端点启用的每个子网中创建一个端点网络接口。这些是请求者托管的网络接口,用作发往 AgentCore 的流量的入口点。

有关更多信息,请参阅 AWS PrivateLink 指南 AWS PrivateLink中的通过访问 AWS 服务。

注意事项 AgentCore

在为设置接口终端节点之前 AgentCore,请查看 AWS PrivateLink 指南中的注意事项。

AgentCore 提供三个 AWS PrivateLink 端点:

  • 数据平面端点 -com.amazonaws.region.bedrock-agentcore

  • 控制平面端点 -com.amazonaws.region.bedrock-agentcore-control

  • 网关终端节点 -com.amazonaws.region.bedrock-agentcore.gateway

下表显示了每个 AgentCore 原语的 AWS PrivateLink 支持状态:

原语 数据面板 控制面板

运行时

支持

支持

内存

支持

支持

Built-in 工具(代码解释器、浏览器工具)

支持

支持

身份

支持

支持

网关

支持

支持

评估和优化

支持

支持

策略

支持

支持

有关 AgentCore 接口终端节点可用 AWS 区域的列表,请参阅支持的 AWS 区域。

重要

数据平面 API 支持用于身份验证的 AWS 签名版本 4 (SigV4) 标头和持有者令牌 (OAuth) 身份验证。VPC 终端节点策略只能根据 IAM 委托人来限制呼叫者,不能根据 OAuth 用户来限制。要使 OAuth-based 请求成功通过 VPC 终端节点,必须在终端节点策略中将委托人设置为*。否则,只有列入许可名单的 SigV4 呼叫者才能通过 VPC 终端节点成功拨打电话。

AWS 支持 IAM 全局条件上下文密钥。默认情况下,允许通过接口端点进行完全访问。 AgentCore 您可以通过将终端节点策略附加到接口终端节点或将安全组与端点网络接口关联来控制访问权限。

为创建接口端点 AgentCore

您可以创建接口终端节点以 AgentCore 使用 Amazon VPC 控制台或 AWS 命令行接口 (AWS CLI)。有关更多信息,请参阅 AWS PrivateLink 指南中的创建接口端点。

创建接口端点以 AgentCore 使用以下服务名格式:

  • 所有数据平面原语(运行时、 Built-in 工具、内存、身份):com.amazonaws.region.bedrock-agentcore

  • 对于 AgentCore 网关:com.amazonaws.region.bedrock-agentcore.gateway

  • 对于控制平面操作(运行时和内存管理):com.amazonaws.region.bedrock-agentcore-control

如果您为接口终端节点启用私有 DNS,则 AgentCore 可以使用其默认区域 DNS 名称发出 API 请求。例如 bedrock-agentcore.us-east-1.amazonaws.com。特别是对于网关, 它看起来像:*.gateway.bedrock-agentcore.us-east-1.amazonaws.com.

为接口端点创建端点策略

端点策略是一种 IAM 资源,您可以将其附加到接口端点。默认终端节点策略允许 AgentCore 通过接口端点进行完全访问。要控制允许 AgentCore 来自您的 VPC 的访问,请将自定义终端节点策略附加到接口终端节点。

端点策略指定以下信息:

  • 可以执行操作的委托人(AWS 账户、IAM 用户和 IAM 角色)。

    • 对于 AgentCore 网关,如果您的网关入口不是基于AWS 签名版本 4 (SigV4) 的(例如,如果您改用 OAuth),则必须将该Principal字段指定为通配符*。基于 SigV4 的身份验证允许您将定义Principal为特定 AWS 身份。这也适用于 AgentCore 运行时。

  • 可执行的操作。

  • 可对其执行操作的资源。

有关更多信息,请参阅 AWS PrivateLink 指南中的使用终端节点策略控制对服务的访问。

各种原语的端点策略

以下示例显示了不同 AgentCore 组件的端点策略:

例
Runtime
  1. 以下终端节点策略允许特定的 IAM 委托人调用代理运行时资源。

    { "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::ACCOUNT_ID:user/USERNAME" }, "Action": [ "bedrock-agentcore:InvokeAgentRuntime" ], "Resource": "arn:aws:bedrock-agentcore:us-east-1:ACCOUNT_ID:runtime/RUNTIME_ID" } ] }

    IAM 和 OAuth 混合身份验证

    该 InvokeAgentRuntime API 支持两种模式的 VPC 终端节点授权。以下示例策略允许 IAM 委托人和 OAuth 调用者访问不同的代理运行时资源。

    { "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::ACCOUNT_ID:root" }, "Action": [ "bedrock-agentcore:InvokeAgentRuntime" ], "Resource": "arn:aws:bedrock-agentcore:us-east-1:ACCOUNT_ID:runtime/customAgent1" }, { "Effect": "Allow", "Principal": "*", "Action": [ "bedrock-agentcore:InvokeAgentRuntime" ], "Resource": "arn:aws:bedrock-agentcore:us-east-1:ACCOUNT_ID:runtime/customAgent2" } ] }

    上述政策仅允许IAM委托人InvokeAgentRuntime拨打电话customAgent1。它还允许 IAM 委托人和 OAuth 调用者拨打电话。InvokeAgentRuntime customAgent2

    受保护的资源元数据 (PRM) 端点策略

    该 GetRuntimeProtectedResourceMetadata API 实现了 OAuth 2.0 受保护的资源元数据 (RFC 9728)。客户端在获得凭据之前调用此端点,以了解哪个授权服务器保护给定的代理运行时。该端点在设计上未经身份验证,因此Principal必须在端点策略中将其设置为 *。

    VPC 终端节点策略是在 PRM 请求上强制执行的。如果您的终端节点策略未明确允许bedrock-agentcore:GetRuntimeProtectedResourceMetadata,则通过 HTTP 403 拒绝通过该端点的 PRM 请求。通过 VPC 终端节点访问的任何 OAuth-configured 代理运行时都需要 PRM 访问权限才能发现授权服务器。

    注意

    如果您为强制执行数据边界使用了 “全部拒绝” 端点策略,并且不使用 OAuth 或 JWT 身份验证,则 PRM 请求会被自动拒绝。无需额外配置。

    以下终端节点策略允许任何调用者发现授权服务器 (PRM),同时将运行时调用限制为特定的 IAM 委托人:

    { "Statement": [ { "Sid": "AllowPRMDiscovery", "Effect": "Allow", "Principal": "*", "Action": [ "bedrock-agentcore:GetRuntimeProtectedResourceMetadata" ], "Resource": "arn:aws:bedrock-agentcore:REGION:ACCOUNT_ID:runtime/*" }, { "Sid": "AllowInvoke", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::ACCOUNT_ID:root" }, "Action": [ "bedrock-agentcore:InvokeAgentRuntime" ], "Resource": "arn:aws:bedrock-agentcore:REGION:ACCOUNT_ID:runtime/RUNTIME_ID" } ] }

    要阻止通过 VPC 终端节点进行跨账户 PRM 查询(强制执行数据边界),请将 PRM allow 语句的范围仅限于您的账户的运行时:

    { "Statement": [ { "Sid": "AllowPRMOwnAccountOnly", "Effect": "Allow", "Principal": "*", "Action": [ "bedrock-agentcore:GetRuntimeProtectedResourceMetadata" ], "Resource": "arn:aws:bedrock-agentcore:REGION:ACCOUNT_ID:runtime/*" }, { "Sid": "DenyCrossAccountPRM", "Effect": "Deny", "Principal": "*", "Action": [ "bedrock-agentcore:GetRuntimeProtectedResourceMetadata" ], "NotResource": "arn:aws:bedrock-agentcore:REGION:ACCOUNT_ID:runtime/*" }, { "Sid": "AllowInvoke", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::ACCOUNT_ID:root" }, "Action": [ "bedrock-agentcore:InvokeAgentRuntime" ], "Resource": "arn:aws:bedrock-agentcore:REGION:ACCOUNT_ID:runtime/*" } ] }
Code Interpreter Tool
  1. 以下终端节点策略允许特定的 IAM 委托人调用代码解释器资源。

    { "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::ACCOUNT_ID:root" }, "Action": [ "bedrock-agentcore:InvokeCodeInterpreter" ], "Resource": "arn:aws:bedrock-agentcore:us-east-1:ACCOUNT_ID:code-interpreter/CODE_INTERPRETER_ID" } ] }
Memory
  1. ===== 所有数据平面操作

    以下终端节点策略允许特定的 IAM 委托人访问特定内存的 us-east-1 数据平面操作。 AgentCore

    { "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::ACCOUNT_ID:root" }, "Action": [ "bedrock-agentcore:CreateEvent", "bedrock-agentcore:DeleteEvent", "bedrock-agentcore:GetEvent", "bedrock-agentcore:ListEvents", "bedrock-agentcore:DeleteMemoryRecord", "bedrock-agentcore:GetMemoryRecord", "bedrock-agentcore:ListMemoryRecords", "bedrock-agentcore:RetrieveMemoryRecords", "bedrock-agentcore:ListActors", "bedrock-agentcore:ListSessions", "bedrock-agentcore:BatchCreateMemoryRecords", "bedrock-agentcore:BatchDeleteMemoryRecords", "bedrock-agentcore:BatchUpdateMemoryRecords" ], "Resource": "arn:aws:bedrock-agentcore:us-east-1:ACCOUNT_ID:memory/MEMORY_ID" } ] }

    访问所有记忆

    以下终端节点策略允许特定的 IAM 委托人访问所有内存。

    { "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::ACCOUNT_ID:root" }, "Action": [ "bedrock-agentcore:CreateEvent", "bedrock-agentcore:DeleteEvent", "bedrock-agentcore:GetEvent", "bedrock-agentcore:ListEvents", "bedrock-agentcore:DeleteMemoryRecord", "bedrock-agentcore:GetMemoryRecord", "bedrock-agentcore:ListMemoryRecords", "bedrock-agentcore:RetrieveMemoryRecords", "bedrock-agentcore:ListActors", "bedrock-agentcore:ListSessions", "bedrock-agentcore:BatchCreateMemoryRecords", "bedrock-agentcore:BatchDeleteMemoryRecords", "bedrock-agentcore:BatchUpdateMemoryRecords" ], "Resource": "arn:aws:bedrock-agentcore:us-east-1:ACCOUNT_ID:memory/*" } ] }

    API 的访问限制

    以下终端节点策略授予特定 IAM 委托人在特定 AgentCore 内存资源中创建事件的权限。

    { "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::ACCOUNT_ID:root" }, "Action": [ "bedrock-agentcore:CreateEvent" ], "Resource": "arn:aws:bedrock-agentcore:us-east-1:ACCOUNT_ID:memory/MEMORY_ID" } ] }
Browser Tool
  1. 以下终端节点策略允许特定的 IAM 委托人连接到浏览器工具资源。

    { "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::ACCOUNT_ID:root" }, "Action": [ "bedrock-agentcore:ConnectBrowserAutomationStream" ], "Resource": "arn:aws:bedrock-agentcore:us-east-1:ACCOUNT_ID:browser/BROWSER_ID" } ] }
Gateway
  1. 以下是自定义端点策略的示例。当您将此策略附加到接口终端节点时,它允许所有委托人调用该Resource字段中指定的网关。

    { "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": [ "bedrock-agentcore:InvokeGateway" ], "Resource": "arn:aws:bedrock-agentcore:us-east-1:ACCOUNT_ID:gateway/my-gateway" } ] }
Identity
  1. 以下端点策略允许访问身份资源。

    { "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": [ "*" ], "Resource": "arn:aws:bedrock-agentcore:us-east-1:ACCOUNT_ID:workload-identity-directory/default/workload-identity/WORKLOAD_IDENTITY_ID" } ] }
Evaluations and Optimizations
  1. 以下终端节点策略允许特定的 IAM 委托人访问评估和优化操作。

    { "Statement": [ { "Sid": "AllowBatchEvaluations", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::ACCOUNT_ID:root" }, "Action": [ "bedrock-agentcore:StartBatchEvaluation", "bedrock-agentcore:GetBatchEvaluation", "bedrock-agentcore:ListBatchEvaluations", "bedrock-agentcore:StopBatchEvaluation", "bedrock-agentcore:DeleteBatchEvaluation" ], "Resource": "arn:aws:bedrock-agentcore:us-east-1:ACCOUNT_ID:batch-evaluate/*" }, { "Sid": "AllowRecommendations", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::ACCOUNT_ID:root" }, "Action": [ "bedrock-agentcore:StartRecommendation", "bedrock-agentcore:GetRecommendation", "bedrock-agentcore:ListRecommendations", "bedrock-agentcore:DeleteRecommendation" ], "Resource": "arn:aws:bedrock-agentcore:us-east-1:ACCOUNT_ID:recommendation/*" }, { "Sid": "AllowEvaluators", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::ACCOUNT_ID:root" }, "Action": [ "bedrock-agentcore:CreateEvaluator", "bedrock-agentcore:GetEvaluator", "bedrock-agentcore:ListEvaluators", "bedrock-agentcore:UpdateEvaluator", "bedrock-agentcore:DeleteEvaluator" ], "Resource": "arn:aws:bedrock-agentcore:us-east-1:ACCOUNT_ID:evaluator/*" }, { "Sid": "AllowOnlineEvaluationConfigs", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::ACCOUNT_ID:root" }, "Action": [ "bedrock-agentcore:CreateOnlineEvaluationConfig", "bedrock-agentcore:GetOnlineEvaluationConfig", "bedrock-agentcore:ListOnlineEvaluationConfigs", "bedrock-agentcore:UpdateOnlineEvaluationConfig", "bedrock-agentcore:DeleteOnlineEvaluationConfig" ], "Resource": "arn:aws:bedrock-agentcore:us-east-1:ACCOUNT_ID:online-evaluation-config/*" }, { "Sid": "AllowABTests", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::ACCOUNT_ID:root" }, "Action": [ "bedrock-agentcore:CreateABTest", "bedrock-agentcore:GetABTest", "bedrock-agentcore:ListABTests", "bedrock-agentcore:UpdateABTest", "bedrock-agentcore:DeleteABTest" ], "Resource": "arn:aws:bedrock-agentcore:us-east-1:ACCOUNT_ID:ab-test/*" }, { "Sid": "AllowConfigurationBundles", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::ACCOUNT_ID:root" }, "Action": [ "bedrock-agentcore:CreateConfigurationBundle", "bedrock-agentcore:GetConfigurationBundle", "bedrock-agentcore:GetConfigurationBundleVersion", "bedrock-agentcore:ListConfigurationBundles", "bedrock-agentcore:ListConfigurationBundleVersions", "bedrock-agentcore:UpdateConfigurationBundle", "bedrock-agentcore:DeleteConfigurationBundle" ], "Resource": "arn:aws:bedrock-agentcore:us-east-1:ACCOUNT_ID:configuration-bundle/*" } ] }