

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 受管知識庫的資源政策
<a name="kb-managed-cross-account"></a>

資源型政策是您直接連接到受管知識庫的 JSON 文件。它控制哪些 IAM 主體可以在知識庫上執行動作，啟用跨帳戶存取等使用案例。此政策同時支援 `Allow`和 `Deny`效果。

**重要**  
僅受管知識庫支援資源型政策 （類型 `MANAGED`)。向量知識庫 （類型 `VECTOR`) 不支援資源政策。

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

下列動作可用於知識庫資源政策：


****  

| Action | 說明 | 
| --- | --- | 
| bedrock:Retrieve | 查詢知識庫並從資料來源擷取相關結果。 | 
| bedrock:GetDocumentContent | 從知識庫資料來源擷取特定文件的完整內容。 | 

**注意**  
資源政策中無法使用控制平面操作`GetKnowledgeBase`，例如 `DeleteKnowledgeBase`、、 `UpdateKnowledgeBase`和資料來源管理操作。這些操作必須由知識庫擁有者帳戶中的主體執行。

## 資源政策需求
<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>

跨帳戶存取可讓其他 AWS 帳戶中的主體在您的知識庫`GetDocumentContent`上呼叫 `Retrieve`和 。若要讓跨帳戶存取正常運作，必須符合下列兩項條件：
+ 知識庫擁有者會連接資源政策，以授予呼叫委託人的存取權。
+ 呼叫主體具有身分型政策，允許知識庫 ARN 上對應的 Amazon Bedrock 動作。

如需 IAM 如何評估跨帳戶存取的詳細資訊，請參閱 AWS Identity and Access Management 《 使用者指南》中的[跨帳戶政策評估邏輯](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}}"
    ]
}
```

若要將存取權授予其他帳戶中的所有主體，請使用帳戶根做為主體：

```
"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 主體需要下列許可：


****  

| Action | 說明 | 
| --- | --- | 
| 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 逸出字串。

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