View a markdown version of this page

安全性和访问控制 - 亚马逊基岩 AgentCore

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

安全性和访问控制

该安全带为您提供与其他安全原件相同的安全原语 AgentCore,通过配置进行布线。

  • 隔离执行。在运行时,每个会话都在自己的 Firecracker microVM 中运行。 AgentCore 没有共享状态,没有共享文件系统。

  • IAM 执行角色。该工具假设您拥有一个 IAM 角色,可配置为包括 Bedrock CloudWatch、ECR 及其涉及 AgentCore 的原语。请参阅下面的执行角色策略示例。

    注意

    如果您的账户中启用了角色管理器,则会为您 AgentCore 附加角色,此处描述的角色选择步骤将替换为 “自定义” 选项。要使用其它角色,请选择自定义。有关更多信息,请参阅《IAM 用户指南》中的 IAM 角色创建。

  • IAM 权限模型。Harness API 需要对工具资源和底层AgentCore 运行时资源都具有权限。例如,呼叫既InvokeHarness需要安全带 ARN 的bedrock-agentcore:InvokeAgentRuntime权限,bedrock-agentcore:InvokeHarness又需要权限。同样的模式也适用于控制平面操作:DeleteHarness要求bedrock-agentcore:UpdateAgentRuntimebedrock-agentcore:DeleteAgentRuntime、UpdateHarness要求等。有关完整列表,请参阅执行角色政策。

  • 入站 OAuth 支持。JWT 配置的 Harness 资源要求调用者出示配置的身份提供商颁发的有效 JWT,然后才能调用该工具。AgentCore Id entity 通过代理将最终用户身份串联起来,因此下游工具可以使用范围内的用户凭证而不是共享服务帐号调用 API。

  • VPC。将利用会话连接到您的 VPC,以私有访问内部资源。

  • 网关政策。当通过 AgentCore Gateway 提供工具时,可以将 Cedar-based 策略配置为对每次调用进行屏蔽:谁可以调用哪个工具、在什么条件下、使用哪些参数。

注意

SigV4 和每用户身份。当调用者使用 SigV4 (AWS IAM) 进行身份验证时,该工具不会将每个用户的身份传播到下游工具调用中。这意味着AgentCore 身份令牌库中的每用户凭证范围界定功能(例如用户范围的 OAuth 令牌存储和代表令牌交换)仅在呼叫者通过 OAuth 入站路径向 Bearer JWT 进行身份验证时才可用。如果您的用例需要为下游工具设定每个用户的凭据范围,请在工具上配置入站 OAuth。计划在未来的版本中推出对每用户身份的 SigV4 支持。

责任共担模式

该工具基于 AgentCore 运行时构建,安全边界相同:IAM 或 JWT 身份验证与微虚拟机隔离相结合。任何通过该门的委托人都可以使用安全带上配置的工具和功能,这使得呼叫者授权和输入验证成为客户的责任。

AWS 职责:
  • 硬件级别的安全基础设施和微虚拟机隔离

  • 操作系统内核补丁

  • 为直接代码部署提供语言运行时补丁

  • 托管线束运行时代码,包括验证请求结构是否InvokeHarness接受

  • 网络基础设施安全

  • 服务可用性和弹性

你的责任:
  • 代理代码安全和依赖关系管理

  • IAM 访问控制和资源策略

  • 在运行时会话中执行的命令的安全性

  • Session-to-user 测绘执法

  • 输入验证和防止即时注入-包括验证所有InvokeHarness输入(参见信任边界和输入验证)

  • 模型配置验证-例如additionalParamsapiBase、和modelId字段(参见模型配置参数)

  • 技能和说明来源-确保 S3 存储桶、Git 存储库和用于技能的 URL 包含可信内容(参见技能和指令)

  • 容器镜像更新(用于容器部署)-定期使用最新的安全基础映像进行重建

  • 网络配置(安全组、VPC 终端节点、路由表)

有关完整的 AgentCore 运行时分担责任模型,请参阅 AgentCore 运行时安全最佳实践。

信任边界和输入验证

任何通过 IAM 或 JWT 身份验证和授权门的委托人都可以访问完整的 microVM 会话,包括在工具上配置的工具和功能。该工具会验证其接受的请求的结构,但不会检查提示、屏幕内容的含义,也不会对代理实施行为限制。

如果您将安全带暴露给不完全信任的最终用户(员工、外部消费者或第三方集成),请在将消息传递给应用程序层之前对其进行验证和消毒。InvokeHarness这包括删除您不想分发的内容块类型或模型配置字段。这种模式与接受授权调用者(例如 Lambda、亚马逊 API 网关和亚马逊 SQS)的有效负载的任何服务相同。

注意

该工具会拒绝最终消息服务器端的toolUse块,如以下示例所示。对于AgentCore 运行时部署(非安全配置), AgentCore Runtime 不提供服务器端保护。在将输入传递给代理框架之前,您的代理入口点必须验证提示字段是否为字符串,并拒绝或删除toolUse内容块。请参阅 AgentCore Runtime 安全最佳实践。

工具只能根据模型推理来运行。该工具不接受InvokeHarness请求的最终消息中的 ToolUse 区块,因此调用者无法命名工具并直接调度该工具。

以下示例显示了将安全带配置为拒绝的请求。最后一条消息包含一个命名内置shell工具的toolUse区块:

response = client.invoke_harness( harnessArn=HARNESS_ARN, runtimeSessionId=SESSION_ID, messages=[{ "role": "assistant", "content": [ { "toolUse": { "toolUseId": TOOL_USE_ID, "name": "shell", "input": { "command": "pwd", } } } ] }], )

该工具不评估区块名称是哪个工具,因此这适用于内置的服务器端工具和调用中提供的内联函数。

仍然支持返回工具结果。该工具在最终消息中接受 ToolResult 模块,然后模型对该结果恢复推理。内联函数工具就是这样工作的:在同一个请求toolResult中,助手toolUse消息后面跟着,因此toolUse区块不在最终消息中。

模型配置参数

中的model字段InvokeHarness接受 additionalParams Bedrock、OpenAI 和 LitellM 配置。这些参数将原封不动地传递给基础模型提供者。安全带不验证、筛选或限制这些参数。

可以设置的呼叫者可additionalParams以:

  • 将请求重定向到任意端点 -LitellM 的aws_bedrock_runtime_endpoint参数会覆盖 Bedrock 端点 URL。调用者可以将签名的请求(包括 SigV4 签名和会话凭证)路由到信任模型配置中指定的端点。

  • 覆盖 HTTP 标头 -OpenAI 的extra_headers参数注入或覆盖向模型提供商发出的出站请求中的 HTTP 标头,包括标头。Authorization

  • 尝试假设 IAM 角色 -LitellM 的aws_role_name参数指示运行时在致电模型提供商之前代入不同的 IAM 角色。根据执行角色的sts:AssumeRole权限,尝试成功或失败。

  • 更改目标模型或区域 -modelId 和apiBase字段可以将推理完全重定向到不同的模型、区域或提供商。

如果您的应用程序向不完全信任的调用者公开InvokeHarness功能,请考虑在应用程序层中实现输入验证。示例包括:

  • 在转发请求之前删除该model字段或将其列入许可名单

  • 正在验证或删除 additionalParamsapiBase,以及 modelId

  • 如果不需要角色切换,则拒绝sts:AssumeRole执行角色

  • 使用 VPC 安全组确定线束网络访问的范围

技能和指令

技能是降价和脚本的捆绑包,该工具在调用时从 Amazon S3 或 Git 获取这些内容并注入到代理的上下文中。该工具将所有技能内容视为可信输入。在向代理提供技能的内容或来源之前,它不会验证、清理或检查技能的内容或来源。

您有责任做到以下几点:

  • 确保技能来源(S3 存储桶、Git 存储库、URL)可信且受访问控制

  • 在工具上配置技能内容(包括 markdown 说明和任何嵌入式脚本)之前,请先查看这些内容

  • 控制哪些委托人可以在每次调用时覆盖该skills字段,因为调用者可以将安全带指向任意 S3 或 Git 源

每次InvokeHarness通话可以覆盖技能。如果您的应用程序将呼叫者提供的输入转发给InvokeHarness,则呼叫者可以提供自己的包含任意指令或脚本的技能来源。缓解措施的示例包括:

  • 从呼叫者提供的请求中删除或忽略该skills字段

  • 将允许的 S3 前缀或 Git 存储库列入许可名单

可观测性和追踪相关性

该工具会自动将关联标识符传播到下游 AgentCore 原语(网关、内存、代码解释器、浏览器),以在中启用统一的跟踪视图。 CloudWatch这些标识符仅用于可观察性——它们从不用于授权或数据访问决策。

网络配置

默认情况下,安全带会话在公共网络上运行。要访问私有资源(数据库、内部 API、私有子网),请在您的 VPC 中部署安全带。

例
AWS CLI/boto3
aws bedrock-agentcore-control create-harness \ --harness-name "VpcHarness" \ --execution-role-arn "arn:aws:iam::123456789012:role/MyHarnessRole" \ --environment '{"agentCoreRuntimeEnvironment": {"networkConfiguration": {"networkMode": "VPC", "vpcConfig": {"securityGroupIds": ["sg-0abc1234def56789a"], "subnetIds": ["subnet-0abc1234def56789a"]}}}}'
AgentCore CLI
agentcore add harness --name internal-agent \ --network-mode VPC \ --subnets subnet-0abc1234def56789a \ --security-groups sg-0abc1234def56789a agentcore deploy
重要

在 VPC 模式下,该工具会在每个会话开始时从安全区域的私有 Amazon ECR 存储库中提取其托管应用程序容器。您的 VPC 不需要 NAT 网关或互联网访问权限即可实现此提取。取而代之的是,为com.amazonaws.<region>.ecr.dkr和创建接口 VPC 终端节点com.amazonaws.<region>.ecr.api,为其创建网关 VPC 终端节点com.amazonaws.<region>.s3,以便映像及其层在您的 VPC 内部解析。如果您的代理调用 Amazon Bedrock 进行推断,还要为创建一个接口终端节点。com.amazonaws.<region>.bedrock-runtime如果没有所需的端点,会话将由于图像提取超时而无法启动。执行角色必须允许从私有存储库中提取。请参阅执行角色政策。

有关其他网络配置指南,请参阅配置 AgentCore 运行时和内置工具 VPC 配置。有关通过入站 API 连接的信息 PrivateLink,请参阅 VPC 接口终端节点。

入站 OAuth

要求呼叫者出示由配置的身份提供商颁发的有效 JWT,然后才能调用安全带。AgentCore Id entity 通过代理将最终用户身份串联起来,因此下游工具可以使用范围内的用户凭证而不是共享服务帐号调用 API。

例
AWS CLI/boto3
aws bedrock-agentcore-control create-harness \ --harness-name "OAuthHarness" \ --execution-role-arn "arn:aws:iam::123456789012:role/MyHarnessRole" \ --authorizer-configuration '{"customJWTAuthorizer": {"discoveryUrl": "https://cognito-idp.us-west-2.amazonaws.com/<POOL_ID>/.well-known/openid-configuration", "allowedClients": ["<CLIENT_ID>"]}}'

使用持有者令牌而不是 SigV4 凭据进行调用:

curl -X POST "https://bedrock-agentcore.us-west-2.amazonaws.com/harnesses/invoke?harnessArn=${HARNESS_ARN}" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer ${ID_TOKEN}" \ -H "X-Amzn-Bedrock-AgentCore-Runtime-Session-Id: $(uuidgen)" \ -d '{"messages": [{"role": "user", "content": [{"text": "Hi"}]}]}'
AgentCore CLI
agentcore add harness --name MyNewHarness \ --authorizer-type CUSTOM_JWT \ --discovery-url {DISCOVERY_URL} \ --allowed-clients {CLIENT_ID} agentcore deploy

使用持有者令牌调用:

agentcore invoke --harness MyNewHarness --bearer-token "{token}" "Hello"

如果只能通过身份提供商的 OIDC 发现端点访问 PrivateLink,请向 CUSTOM_JWT 授权方添加私有端点标志。使用服务管理的 VPC 终端节点:

agentcore add harness --name MyNewHarness \ --authorizer-type CUSTOM_JWT \ --discovery-url {DISCOVERY_URL} \ --allowed-clients {CLIENT_ID} \ --private-endpoint-vpc-id vpc-0abc1234def56789a \ --private-endpoint-subnets subnet-0abc1234def56789a,subnet-0def5678abc12349b \ --private-endpoint-ip-type IPV4 \ --private-endpoint-security-groups sg-0abc1234def56789a agentcore deploy

或者指向现有的 VPC Lattice 资源配置,而不是托管的 VPC 终端节点:

agentcore add harness --name MyNewHarness \ --authorizer-type CUSTOM_JWT \ --discovery-url {DISCOVERY_URL} \ --allowed-clients {CLIENT_ID} \ --private-endpoint-lattice-arn rcfg-0abc1234def56789a agentcore deploy
注意

私有端点标志仅对有效。--authorizer-type CUSTOM_JWT--private-endpoint-vpc-id并且--private-endpoint-lattice-arn是相互排斥的——选择一个。使用--private-endpoint-vpc-id,--private-endpoint-subnets和--private-endpoint-ip-type(IPV4或IPV6)均为必填项。

有关完整的 OAuth 设置流程,请参阅入站 JWT 授权方。

Interactive

在项目目录agentcore中运行,选择 “添加”,选择 “H ar ness”,然后进入高级设置。使用 Space 启用身份验证(以及 VPC 访问网络),然后按 Enter 。

  1. 选择授权方类型: AWS IAM(默认)或 OIDC 持有者令牌身份验证的自定义 JWT。

    选择安全带授权者类型
  2. 对于自定义 JWT,输入 OIDC 发现 URL。

    配置自定义 JWT:发现 URL
  3. 选择要验证的代币限制-允许的受众、允许的客户、允许的范围或自定义声明。

    选择要配置的 JWT 约束
  4. 选择安全带如何到达IdP发现终端节点:无(可公开访问)、 VPC Lattice资源或托管VPC终端节点(PrivateLink)。

    PrivateLink IdP 发现端点的选项
  5. 对于网络,选择 VPC 模式并提供子网 ID 和安全组 ID。

    输入 VPC 子网 ID

确认向导,然后运行agentcore deploy进行申请。

了解更多:AgentCore 身份·入站 JWT 授权方·出站凭证

网关策略

当通过 AgentCore G ateway 提供工具时, Cedar-based 政策会对每一次通话进行控制:谁可以调用哪个工具,在什么条件下,用什么论点。

了解更多:AgentCore 政策·常见模式

执行角色政策

该工具承担您提供的 IAM 执行角色。该角色的信任策略必须允许 AgentCore 服务主体假定:

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": {"Service": "bedrock-agentcore.amazonaws.com"}, "Action": "sts:AssumeRole" }] }

呼叫者所需的 IAM 权限

Harness API 需要对工具资源以及底层AgentCore 运行时和可选AgentCore 内存资源的权限。下表列出了每个 API 所需的操作:

API 所需的 IAM 操作

InvokeHarness

bedrock-agentcore:InvokeHarness, bedrock-agentcore:InvokeAgentRuntime

InvokeAgentRuntimeCommand

bedrock-agentcore:InvokeAgentRuntimeCommand, bedrock-agentcore:InvokeAgentRuntime

CreateHarness

bedrock-agentcore:CreateHarness, bedrock-agentcore:CreateAgentRuntime, bedrock-agentcore:CreateMemory

UpdateHarness

bedrock-agentcore:UpdateHarness, bedrock-agentcore:UpdateAgentRuntime, bedrock-agentcore:UpdateMemory

DeleteHarness

bedrock-agentcore:DeleteHarness, bedrock-agentcore:DeleteAgentRuntime, bedrock-agentcore:DeleteMemory

GetHarness

bedrock-agentcore:GetHarness

ListHarnesses

bedrock-agentcore:ListHarnesses

CreateHarnessEndpoint

bedrock-agentcore:CreateHarnessEndpoint, bedrock-agentcore:CreateAgentRuntimeEndpoint

UpdateHarnessEndpoint

bedrock-agentcore:UpdateHarnessEndpoint, bedrock-agentcore:UpdateAgentRuntimeEndpoint

DeleteHarnessEndpoint

bedrock-agentcore:DeleteHarnessEndpoint, bedrock-agentcore:DeleteAgentRuntimeEndpoint

GetHarnessEndpoint

bedrock-agentcore:GetHarnessEndpoint

ListHarnessEndpoints

bedrock-agentcore:ListHarnessEndpoints

ListHarnessVersions

bedrock-agentcore:ListHarnessVersions

大多数操作使用安全带 ARN 作为资源范围:arn:aws:bedrock-agentcore:<region>:<accountId>:harness/<id>. 端点操作还使用安全带端点 ARN: arn:aws:bedrock-agentcore:<region>:<accountId>:harness/<id>/harness-endpoint/<endpointName>。

GetHarnessEndpointUpdateHarnessEndpoint、和DeleteHarnessEndpoint操作需要安全带 ARN 和端点 ARN。CreateHarnessEndpoint只需要安全带 ARN。该端点尚不存在,因此不需要终端节点 ARN。当您调用自定义端点时,InvokeHarness同时InvokeAgentRuntimeCommand需要线束 ARN 和端点 ARN。

执行角色策略示例

以下示例涵盖了公共网络上的一个工具,该工具从 Amazon ECR Public 提取其托管容器镜像。VPC 模式下的工具从安全带区域的私有 Amazon ECR 存储库中提取托管映像,因此其执行角色也需要私有 ECR 提取权限。在 VPC 模式下添加语句:从私有 ECR 提取托管映像到 VPC-mode 工具的执行角色。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "BedrockModelInvocation", "Effect": "Allow", "Action": [ "bedrock:InvokeModel", "bedrock:InvokeModelWithResponseStream" ], "Resource": [ "arn:aws:bedrock:*::foundation-model/*", "arn:aws:bedrock:<region>:<accountId>:*" ] }, { "Sid": "EcrPublicTokenAccess", "Effect": "Allow", "Action": [ "ecr-public:GetAuthorizationToken" ], "Resource": "*" }, { "Sid": "StsForEcrPublicPull", "Effect": "Allow", "Action": [ "sts:GetServiceBearerToken" ], "Resource": "*" }, { "Sid": "XRayTracingAccess", "Effect": "Allow", "Action": [ "xray:PutTraceSegments", "xray:PutTelemetryRecords", "xray:GetSamplingRules", "xray:GetSamplingTargets" ], "Resource": "*" }, { "Sid": "CloudWatchLogsGroup", "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:DescribeLogStreams" ], "Resource": "arn:aws:logs:<region>:<accountId>:log-group:/aws/bedrock-agentcore/runtimes/*" }, { "Sid": "CloudWatchLogsDescribeGroups", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": "arn:aws:logs:<region>:<accountId>:log-group:*" }, { "Sid": "CloudWatchLogsStream", "Effect": "Allow", "Action": [ "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "arn:aws:logs:<region>:<accountId>:log-group:/aws/bedrock-agentcore/runtimes/*:log-stream:*" }, { "Sid": "CloudWatchLogsPutResourcePolicy", "Effect": "Allow", "Action": [ "logs:PutResourcePolicy" ], "Resource": "*" }, { "Sid": "CloudWatchMetricsPublish", "Effect": "Allow", "Resource": "*", "Action": "cloudwatch:PutMetricData", "Condition": { "StringEquals": { "cloudwatch:namespace": "bedrock-agentcore" } } }, { "Sid": "AgentCoreWorkloadIdentity", "Effect": "Allow", "Action": [ "bedrock-agentcore:GetWorkloadAccessToken", "bedrock-agentcore:GetWorkloadAccessTokenForJWT" ], "Resource": [ "arn:aws:bedrock-agentcore:<region>:<accountId>:workload-identity-directory/default", "arn:aws:bedrock-agentcore:<region>:<accountId>:workload-identity-directory/default/workload-identity/harness_<agentName>-*" ] }, { "Sid": "AgentCoreBrowserDefault", "Effect": "Allow", "Action": [ "bedrock-agentcore:StartBrowserSession", "bedrock-agentcore:StopBrowserSession", "bedrock-agentcore:GetBrowserSession", "bedrock-agentcore:ListBrowserSessions", "bedrock-agentcore:UpdateBrowserStream", "bedrock-agentcore:ConnectBrowserAutomationStream", "bedrock-agentcore:ConnectBrowserLiveViewStream" ], "Resource": "arn:aws:bedrock-agentcore:<region>:aws:browser/*" }, { "Sid": "AgentCoreCodeInterpreterDefault", "Effect": "Allow", "Action": [ "bedrock-agentcore:StartCodeInterpreterSession", "bedrock-agentcore:StopCodeInterpreterSession", "bedrock-agentcore:GetCodeInterpreterSession", "bedrock-agentcore:ListCodeInterpreterSessions", "bedrock-agentcore:InvokeCodeInterpreter" ], "Resource": "arn:aws:bedrock-agentcore:<region>:aws:code-interpreter/*" }, { "Sid": "AgentCoreMemory", "Effect": "Allow", "Action": [ "bedrock-agentcore:CreateEvent", "bedrock-agentcore:DeleteEvent", "bedrock-agentcore:GetEvent", "bedrock-agentcore:ListEvents", "bedrock-agentcore:RetrieveMemoryRecords" ], "Resource": "arn:aws:bedrock-agentcore:<region>:<accountId>:memory/harness_<agentNameAbbrv>_*" } ] }

当您搭建工具项目时, AgentCore CLI 会自动创建具有这些权限的角色。上述政策适用于您自己创建角色的情况。

注意

上面的BedrockModelInvocation示例语句允许在所有区域和账户中的所有 Bedrock 资源中调用所有基础模型。要缩小范围,请将资源 ARN 替换为特定的推理配置文件,这样您就可以使用单个 ARN 跨模型和区域路由请求。例如:与所有允许的区域arn:aws:bedrock:<destination_regions>:<accountId>:inference-profile/<profileId>配对arn:aws:bedrock:<region>:<accountId>:foundation-model/<modelId>。

对于生产工作负载,将Resource值范围缩小到您的安全带需要的特定 ARN,而不是使用"*"。

可选功能的额外权限

以下是您可以根据您的工具使用的功能向执行角色附加的示例策略。遵循最小权限原则-仅向您的工具代理授予推理所需的特定工具和证书。有关占位符占位符参考的定义,请参见。

私有 ECR 访问权限(自定义容器镜像)

当您的安全套为自定义容器使用私有 ECR 映像时,请添加此策略。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ECRImageAccess", "Effect": "Allow", "Action": [ "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage" ], "Resource": "arn:aws:ecr:<ecrRegion>:<ecrAccountId>:repository/<ecrRepoName>" }, { "Sid": "ECRTokenAccess", "Effect": "Allow", "Action": "ecr:GetAuthorizationToken", "Resource": "*" } ] }

VPC 模式:从私有 ECR 提取托管镜像

当您的安全带在 VPC 模式下运行时添加此策略。在 VPC 模式下,该工具从安全带区域(已命名harness-<region>)中的私有 Amazon ECR 存储库中提取其托管应用程序容器。此拉取使用私有 ECR 而不是 Amazon ECR 公共,因此执行角色需要私有 ECR 拉取权限。此政策与自定义容器映像权限分开 ——即使您不提供自己的容器,它也适用于 AWS 托管映像。

存储库归 AWS 服务帐号所有,因此存储库 ARN 中的账户使用通配符。拉取权限的范围仅限于线束区域。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "EcrManagedImagePull", "Effect": "Allow", "Action": [ "ecr:BatchGetImage", "ecr:GetDownloadUrlForLayer", "ecr:BatchCheckLayerAvailability" ], "Resource": "arn:aws:ecr:<region>:*:repository/harness-*" }, { "Sid": "EcrManagedImageToken", "Effect": "Allow", "Action": "ecr:GetAuthorizationToken", "Resource": "*" } ] }

确保您的 VPC 中存在所需的 VPC 终端节点(请参阅网络配置):com.amazonaws.<region>.ecr.dkr和com.amazonaws.<region>.ecr.api的接口终端节点和的网关终端节点com.amazonaws.<region>.s3。

AgentCore 记忆

当您的工具使用客户拥有的内存实例时,请添加此策略。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AgentCoreMemory", "Effect": "Allow", "Action": [ "bedrock-agentcore:CreateEvent", "bedrock-agentcore:DeleteEvent", "bedrock-agentcore:GetEvent", "bedrock-agentcore:ListEvents", "bedrock-agentcore:RetrieveMemoryRecords" ], "Resource": "arn:aws:bedrock-agentcore:<region>:<accountId>:memory/<memoryId>" } ] }

AgentCore 浏览器(自定义)

当您的工具使用客户拥有的自定义浏览器资源时,请添加此策略。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AgentCoreBrowserCustom", "Effect": "Allow", "Action": [ "bedrock-agentcore:StartBrowserSession", "bedrock-agentcore:StopBrowserSession", "bedrock-agentcore:GetBrowserSession", "bedrock-agentcore:ListBrowserSessions", "bedrock-agentcore:UpdateBrowserStream", "bedrock-agentcore:ConnectBrowserAutomationStream", "bedrock-agentcore:ConnectBrowserLiveViewStream" ], "Resource": "arn:aws:bedrock-agentcore:<region>:<accountId>:browser-custom/<browserCustomId>" } ] }

AgentCore 代码解释器(自定义)

当您的工具使用客户拥有的自定义代码解释器时,请添加此策略。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AgentCoreCodeInterpreterCustom", "Effect": "Allow", "Action": [ "bedrock-agentcore:StartCodeInterpreterSession", "bedrock-agentcore:StopCodeInterpreterSession", "bedrock-agentcore:GetCodeInterpreterSession", "bedrock-agentcore:ListCodeInterpreterSessions", "bedrock-agentcore:InvokeCodeInterpreter" ], "Resource": "arn:aws:bedrock-agentcore:<region>:<accountId>:code-interpreter-custom/<codeInterpreterCustomId>" } ] }

AgentCore 网关

当您的安全套使用配置有 SigV4 入站身份验证的网关时,请添加此策略。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AgentCoreGatewayAccess", "Effect": "Allow", "Action": "bedrock-agentcore:InvokeGateway", "Resource": "arn:aws:bedrock-agentcore:<region>:<accountId>:gateway/<gatewayId>" } ] }

Amazon S3 和 Git 中的技能来源

当您的工具从 Amazon S3 来源获取技能时,请添加此策略。执行角色列出并下载存储桶前缀下的技能对象。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AgentCoreSkillS3Access", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::<skillBucket>", "arn:aws:s3:::<skillBucket>/*" ] } ] }

要从私有 Git 存储库中获取技能,该工具会从 API 密钥凭证提供者那里读取个人访问令牌。为持有代币的凭证提供商授予如下所示的 API 密钥凭证提供者政策。

API 密钥凭证提供商(OpenAI、Gemini、LitellM 或 MCP 标头 ARN 参考信息)

当您的安全套使用 OpenAI、Gemini 或 LitellM 等模型提供商的 API 密钥凭证提供商时,请添加此策略。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AgentCoreApiKeyTokenVaultDefault", "Effect": "Allow", "Action": "bedrock-agentcore:GetResourceApiKey", "Resource": [ "arn:aws:bedrock-agentcore:<region>:<accountId>:token-vault/default", "arn:aws:bedrock-agentcore:<region>:<accountId>:workload-identity-directory/default", "arn:aws:bedrock-agentcore:<region>:<accountId>:workload-identity-directory/default/workload-identity/harness_<agentName>-*" ] }, { "Sid": "AgentCoreApiKeyTokenVaultPerKey", "Effect": "Allow", "Action": "bedrock-agentcore:GetResourceApiKey", "Resource": "arn:aws:bedrock-agentcore:<region>:<accountId>:token-vault/default/apikeycredentialprovider/<apiKeyName>" }, { "Sid": "AgentCoreApiKeySecret", "Effect": "Allow", "Action": "secretsmanager:GetSecretValue", "Resource": "arn:aws:secretsmanager:<region>:<accountId>:secret:bedrock-agentcore-identity!default/apikey/<apiKeyName>-*" } ] }

OAuth2 凭证提供商(网关)OAuth-protected

当您的工具使用 OAuth2 凭证提供商提供网关工具时,请添加此策略。 OAuth-protected

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AgentCoreOAuth2TokenVaultDefault", "Effect": "Allow", "Action": "bedrock-agentcore:GetResourceOauth2Token", "Resource": [ "arn:aws:bedrock-agentcore:<region>:<accountId>:token-vault/default", "arn:aws:bedrock-agentcore:<region>:<accountId>:workload-identity-directory/default", "arn:aws:bedrock-agentcore:<region>:<accountId>:workload-identity-directory/default/workload-identity/harness_<agentName>-*" ] }, { "Sid": "AgentCoreOAuth2TokenVaultPerProvider", "Effect": "Allow", "Action": "bedrock-agentcore:GetResourceOauth2Token", "Resource": "arn:aws:bedrock-agentcore:<region>:<accountId>:token-vault/default/oauth2credentialprovider/<oauthProviderName>" }, { "Sid": "AgentCoreOAuth2Secret", "Effect": "Allow", "Action": "secretsmanager:GetSecretValue", "Resource": "arn:aws:secretsmanager:<region>:<accountId>:secret:bedrock-agentcore-identity!default/oauth2/<oauthProviderName>-*" } ] }

占位符参考

将上述策略中的以下占位符替换为特定环境的值:

Placeholder 说明

<region>

部署资源的 AWS 区域。

<accountId>

您的 AWS 账户 ID。

<agentName>

您的安全带代理的名称。

<agentNameAbbrv>

默认 AgentCore 内存资源名称中使用的安全带代理名称的缩写形式。

<memoryId>

您的 AgentCore 内存资源的 ID。

<browserCustomId>

您的自定义浏览器资源的 ID。

<codeInterpreterCustomId>

您的自定义代码解释器资源的 ID。

<gatewayId>

您的 AgentCore 网关资源的 ID。

<apiKeyName>

您的 API 密钥凭证提供商的名称。

<skillBucket>

存放技能文件的 S3 存储桶的名称。

<oauthProviderName>

您的 OAuth2 凭证提供商的名称。

<ecrRegion>

托管您的 ECR 存储库的区域。

<ecrAccountId>

拥有 ECR 存储库的 AWS 账户 ID。

<ecrRepoName>

您的 ECR 存储库的名称。

注意

密钥管理器资源的尾-*部说明了密钥管理器附加到机密 ARN 的随机后缀。