

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

# 按工作负载身份缩小对凭证提供者的访问权限
<a name="scope-credential-provider-access"></a>

您可以使用 IAM 策略来控制哪些工作负载身份可以访问特定的凭证提供商。这样可以实现精细的访问控制，确保只有经过授权的代理才能检索特定服务的证书。

**注意**  
您分配给代理的 IAM 角色控制代理可以调用哪些凭证提供商。该服务不会在同一账户中的工作负载身份和凭证提供者之间强制执行额外绑定。要遵循最低权限做法，请将您的 IAM 策略`Resource`区块的范围限定为特定的工作负载身份和凭证提供商 ARN，而不是使用。`*`  
成功调用凭证提供者并不意味着证书会自动返回。工作负载检索的凭据仅限于其工作负载访问令牌中的用户身份。对于 OAuth2 (3LO) 提供商，最终用户必须先完成授权，然后才能检索该工作负载身份和用户组合的任何证书。

 **访问控制机制 ** 
+  **基于工作负载身份的限制 ** — 限制凭据提供者访问特定的工作负载身份
+  **Resource-level 权限 ** — 使用 ARN-based 策略控制对个人凭证提供者的访问权限
+  **Directory-level 控制 ** — 在工作负载身份目录级别管理访问权限
+  **凭证提供商范围界定 ** — 通过在策略块中加入凭据提供商 ARN 来限制工作负载身份可以访问的凭证提供商 `Resource`

**Topics**
+ [IAM 策略示例](#iam-policy-examples)
+ [拒绝访问特定的凭证提供商](#deny-credential-provider-access)
+ [为不同的凭证提供者使用单独的工作负载身份](#separate-identities-per-provider)
+ [实现步骤](#policy-implementation-steps)

## IAM 策略示例
<a name="iam-policy-examples"></a>

以下示例演示如何创建 IAM 策略，根据工作负载身份和凭证提供商限制凭证提供商的访问权限。

 **限制访问特定 API 密钥凭证提供商 ** 

此策略允许工作负载身份仅从特定的凭证提供商处检索 API 密钥。`Resource`区块中的凭证提供商 ARN 限制了对该提供商的访问。

```
{
"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>"
      ]
    }
  ]
}
```

## 拒绝访问特定的凭证提供商
<a name="deny-credential-provider-access"></a>

您可以使用`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>"
      ]
    }
  ]
}
```

## 为不同的凭证提供者使用单独的工作负载身份
<a name="separate-identities-per-provider"></a>

如果您需要不同的代理来访问不同的凭证提供商，请使用不同的 IAM 角色创建单独的工作负载身份。每个 IAM 角色的范围仅限于代理所需的凭证提供商。

例如，如果代理 A 应仅访问提供商 X，而代理 B 应仅访问提供商 Y：

1. 创建工作负载身份`agent-a`和工作负载身份 `agent-b` 

1. `AgentARole`使用仅允许访问提供商 X 的策略创建 IAM 角色

1. `AgentBRole`使用仅允许访问提供商 Y 的策略创建 IAM 角色

1. 将每个工作负载身份与其相应的 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"
      ]
    }
  ]
}
```

## 实现步骤
<a name="policy-implementation-steps"></a>

要为凭证提供者实现基于工作负载身份的访问控制，请执行以下操作：

1.  **识别您的工作负载身份 **-`aws bedrock-agentcore-control list-workload-identities` 用于列出您账户中的所有工作负载身份。有关创建和管理工作负载身份的信息，请参阅使用身份[管理工作负载身 AgentCore 份](identity-manage-agent-ids.md)。

1.  **确定凭证提供商 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>` 

1.  **创建 IAM 策略 ** — 编写 IAM 策略，指定哪些工作负载身份可以访问哪些凭证提供商

1.  **将策略附加到角色 **-将策略附加到代理或应用程序使用的 IAM 角色

1.  **测试访问控制 **-验证只有授权的工作负载身份才能访问指定的凭证提供商

 **最佳实践** 
+ 为工作负载身份使用描述性名称以简化策略管理
+ 在`Resource`区块中加入凭证提供商 ARN，将访问范围限定为特定提供商，而不是向账户中的所有提供商授予访问权限
+ 当不同的代理需要访问不同的凭证提供商时，使用单独的工作负载身份和 IAM 角色
+ 使用明确的`Deny`声明来创建防护栏，无论其他政策如何，都防止敏感凭证提供商的访问
+ 定期审核和审查访问政策，确保它们符合您的安全要求
+ 考虑使用 IAM 策略条件根据时间、IP 地址或其他因素进行额外的访问控制
+ 在将策略应用于生产工作负载之前，先在开发环境中对其进行测试