安全性和访问控制
该安全带为您提供了与其他安全原语相同的安全原语 AgentCore,并通过配置进行连接。
-
孤立执行。在运行时,每个会话都在自己的 Firecracker microVM 中运行。AgentCore 没有共享状态,没有共享文件系统。
-
IAM 执行角色。该工具承担您拥有的 IAM 角色,可配置为包括 Bedrock、ECR 和它所涉及 AgentCore 的原语。 CloudWatch请参阅下面的执行角色策略示例。
-
IAM 权限模型。Harness API 需要对线束资源和底层AgentCore 运行时资源的权限。例如,调用
InvokeHarness需要对线束 ARNbedrock-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 提供工具时,可以配置 Cedar-based 策略来控制每次调用:谁可以调用哪个工具,在什么条件下,使用哪些参数。
注意
Sigv4 和每个用户的身份。当呼叫者使用 Sigv4 (AWS IAM) 进行身份验证时,该工具不会将每个用户的身份传播到下游工具调用中。这意味着AgentCore 身份令牌库中的每用户凭证范围界定功能(例如用户范围的 OAuth 令牌存储和代替令牌交换)仅在呼叫者通过 OAuth 入站路径向 Bearer JWT 进行身份验证时才可用。如果您的用例需要为下游工具设定每个用户的凭据范围,请在工具上配置入站 OAuth。计划在 future 版本中提供对每用户身份的 Sigv4 支持。
责任共担模式
该安全带建立在 R AgentCore untime 之上。安全边界是相同的:IAM 或 JWT 身份验证与 microVM 隔离相结合。该安全带不会在调用方和 microVM 之间添加安全层。
AWS 职责:
-
硬件级别的安全基础设施和 microVM 隔离
-
操作系统内核修补
-
用于直接部署代码的语言运行时补丁
-
网络基础设施安全
-
服务可用性和弹性
你的职责:
有关完整的 AgentCore 运行时分担责任模型,请参阅 AgentCore 运行时安全最佳实践。
信任边界和输入验证
所有InvokeHarnessInvokeAgentRuntimeCommand输入都是可信的。任何通过 IAM 或 JWT 身份验证和授权门禁的委托人都可以访问完整的 microVM 会话,包括该工具上配置的工具和功能。该工具不会清理输入、筛选内容块或强制执行行为约束。
如果您向不完全信任的最终用户(员工、外部消费者或第三方集成)公开该工具,请在将消息传递给应用程序层之前对其进行验证和消毒。InvokeHarness这包括删除您不想分发的内容块类型或模型配置字段。这与任何接受来自授权调用者的有效负载的服务(例如 Lambda、Amazon API Gateway 和 Amazon SQS)的模式相同。
模型配置参数
中的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 ECR Public 中提取其应用程序容器。在 VPC 模式下运行时,您的 VPC 必须允许出站访问public.ecr.aws。Amazon ECR Public 不支持 VPC 终端节点,因此您的 VPC 必须有一个带有通往互联网网关的路由的 NAT 网关。如果此连接不可用,则会话将由于图像拉取超时而无法启动。
有关其他网络配置指南,请参阅配置 AgentCore 运行时和内置工具 VPC 配置。有关通过进行的入站 API 连接 PrivateLink,请参阅 VPC 接口终端节点。
入站 OAuth
要求呼叫者在调用安全带之前出示由已配置的身份提供商签发的有效 JWT。AgentCore I@@ d entity 通过代理线程化最终用户身份,因此下游工具可以使用限定范围的用户凭据而不是共享服务帐户调用 API。
例
了解更多:AgentCore 身份·入站 JWT 授权机构·出站凭证
网关策略
当通过 AgentCore Gateway 提供工具时, 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 操作 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
大多数操作都使用线束 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。
执行角色策略示例
{ "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": "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/*" } ] }
当您搭建线束项目时, 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": "*" } ] }
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 | 说明 |
|---|---|
|
|
您的资源部署的地 AWS 区。 |
|
|
您的 AWS 账户 ID。 |
|
|
你的安全带代理的名字。 |
|
|
您的 AgentCore 内存资源的 ID。 |
|
|
您的自定义浏览器资源的 ID。 |
|
|
您的自定义代码解释器资源的 ID。 |
|
|
您的 AgentCore 网关资源的 ID。 |
|
|
您的 API 密钥凭证提供商的名称。 |
|
|
存放您的技能文件的 S3 存储桶的名称。 |
|
|
您的 OAuth2 凭证提供商的名称。 |
|
|
托管 ECR 存储库的区域。 |
|
|
拥有 ECR 存储库的 AWS 账户 ID。 |
|
|
您的 ECR 存储库的名称。 |
注意
Secrets Manager 资源的尾-*随机解释了 Secrets Manager 附加到机密 ARN 的随机后缀。