

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

# 托管知识库的资源策略
<a name="kb-managed-cross-account"></a>

基于资源的策略是您直接附加到托管知识库的 JSON 文档。它控制哪些 IAM 委托人可以在知识库上执行操作，从而启用跨账户访问等用例。该政策支持两者兼`Allow`而有`Deny`之。

**重要**  
Resource-based 只有托管知识库（类型`MANAGED`）才支持策略。矢量知识库（类型`VECTOR`）不支持资源策略。

## 支持的操作
<a name="kb-managed-cross-account-supported-actions"></a>

可以在知识库资源策略中使用以下操作：


****  

| 处理建议 | 说明 | 
| --- | --- | 
| bedrock:Retrieve | 查询知识库并从数据源检索相关结果。 | 
| bedrock:GetDocumentContent | 从知识库数据源检索特定文档的完整内容。 | 

**注意**  
Control-plane 资源策略中不能使用诸如`GetKnowledgeBase``UpdateKnowledgeBase``DeleteKnowledgeBase`、、和数据源管理操作之类的操作。这些操作必须由知识库所有者账户中的委托人执行。

## 资源政策要求
<a name="kb-managed-cross-account-resource-policy"></a>

知识库资源策略遵循标准的 IAM 策略语法。有关策略元素和评估逻辑的详细信息，请参阅*AWS Identity and Access Management 用户指南*[中的 IAM JSON 策略元素参考](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html)。

以下特定于服务的限制适用：
+ **仅托管知识库。**资源策略只能附加到类型的知识库`MANAGED`。尝试将资源策略附加到`VECTOR`类型知识库会返回错误。
+ **支持的操作。**只能在资源策略中使用`bedrock:Retrieve`和`bedrock:GetDocumentContent`。
+ **资源或操作中没有通配符。**您必须在`Resource`元素中指定完整的知识库 ARN，并明确列出每个操作。这些元素不支持通配符。

## 跨账户访问的工作原理
<a name="kb-managed-cross-account-how-it-works"></a>

Cross-account access 允许其他 AWS 账户的委托人致电`Retrieve`并`GetDocumentContent`访问您的知识库。要使用跨账户访问权限，必须满足以下两个条件：
+ 知识库所有者附加了一个资源策略，该策略向调用主体授予访问权限。
+ 调用方具有基于身份的策略，允许对知识库 ARN 进行相应的 Amazon Bedrock 操作。

有关 IAM 如何评估跨账户访问权限的更多信息，请参阅 AWS Identity and Access Management 用户指南中的[Cross-account 策略评估逻辑](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic-cross-account.html)。

**示例：授予跨账户访问权限**

以下资源策略向另一个账户中的特定 IAM 角色授予调用`Retrieve`和的权限`GetDocumentContent`：

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowCrossAccountRetrieve",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::{{CONSUMER_ACCOUNT_ID}}:role/{{service-role-name}}"
            },
            "Action": [
                "bedrock:Retrieve",
                "bedrock:GetDocumentContent"
            ],
            "Resource": "arn:aws:bedrock:{{REGION}}:{{OWNER_ACCOUNT_ID}}:knowledge-base/{{KB_ID}}"
        }
    ]
}
```

**向多个委托人授予访问权限**

要向多个使用角色授予访问权限，请将每个角色 ARN 列`Principal.AWS`为一个数组：

```
"Principal": {
    "AWS": [
        "arn:aws:iam::{{ACCOUNT_ID_1}}:role/{{role-name-1}}",
        "arn:aws:iam::{{ACCOUNT_ID_2}}:role/{{role-name-2}}"
    ]
}
```

要向其他账户中的所有委托人授予访问权限，请使用账户 root 作为委托人：

```
"Principal": {
    "AWS": "arn:aws:iam::{{CONSUMER_ACCOUNT_ID}}:root"
}
```

## 使用 “拒绝” 语句
<a name="kb-managed-cross-account-deny"></a>

资源策略支持两者兼`Allow`而有`Deny`之。资源策略`Deny`中的显式优先于委托人基于身份的策略`Allow`中的任何内容。

```
{
    "Sid": "DenySpecificPrincipals",
    "Effect": "Deny",
    "Principal": {
        "AWS": "arn:aws:iam::{{ACCOUNT_ID}}:role/{{role-name}}"
    },
    "Action": [
        "bedrock:Retrieve",
        "bedrock:GetDocumentContent"
    ],
    "Resource": "arn:aws:bedrock:{{REGION}}:{{OWNER_ACCOUNT_ID}}:knowledge-base/{{KB_ID}}"
}
```

## 管理资源策略
<a name="kb-managed-cross-account-manage-policies"></a>

要管理知识库上的资源策略，知识库所有者的 IAM 委托人需要以下权限：


****  

| 处理建议 | 说明 | 
| --- | --- | 
| bedrock:PutResourcePolicy | 在知识库中附加或更新基于资源的策略。 | 
| bedrock:GetResourcePolicy | 查看附加到知识库的基于资源的政策。 | 
| bedrock:DeleteResourcePolicy | 从知识库中删除基于资源的策略。 | 

**知识库所有者的策略示例**

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "bedrock:PutResourcePolicy",
                "bedrock:GetResourcePolicy",
                "bedrock:DeleteResourcePolicy"
            ],
            "Resource": "arn:aws:bedrock:{{REGION}}:{{ACCOUNT_ID}}:knowledge-base/{{KB_ID}}"
        }
    ]
}
```

**API 操作**

**PutResourcePolicy**— 在知识库中附加或替换基于资源的策略。

```
PUT /resourcepolicy/{{{knowledgeBaseArn}}} HTTP/1.1
Content-Type: application/json

{
    "policy": "{{{policyDocument}}}"
}
```

该`policy`字段是一个包含策略文档的 JSON-escaped 字符串。

**GetResourcePolicy**— 返回当前附加到知识库的基于资源的策略。

```
GET /resourcepolicy/{{{knowledgeBaseArn}}} HTTP/1.1
```

`ResourceNotFoundException`如果未附加任何策略，则返回。

**DeleteResourcePolicy**— 从知识库中删除基于资源的策略。

```
DELETE /resourcepolicy/{{{knowledgeBaseArn}}} HTTP/1.1
```

## 资源策略版本控制
<a name="kb-managed-cross-account-version-parameter"></a>

当您调用时`PutResourcePolicy`，API `policyRevisionId` 会返回表示策略的当前版本的。您可以选择在后续`PutResourcePolicy`调用中包含此修订版 ID 以强制执行乐观锁定。
+ 如果您提供的与当前版本`policyRevisionId`相匹配，则更新成功并返回新的修订版 ID。
+ 如果您提供的与当前版本`policyRevisionId`不匹配（因为另一位委托人同时更新了策略），则调用将失败并显示冲突错误。检索当前策略，合并您的更改，然后重试。
+ 如果省略，则无论是否同时进行任何修改`policyRevisionId`，都将无条件地替换该策略。

当多个管理员或自动化系统可能同时更新相同的知识库策略时，请使用修订版 ID，以防止意外覆盖。

## 设置消费者账户
<a name="kb-managed-cross-account-identity-policy"></a>

在使用者账户中，将基于身份的策略附加到需要访问共享知识库的委托人。该政策必须允许所有者账户对知识库 ARN 进行相应的 Amazon Bedrock 操作。

**基于身份的策略示例**

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "bedrock:Retrieve",
                "bedrock:GetDocumentContent"
            ],
            "Resource": "arn:aws:bedrock:{{REGION}}:{{OWNER_ACCOUNT_ID}}:knowledge-base/{{KB_ID}}"
        }
    ]
}
```