按工作负载身份缩小对凭证提供者的访问范围
您可以使用 IAM 策略来控制哪些工作负载身份可以访问特定的凭证提供商。这样可以实现精细的访问控制,确保只有经过授权的代理才能检索特定服务的凭证。
注意
您分配给代理的 IAM 角色控制代理可以调用哪些凭证提供商。该服务不会在同一账户中的工作负载身份和凭证提供者之间强制执行额外的绑定。要遵循最低权限做法,请将您的 IAM 策略Resource封锁范围限定为特定的工作负载身份和凭证提供商 ARN,而不是使用。*
成功调用证书提供者并不意味着证书会自动返回。工作负载检索的凭证的范围限于其工作负载访问令牌中的用户身份。对于 OAuth2 (3LO) 提供商,最终用户必须先完成授权,然后才存在任何凭据才能检索该工作负载身份和用户组合。
访问控制机制
-
基于工作负载身份的限制 — 限制凭证提供者对特定工作负载身份的访问权限
-
Resource-level 权限-使用 ARN-based 策略控制对各个凭证提供者的访问权限
-
Directory-level 控件-管理工作负载身份目录级别的访问权限
-
凭证提供者范围界定 — 通过在策略块中包含凭证提供商 ARN 来限制工作负载身份可以访问的凭证提供商
Resource
IAM 策略示例
以下示例演示如何创建基于工作负载身份和凭证提供商限制凭证提供商访问的 IAM 策略。
限制对特定 API 密钥凭证提供商的访问权限
此策略允许工作负载身份仅从特定的凭据提供商检索 API 密钥。区块中的凭证提供者 ARN 限制Resource对该提供商的访问。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "GetResourceApiKey", "Effect": "Allow", "Action": [ "bedrock-agentcore:GetResourceApiKey" ], "Resource": [ "arn:aws:bedrock-agentcore:us-east-1:<account_id>:workload-identity-directory/default", "arn:aws:bedrock-agentcore:us-east-1:<account_id>:workload-identity-directory/default/workload-identity/<workload-identity-name>", "arn:aws:bedrock-agentcore:us-east-1:<account_id>:token-vault/default", "arn:aws:bedrock-agentcore:us-east-1:<account_id>:token-vault/default/api-key/<provider-name>" ] } ] }
限制对特定的 OAuth2 凭证提供商的访问权限
此策略允许工作负载身份仅从特定的 OAuth2 凭据提供商那里检索 OAuth2 令牌。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "GetResourceOauth2Token", "Effect": "Allow", "Action": [ "bedrock-agentcore:GetResourceOauth2Token" ], "Resource": [ "arn:aws:bedrock-agentcore:us-east-1:<account_id>:workload-identity-directory/default", "arn:aws:bedrock-agentcore:us-east-1:<account_id>:workload-identity-directory/default/workload-identity/<workload-identity-name>", "arn:aws:bedrock-agentcore:us-east-1:<account_id>:token-vault/default", "arn:aws:bedrock-agentcore:us-east-1:<account_id>:token-vault/default/oauth2-credential-provider/<provider-name>" ] } ] }
允许多个工作负载身份访问凭证提供者
此策略允许多个工作负载身份从同一个凭证提供商检索 API 密钥。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "GetResourceApiKeyMultipleIdentities", "Effect": "Allow", "Action": [ "bedrock-agentcore:GetResourceApiKey" ], "Resource": [ "arn:aws:bedrock-agentcore:us-east-1:<account_id>:workload-identity-directory/default", "arn:aws:bedrock-agentcore:us-east-1:<account_id>:workload-identity-directory/default/workload-identity/agent-1", "arn:aws:bedrock-agentcore:us-east-1:<account_id>:workload-identity-directory/default/workload-identity/agent-2", "arn:aws:bedrock-agentcore:us-east-1:<account_id>:workload-identity-directory/default/workload-identity/agent-3", "arn:aws:bedrock-agentcore:us-east-1:<account_id>:token-vault/default", "arn:aws:bedrock-agentcore:us-east-1:<account_id>:token-vault/default/api-key/<provider-name>" ] } ] }
拒绝访问特定的凭证提供商
您可以使用Deny语句明确拒绝工作负载身份访问特定凭证提供商。拒绝语句优先于 Allow 语句,因此它们对于创建防护栏很有用。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyAccessToSensitiveProvider", "Effect": "Deny", "Action": [ "bedrock-agentcore:GetResourceApiKey", "bedrock-agentcore:GetResourceOauth2Token" ], "Resource": [ "arn:aws:bedrock-agentcore:us-east-1:<account_id>:token-vault/default/api-key/<sensitive-provider-name>", "arn:aws:bedrock-agentcore:us-east-1:<account_id>:token-vault/default/oauth2-credential-provider/<sensitive-provider-name>" ] } ] }
为不同的凭证提供者使用单独的工作负载身份
如果您需要不同的代理来访问不同的凭证提供商,请使用单独的 IAM 角色创建单独的工作负载身份。每个 IAM 角色的范围仅限于代理所需的凭证提供商。
例如,如果代理 A 应该只访问提供者 X,而代理 B 应该只访问提供商 Y:
-
创建工作负载标识
agent-a和工作负载标识agent-b -
使用仅允许访问提供商 X 的策略创建 IAM 角色
AgentARole -
使用仅允许访问提供商 Y 的策略创建 IAM 角色
AgentBRole -
将每个工作负载身份与其相应的 IAM 角色相关联
代理 A 的 IAM 政策(仅限访问提供商 X)
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AgentAAccessProviderX", "Effect": "Allow", "Action": [ "bedrock-agentcore:GetResourceApiKey" ], "Resource": [ "arn:aws:bedrock-agentcore:us-east-1:<account_id>:workload-identity-directory/default", "arn:aws:bedrock-agentcore:us-east-1:<account_id>:workload-identity-directory/default/workload-identity/agent-a", "arn:aws:bedrock-agentcore:us-east-1:<account_id>:token-vault/default", "arn:aws:bedrock-agentcore:us-east-1:<account_id>:token-vault/default/api-key/provider-x" ] } ] }
代理 B 的 IAM 政策(仅限提供商 Y 的访问权限)
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AgentBAccessProviderY", "Effect": "Allow", "Action": [ "bedrock-agentcore:GetResourceApiKey" ], "Resource": [ "arn:aws:bedrock-agentcore:us-east-1:<account_id>:workload-identity-directory/default", "arn:aws:bedrock-agentcore:us-east-1:<account_id>:workload-identity-directory/default/workload-identity/agent-b", "arn:aws:bedrock-agentcore:us-east-1:<account_id>:token-vault/default", "arn:aws:bedrock-agentcore:us-east-1:<account_id>:token-vault/default/api-key/provider-y" ] } ] }
实现步骤
要对凭证提供者实施基于工作负载身份的访问控制,请执行以下操作:
-
识别您的工作负载身份-
aws bedrock-agentcore-control list-workload-identities用于列出您账户中的所有工作负载身份。有关创建和管理工作负载身份的信息,请参阅使用 Identity 管理工作负载身 AgentCore 份。 -
确定凭证提供商 ARN-确定您要控制访问权限的特定凭证提供商。凭证提供商 ARN 遵循以下格式:
-
arn:aws:bedrock-agentcore:<region>:<account_id>:token-vault/default/api-key/<provider-name> -
arn:aws:bedrock-agentcore:<region>:<account_id>:token-vault/default/oauth2-credential-provider/<provider-name>
-
-
创建 IAM 策略 — 编写 IAM 策略来指定哪些工作负载身份可以访问哪些凭证提供商
-
将策略附加到角色-将策略附加到您的代理或应用程序使用的 IAM 角色
-
测试访问控制-验证只有经过授权的工作负载身份才能访问指定的凭据提供程序
最佳实践
-
使用工作负载标识的描述性名称来简化策略管理
-
在
Resource区块中加入凭证提供商 ARN 以将访问权限范围限定到特定提供商,而不是向账户中的所有提供商授予访问权限 -
当不同的代理需要访问不同的凭证提供商时,使用单独的工作负载身份和 IAM 角色
-
使用明确的
Deny声明来创建防护栏,防止访问敏感凭证提供者,无论其他策略如何 -
定期审计和审查访问策略,确保它们符合您的安全要求
-
考虑根据时间、IP 地址或其他因素使用 IAM 策略条件进行额外的访问控制
-
在将策略应用于生产工作负载之前,先在开发环境中对其进行测试