

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

# 在 Amazon Bedrock 知识库中使用 OpenSearch 托管集群所需的先决条件和权限
<a name="kb-osm-permissions-prereq"></a>

本节向您展示在使用 Amazon S OpenSearch ervice 托管集群创建自己的矢量数据库时如何配置权限。此配置必须在创建知识库之前执行。这些步骤假设您已经在 Amazon S OpenSearch ervice 中创建了域和向量索引。有关更多信息，请参阅《*亚马逊 OpenSearch 服务开发者指南》中的创建和管理 OpenSearch 服务*[域](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/createupdatedomains.html)。

## 重要注意事项
<a name="kb-osm-permissions-prereq-considerations"></a>

以下是在亚马逊 OpenSearch 服务托管集群中使用 Amazon Bedrock 知识库时的一些关键注意事项。
+ 在 OpenSearch 托管集群中使用任何域资源之前，您需要配置某些 IAM 访问权限和策略。要将知识库与托管集群集成，在执行本节中的步骤之前，如果您的域有限制性访问策略，则必须授予所需的 IAM 访问权限，并配置基于资源的策略。我们还建议您配置精细的访问控制以缩小权限范围。
+ 在为知识库摄取数据时，如果遇到故障，则可能表示 OpenSearch 域容量不足，无法处理摄取速度。要解决此问题，请通过预调配更高的 IOPS（每秒进行输入/输出操作的次数）和提高吞吐量设置来增加域的容量。等待几分钟以预调配新容量，然后重试摄取过程。要验证问题是否已解决，可以在重试过程中监控性能。如果限制仍然存在，可能需要进一步调整容量以提高效率。有关更多信息，请参阅 [Amazon OpenSearch 服务最佳运营实践](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 用户界面（仪表板）（如果尚未创建）。这将用于配置角色映射。

1. 在 OpenSearch 控制面板中，创建 OpenSearch 角色并指定向量索引名称以及集群和索引权限。要添加权限，必须创建权限组，然后添加所需的权限，以授予对角色执行一系列操作（包括 `delete`、`search`、`get` 和 `index`）的访问权限。

1. 添加所需权限后，必须为后 OpenSearch 端角色输入知识库服务角色的 ARN。执行此步骤将完成您的知识库服务角色与角色之间的映射，然后授予 Amazon Bedrock 知识库访问 OpenSearch 域中的矢量索引并执行所需操作的权限。 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 操作的权限。如果您的域有限制性访问策略，则可能会阻止您的角色执行这些操作。下面显示了基于资源的限制性策略示例。

在这种情况下，您可以：
+ 使用现有的 IAM 角色创建知识库，您的 OpenSearch 域可以向该角色授予该角色的访问权限，以执行必要的操作。
+ 也可以让 Amazon Bedrock 为您创建一个新角色。在这种情况下，您必须确保域的访问策略必须授予您账户中的角色执行必要的 OpenSearch API 操作的权限。

以下各节显示了一个授予必要权限的 IAM 策略示例，以及如何更新域的访问策略，使其授予执行必要 OpenSearch API 操作的权限。

**Topics**
+ [IAM 基于身份和基于资源的策略示例](#kb-osm-permissions-iam)
+ [创建 Amazon Bedrock 知识库服务角色](#kb-osm-permissions-slr)
+ [更新基于资源的策略](#kb-osm-permissions-console-rbp)

## IAM 基于身份和基于资源的策略示例
<a name="kb-osm-permissions-iam"></a>

本节提供身份策略示例和基于资源的策略，在与 Amazon Bedrock 知识库集成时，您可以为 OpenSearch 域配置这些策略。您必须授予 Amazon Bedrock 权限，才能对您为知识库提供的索引执行这些操作。


****  

| Action | 资源 | 说明 | 
| --- | --- | --- | 
| 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_cn/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_cn/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. 选择 Embeddings 模型，然后在 **“选择现有矢量存储”** 下选择 **Amazon OpenSearch 托管集群**。

**重要**  
在继续创建知识库之前，请完成以下步骤以配置基于资源的策略和精细访问策略。有关创建知识库的详细步骤，请参阅[在 Amazon Bedrock 知识库中通过连接到数据来源创建知识库](knowledge-base-create.md)。

## 更新基于资源的策略
<a name="kb-osm-permissions-console-rbp"></a>

如果您的 OpenSearch 域名有限制性访问策略，则可以按照本页上的说明更新基于资源的策略。这些权限允许知识库使用您提供的索引，并检索 OpenSearch 域定义以对域执行所需的验证。

**要从中配置基于资源的策略 AWS 管理控制台**

1. 前往[亚马逊 OpenSearch 服务控制台](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 服务后，您可以使用控制 OpenSearch 面板链接为每个域配置权限。 OpenSearch 

**要为域配置权限以允许访问 Amazon Bedrock，请执行以下操作：**

1. 打开您要使用的 OpenSearch 域名的 OpenSearch 控制面板。要找到指向仪表板的链接，请转到您在 OpenSearch 服务控制台中创建的域。对于正在运行的域名 OpenSearch，URL 的格式为`domain-endpoint/_dashboards/`。有关更多信息，请参阅 *Amazon OpenSearch 服务开发者指南*中的[控制面板](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/dashboards.html)。

1. 在 “ OpenSearch 控制面板” 中，选择 “**安全**”，然后选择 “**角色**”。

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 仪表板中创建的用于添加群集和索引权限的操作组。\]](http://docs.aws.amazon.com/zh_cn/bedrock/latest/userguide/images/kb/kb-test-os-action-groups.png)

1. 选择 “**创建**” 以创建 OpenSearch 角色。

下面显示了一个添加了权限的示例 OpenSearch 角色。

![\[OpenSearch 仪表板中添加了权限的示例 OpenSearch 角色。\]](http://docs.aws.amazon.com/zh_cn/bedrock/latest/userguide/images/kb/kb-test-os-dashboards-permissions.png)


**创建映射到知识库服务角色的角色**

1. 确定需要映射的 IAM 角色。
   + 如果您创建了自己的自定义 IAM 角色，则可以从 IAM 控制台复制该角色的 ARN。
   + 如果允许知识库为您创建角色，则可以在创建知识库时记下角色 ARN，然后复制此角色 ARN。

1. 打开您要使用的 OpenSearch 域名的 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 角色并对域和索引执行所需的操作。