

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

# 搭配 Amazon Bedrock 知識庫使用 OpenSearch 受管叢集所需的先決條件和許可
<a name="kb-osm-permissions-prereq"></a>

本節說明如何在使用 Amazon OpenSearch Service 受管叢集建立自己的向量資料庫時設定許可。必須先執行此組態，才能建立知識庫。這些步驟假設您已在 Amazon OpenSearch Service 中建立網域和向量索引。如需詳細資訊，請參閱《Amazon OpenSearch Service 開發人員指南》**中的[建立和管理 OpenSearch Service 網域](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/createupdatedomains.html)。

## 關鍵考量
<a name="kb-osm-permissions-prereq-considerations"></a>

以下是搭配 Amazon OpenSearch Service 受管叢集使用 Amazon Bedrock 知識庫的一些重要考量事項。
+ 在 OpenSearch 受管叢集中使用任何網域資源之前，您需要設定特定 IAM 存取許可和政策。對於知識庫與受管叢集的整合，執行本節中的步驟之前，如果您的網域具有限制存取政策，您必須授予必要的 IAM 存取並設定資源型政策。我們也建議您設定精細的存取控制，以縮小許可的範圍。
+ 擷取知識庫的資料時，如果遇到失敗，可能表示 OpenSearch 網域容量不足以處理擷取速度。若要解決此問題，請透過佈建較高的 IOPS (每秒輸入/輸出操作數) 和增加輸送量設定來增加網域的容量。等待幾分鐘以佈建新容量，然後重試擷取程序。若要確認問題已解決，您可以在重試程序期間監控效能。如果限流仍然存在，您可能需要進一步調整容量以提高效率。如需詳細資訊，請參閱 [Amazon OpenSearch Service 的操作最佳實務](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/bp.html)。

## 許可組態概觀
<a name="kb-osm-permissions-prereq-overview"></a>

若要將知識庫與受管叢集整合，您需要設定下列 IAM 存取許可和資源型政策。我們建議您啟用精細的存取政策，以進一步控制使用者存取及其必須縮小至屬性層級的精細程度。

下列步驟提供如何設定許可的高階概觀。

1. 

**建立和使用知識庫服務角色**

   對於您要設定的許可，雖然您仍然可以提供自己的自訂角色，我們建議您指定選項，讓 Amazon Bedrock 知識庫為您建立知識庫服務角色。

1. 

**設定資源型政策**

   OpenSearch 網域支援資源型政策，以決定哪些主體可以存取網域並對其採取行動。若要搭配使用知識庫，請確保網域的資源型政策組態正確。

1. 

***(強烈建議)* 為精細的存取控制提供角色對應**

   雖然精細的存取控制是選用的，但建議您啟用它來控制精細程度，在屬性層級必須縮小許可範圍。

## 設定 IAM 政策
<a name="kb-osm-permissions-iam"></a>

您網域的存取政策必須授予許可，讓您帳戶中角色執行所需的 OpenSearch API 動作。

如果您的網域具有限制性存取政策，則可能需要更新，如下所示：
+ 它應該授予 Amazon Bedrock 服務的存取權，並包含必要的 HTTP 動作：`GET`、`POST`、`PUT` 和 `DELETE`。
+ 它也必須授予 Amazon Bedrock 在您的索引資源上執行 `es:DescribeDomain` 動作的許可。這可讓 Amazon Bedrock 知識庫在設定知識庫時執行必要的驗證。

## (選用) 精細的存取控制
<a name="kb-osm-permissions-console-fgap"></a>

精細的存取控制可以控制在屬性層級必須縮小許可範圍精細程度。您可以設定精細的存取政策，將所需的讀寫許可授予知識庫建立的服務角色。

若要設定精細的存取控制並提供角色對應：

1. 請確定您建立的 OpenSearch 網域已啟用精細的存取控制。

1. 如果您尚未建立 OpenSearch UI (Dashboards)，請予以建立。這將用於設定角色對應

1. 在您的 OpenSearch Dashboards 中，建立 OpenSearch 角色並指定向量索引名稱，以及叢集和索引許可。若要新增許可，您必須建立許可群組，然後新增必要的許可，以授予對角色執行一組操作的存取權，包括 `delete`、`search`、`get` 和 `index`。

1. 新增必要的許可之後，您必須輸入 OpenSearch 後端角色的知識庫服務角色 ARN。執行此步驟將完成知識庫服務角色與 OpenSearch 角色之間的對應，然後授予 Amazon Bedrock 知識庫存取 OpenSearch 網域中向量索引的許可，並執行必要的操作。

**Topics**
+ [關鍵考量](#kb-osm-permissions-prereq-considerations)
+ [許可組態概觀](#kb-osm-permissions-prereq-overview)
+ [設定 IAM 政策](#kb-osm-permissions-iam)
+ [(選用) 精細的存取控制](#kb-osm-permissions-console-fgap)
+ [設定 OpenSearch 受管叢集的資源型政策](kb-osm-permissions-slr-rbp.md)
+ [使用精細的存取控制設定 OpenSearch 許可](kb-osm-permissions-console-fgap.md)

# 設定 OpenSearch 受管叢集的資源型政策
<a name="kb-osm-permissions-slr-rbp"></a>

建立知識庫時，您可以建立自己的自訂角色，或讓 Amazon Bedrock 為您建立一個角色。設定許可的方式取決於您是建立新角色還是使用現有角色。如果您已經有現有的 IAM 角色，您必須確保網域的存取政策不會防止帳戶中的角色執行必要的 OpenSearch API 動作。

如果您選擇讓 Amazon Bedrock 知識庫為您建立 IAM 角色，您必須確保網域的存取政策授予許可，讓您帳戶中的角色執行必要的 OpenSearch API 動作。如果您的網域具有限制性存取政策，其可能會防止您的角色執行這些動作。以下顯示限制性資源型政策的範例。

在這種情況下，您可以：
+ 使用 OpenSearch 網域可以授予此角色存取權的現有 IAM 角色建立知識庫，以執行必要的操作。
+ 或者，您可以讓 Amazon Bedrock 為您建立新的角色。在此情況下，您必須確保網域的存取政策必須授予許可，讓您帳戶中的角色執行必要的 OpenSearch API 動作。

以下各節顯示授予必要許可的範例 IAM 政策，以及如何更新網域的存取政策，以便授予執行必要 OpenSearch API 操作的許可。

**Topics**
+ [範例身分型和資源型政策](#kb-osm-permissions-iam)
+ [建立 Amazon Bedrock 知識庫服務角色](#kb-osm-permissions-slr)
+ [更新資源型政策](#kb-osm-permissions-console-rbp)

## 範例身分型和資源型政策
<a name="kb-osm-permissions-iam"></a>

本節提供範例身分政策和資源型政策，您可以在與 Amazon Bedrock 知識庫整合時為 OpenSearch 網域設定這些政策。您必須授予 Amazon Bedrock 許可，才能對您提供知識庫的索引執行這些動作。


****  

| Action | 資源 | Description | 
| --- | --- | --- | 
| es:ESHttpPost | arn:<partition>:es:<region>:<accountId>:domain/<domainName>/<indexName> | 用於將資訊插入至索引 | 
| es:ESHttpGet |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/bedrock/latest/userguide/kb-osm-permissions-slr-rbp.html)  | 用於從索引搜尋資訊。此動作是在 domain/index 層級和 domain/index/\$1 層級上設定的。在 domain/index 層級，它可以取得有關索引的高階詳細資訊，例如引擎類型。若要擷取儲存在索引中的詳細資訊，domain/index/\$1 層級需要許可。 | 
| es:ESHttpHead |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/bedrock/latest/userguide/kb-osm-permissions-slr-rbp.html)  | 用於從索引取得資訊。此動作是在 domain/index 層級和 domain/index/\$1 層級上設定的，以防需要在更高層級取得資訊，例如特定索引是否存在。 | 
| es:ESHttpDelete | arn:<partition>:es:<region>:<accountId>:domain/<domainName>/<indexName> | 用於刪除索引的資訊 | 
| es:DescribeDomain | arn:<partition>:es:<region>:<accountId>:domain/<domainName> | 用於對網域執行驗證，例如使用的引擎版本。 | 

### 範例身分型政策
<a name="kb-osm-permissions-idpolicy"></a>

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "OpenSearchIndexAccess",
            "Effect": "Allow",
            "Action": [
                "es:ESHttpGet",
                "es:ESHttpPost",
                "es:ESHttpPut",
                "es:ESHttpDelete"
            ],
            "Resource": [
                "arn:aws:es:us-east-1:123456789012:domain/domainName/indexName/*"
            ]
        },
        {
            "Sid": "OpenSearchIndexGetAccess",
            "Effect": "Allow",
            "Action": [
                "es:ESHttpGet",
                "es:ESHttpHead"
            ],
            "Resource": [
            "arn:aws:es:us-east-1:123456789012:domain/domainName/indexName"
            ]
        },
        {
            "Sid": "OpenSearchDomainValidation",
            "Effect": "Allow",
            "Action": [
                "es:DescribeDomain"
            ],
            "Resource": [
            "arn:aws:es:us-east-1:123456789012:domain/domainName"
            ]
        }
    ]
}
```

------

### 範例資源型政策
<a name="kb-osm-permissions-rbp"></a>

**注意**  
請確定已建立服務角色，以便在資源型政策中使用。

## 建立 Amazon Bedrock 知識庫服務角色
<a name="kb-osm-permissions-slr"></a>

建立知識庫時，您可以選擇建立和使用新服務角色的選項。本節會逐步引導您建立 Amazon Bedrock 知識庫服務角色。透過將資源型政策和精細的存取政策對應到此角色，它將授予 Amazon Bedrock 向 OpenSearch 網域提出請求的許可。

**若要指定 Amazon Bedrock 知識庫服務角色：**

1. 在 Amazon Bedrock 主控台中，前往[知識庫](https://console.aws.amazon.com/bedrock/home#/knowledge-bases)。

1. 選擇**建立**，然後選擇**具有向量存放區的知識庫**。

1. 選擇**建立並使用新的服務角色**。您可以使用預設值，或提供自訂角色名稱，Amazon Bedrock 會自動為您建立知識庫服務角色。

1. 繼續透過主控台來設定資料來源，以及剖析和分塊策略。

1. 選擇嵌入模型，然後在**選擇現有的向量存放區**下，選擇 **Amazon OpenSearch 受管叢集**。

**重要**  
在您繼續建立知識庫之前，請完成下列步驟，以設定資源型政策和精細的存取政策。如需建立知識庫的詳細步驟，請參閱 [透過連線至 Amazon Bedrock 知識庫中的資料來源來建立知識庫](knowledge-base-create.md)。

## 更新資源型政策
<a name="kb-osm-permissions-console-rbp"></a>

如果您的 OpenSearch 網域具有限制性存取政策，您可以遵循此頁面上的指示來更新資源型政策。這些許可允許知識庫使用您提供的索引，並擷取 OpenSearch 網域定義，以對網域執行必要的驗證。

**從 設定資源型政策 AWS 管理主控台**

1. 前往 [Amazon OpenSearch Service 主控台](https://console.aws.amazon.com/aos/home?region=us-east-1#opensearch/dashboard)。

1. 前往您已建立的網域，然後前往設定資源型政策的**安全組態**。

1. 在 **JSON** 索引標籤中編輯政策，然後更新類似於 [範例資源型政策](#kb-osm-permissions-rbp) 的政策。

1. 您現在可以返回 Amazon Bedrock 主控台，並提供 OpenSearch 網域和索引的詳細資訊，如[受管叢集的知識庫設定](knowledge-base-setup.md#knowledge-base-setup-osm)中所述。

# 使用精細的存取控制設定 OpenSearch 許可
<a name="kb-osm-permissions-console-fgap"></a>

雖然為選用，我們強烈建議您為 OpenSearch 網域啟用精細的存取控制。使用精細的存取控制，您可以使用角色型存取控制，可讓您建立具有特定許可的 OpenSearch 角色，並將其對應至知識庫服務角色。對應會授予您的知識庫最低必要許可，允許其存取 OpenSearch 網域和索引並對其執行操作。

若要設定和使用精細的存取控制：

1. 請確定您使用的 OpenSearch 網域已啟用精細的存取控制。

1. 對於使用精細的存取控制的網域，以 OpenSearch 角色的形式設定縮小政策範圍的許可。

1. 對於您為其建立角色的網域，請將角色對應新增至知識庫服務角色。

下列步驟說明如何設定 OpenSearch 角色，並確保 OpenSearch 角色與知識庫服務角色之間的正確對應。

**建立 OpenSearch 角色並設定許可**  
啟用精細的存取控制並將 Amazon Bedrock 設定為連線至 OpenSearch Service 之後，您可以使用每個 OpenSearch 網域的 OpenSearch Dashboards 連結來設定許可。

**若要設定網域的許可以允許存取 Amazon Bedrock：**

1. 開啟 OpenSearch Dashboards，找到您要使用的 OpenSearch 網域。若要尋找 Dashboards 的連結，請前往您在 OpenSearch Service 主控台中建立的網域。對於執行 OpenSearch 的網域，URL 的格式為 `domain-endpoint/_dashboards/`。如需詳細資訊，請參閱《Amazon OpenSearch Service 開發人員指南》**中的 [Dashboards](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/dashboards.html)。

1. 在 OpenSearch Dashboards 中，選擇**安全性**，然後選擇**角色**。

1. 選擇建**立角色**。

1. 提供角色的任何名稱，例如 **kb\$1opensearch\$1role**。

1. 在**叢集許可**下，新增下列許可。
   + `indices:data/read/msearch`
   + `indices:data/write/bulk*`
   + `indices:data/read/mget*`

1. 在**索引許可**下，提供向量索引的名稱。選擇**建立新的許可群組**，然後選擇**建立新的動作群組**。將下列許可新增至動作群組，例如 `KnowledgeBasesActionGroup`。將下列許可新增至動作群組。
   + `indices:admin/get`
   + `indices:data/read/msearch`
   + `indices:data/read/search`
   + `indices:data/write/index`
   + `indices:data/write/update`
   + `indices:data/write/delete`
   + `indices:data/write/delete/byquery`
   + `indices:data/write/bulk*`
   + `indices:admin/mapping/put`
   + `indices:data/read/mget*`  
![\[在 OpenSearch Dashboards 中建立的動作群組，用於新增叢集和索引許可。\]](http://docs.aws.amazon.com/zh_tw/bedrock/latest/userguide/images/kb/kb-test-os-action-groups.png)

1. 選擇**建立**以建立 OpenSearch 角色。

以下顯示新增許可的範例 OpenSearch 角色。

![\[OpenSearch Dashboards 中新增許可的範例 OpenSearch 角色。\]](http://docs.aws.amazon.com/zh_tw/bedrock/latest/userguide/images/kb/kb-test-os-dashboards-permissions.png)


**建立角色對應至您的知識庫服務角色**

1. 識別需要對應的 IAM 角色。
   + 如果您建立了自己的自訂 IAM 角色，您可以從 IAM 主控台複製此角色的角色 ARN。
   + 如果您允許知識庫為您建立角色，您可以在建立知識庫時記下角色 ARN，然後複製此角色 ARN。

1. 開啟 OpenSearch Dashboards，找到您要使用的 OpenSearch 網域。URL 的格式為 `domain-endpoint/_dashboards/`。

1. 從導覽窗格中，選擇**安全**。

1. 搜尋您剛從清單中建立的角色，例如 **kb\$1opensearch\$1role**，然後開啟它。

1. 在**已對應的使用者**索引標籤上，選擇**管理對應**。

1. 在**後端角色**區段中，輸入知識庫受 AWS 管 IAM 角色的 ARN。根據您是否建立自己的自訂角色或讓知識庫為您建立角色，從 IAM 主控台或 Amazon Bedrock 主控台複製角色 ARN 資訊，然後在 OpenSearch 主控台中輸入**後端角色**的資訊。以下是範例。

   ```
   arn:aws:iam::<accountId>:role/service-role/<knowledge-base-service-role>
   ```

1. 選擇**對應**。

   知識庫服務角色現在可以連線至 OpenSearch 角色，並對網域和索引執行必要的操作。