View a markdown version of this page

安全性和访问控制 - Amazon Bedrock AgentCore
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)。

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

安全性和访问控制

该安全带为您提供了与其余安全原语相同的安全原语 AgentCore,并通过配置进行连接。

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

  • IAM 执行角色。该工具承担您拥有的 IAM 角色,可配置为包括 Bedrock、ECR 和它所涉及 AgentCore 的原语。 CloudWatch请参阅下面的执行角色策略示例。

    注意

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

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

  • 入站 OAuth Support。JWT 配置的 Harness 资源要求呼叫者在调用安全带之前出示由已配置的身份提供商颁发的有效 JWT。AgentCore I@@ d entity 通过代理线程化最终用户身份,因此下游工具可以使用限定范围的用户凭据而不是共享服务帐户调用 API。

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

  • 网关上的策略。当通过 AgentCore Gateway 提供工具时,可以配置用 Dogwood 或 Cedar 编写的策略来控制每个呼叫:呼叫者可以调用哪些代理操作、在什么条件下、使用哪些参数。

注意

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

责任共担模式

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

Amazon 职责:
  • 硬件级别的安全基础设施和 microVM 隔离

  • 操作系统内核修补

  • 用于直接部署代码的语言运行时补丁

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

  • 网络基础设施安全

  • 服务可用性和弹性

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

  • IAM 访问控制和资源策略

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

  • Session-to-user 测绘执法

  • 输入验证和提示注入预防-包括验证所有InvokeHarness输入(参见信任边界和输入验证)

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

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

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

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

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

信任边界和输入验证

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

如果您向不完全信任的最终用户(员工、外部消费者或第三方集成)公开该工具,请在将消息传递给应用程序层之前对其进行验证和消毒。InvokeHarness这包括删除您不想分发的内容块类型或模型配置字段。这与任何接受来自授权调用者的有效负载的服务(例如 Lambda、Amazon API Gateway 和 Amazon 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", } } } ] }], )

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

仍然支持返回工具结果。线束在最终消息中接受 ToolResult 块,然后模型恢复对该结果的推理。对于内联函数工具,该工具会将模型生成toolUse和待执行的存储在会话中。仅toolResult在以后使用相同内容的InvokeHarness请求中发送匹配项runtimeSessionId。没有匹配的待处理移交的结果无法恢复内联函数。

模型配置参数

中的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 中部署安全带。

例
Amazon 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 I@@ d entity 通过代理线程化最终用户身份,因此下游工具可以使用限定范围的用户凭据而不是共享服务帐户调用 API。

例
Amazon 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 arn ess,然后进入高级设置。使用 Spac e 启用身份验证(以及 VPC 访问的网络),然后按 Enter。

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

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

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

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

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

    输入 VPC 子网 ID

确认向导,然后运行agentcore deploy以应用。

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

网关策略

当通过 AgentCore Gateway 提供工具时,用 Dogwood 或 Cedar 编写的策略会限制每次调用:调用者可以调用哪些代理操作、在什么条件下、使用哪些参数。

了解更多: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

InvokeAgentRuntimeCommandShell

bedrock-agentcore:InvokeAgentRuntimeCommandShell

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。

可选功能的额外权限

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

生命周期挂钩目标

为生命周期挂钩中配置的每个 Lambda、SNS 或 EventBridge 目标添加权限。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "InvokeLifecycleHookLambda", "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "<hookFunctionArn>" }, { "Sid": "PublishLifecycleHookSns", "Effect": "Allow", "Action": "sns:Publish", "Resource": "<hookTopicArn>" }, { "Sid": "PublishLifecycleHookEventBridge", "Effect": "Allow", "Action": "events:PutEvents", "Resource": "<hookEventBusArn>" } ] }

将每个资源替换为挂钩配置中的确切目标 ARN,包括 Lambda 版本或别名限定符(如果存在)。移除该工具不使用的目标类型的语句。对于跨账户目标,还要将目标的基于资源的策略配置为允许利用框架执行角色。

私有 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 模式下,该工具从线束区域的私有 Amazon ECR 存储库(已命名harness-<region>)中提取其托管应用程序容器。此拉取使用私有 ECR 而不是 Amazon ECR Public,因此执行角色需要私有 ECR 拉取权限。此政策与自定义容器镜像权限是分开的,即使您不提供自己的容器,它也适用于 Amazon 托管映像。

仓库归 Amazon 服务账户所有,因此仓库 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>" } ] }

亚马逊 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>

您的资源部署的地 Amazon 区。

<accountId>

您的 Amazon 账户 ID。

<agentName>

你的安全带代理的名字。

<agentNameAbbrv>

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

<memoryId>

您的 AgentCore 内存资源的 ID。

<browserCustomId>

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

<codeInterpreterCustomId>

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

<gatewayId>

您的 AgentCore 网关资源的 ID。

<apiKeyName>

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

<skillBucket>

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

<oauthProviderName>

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

<ecrRegion>

托管 ECR 存储库的区域。

<ecrAccountId>

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

<ecrRepoName>

您的 ECR 存储库的名称。

<hookFunctionArn>

Lambda 生命周期挂钩目标的 ARN,包括版本或别名限定符(如果存在)。

<hookTopicArn>

SNS 生命周期挂钩目标的 ARN。

<hookEventBusArn>

EventBridge 生命周期挂钩目标的 ARN。

注意

Secrets Manager 资源的尾-*随机解释了 Secrets Manager 附加到机密 ARN 的随机后缀。