

# 高度なナレッジベースの設定
<a name="advanced-knowledge-base-settings"></a>

このソリューションでは、ナレッジベースのフィルタリングやロールベースのアクセスコントロールを使用した RAG などの高度なナレッジベース設定を使用できます。ナレッジベースのフィルタリングは、どちらのナレッジベースでも適用できます。一方、ロールベースのアクセスコントロールを使用した RAG は Amazon Kendra で利用できます。

## ナレッジベースのフィルタリング
<a name="knowledge-base-filtering"></a>

このソリューションでは、ウィザードのナレッジベースステップの [Advanced RAG configurations] セクションでユースケースをデプロイする際に、[[Amazon Kendra attribute filters]](https://docs.aws.amazon.com/kendra/latest/APIReference/API_AttributeFilter.html) または [[Bedrock knowledge base retrieval filters]](https://docs.aws.amazon.com/bedrock/latest/userguide/kb-test-config.html)を指定できます。これらのフィルターを使用すると、検索戦略、クエリ対象の基盤となるドキュメントの言語など、ナレッジベースのデータソースのクエリ方法を定義できます。

いずれの場合も、JSON オブジェクトを使用して、各サービスドキュメント (上記のリンク参照) で指定した形式に従ってフィルター設定を指定します。

 *例 1: Kendra AttributeFilter* 

```
{
 "EqualsTo": {
 "Key": "_language_code",
 "Value": {
 "StringValue": "es"
 }
 }
}
```

 *例 2: Bedrock RetrievalFilter* 

```
{
 "equals": {
 "key": "language",
 "value": "es"
 }
}
```

## Amazon Kendra によるロールベースのアクセスコントロールを備えた RAG
<a name="rag-rbac-with-kendra"></a>

 [ロールベースアクセスコントロール (RBAC)](https://docs.aws.amazon.com/kendra/latest/dg/create-index-access-control.html) を使用すると、Amazon Kendra インデックス内の特定のドキュメントにアクセスしたり、検索結果で特定のドキュメントを表示したりできるユーザーまたはグループを管理できます。AWS での生成 AI アプリケーションビルダー (GAAB) のユースケースを使用して Amazon Kendra インデックス ID の RBAC を設定するには、次の手順を実行します。

 **1. Amazon Kendra インデックスを設定する** 

1. Amazon Kendra インデックスが作成済みで、少なくとも 1 つのデータソースが追加されていることを確認します。

1. ユーザーグループに基づいてデータソースのアクセスコントロールを設定します。S3 データソースの場合は、[ドキュメントの手順に従って](https://docs.aws.amazon.com/kendra/latest/dg/s3-acl.html)、Amazon Cognito ユーザープールで作成したグループ名と同じグループ名を使用してアクセスコントロールリスト (ACL) を設定します。これにより、ユーザーはグループメンバーシップに基づいて表示権限が付与されたドキュメントと検索結果にのみアクセスできるようになります。

**注記**  
作成した Kendra インデックスの **[ユーザーアクセスコントロール]** で、**[トークンベースのユーザーアクセスコントロール]** を **[いいえ]** のままにします。ステップ 2 で **[ロールベースのアクセスコントロール]** を有効にすると、AWS での生成 AI アプリケーションビルダーはユーザー認証トークンから適切なクレームを抽出し、属性フィルターを作成します。

 **2. GAAB デプロイウィザードを使用して RAG ユースケースをデプロイする** 

1. GAAB デプロイウィザードの画面に表示されるウィザードの指示に従ってウィザードのステップ 4 まで進み、RAG を設定します。

1. デプロイウィザードの **[Select Knowledge Base]** ステップで、ナレッジベースタイプとして **[Amazon Kendra]** を選択します。

1. 既存の Amazon Kendra インデックスを使用するか、新しい Index を作成するかを指定します。既存のインデックスがある場合は、ユーザーグループに基づいてアクセスコントロールリスト (ACL) を設定済みの Amazon Kendra インデックスの ID を指定します。

1. **[Role Based Access Control]** オプションを有効にします。このオプションを使用することで、Amazon Kendra インデックスから返される検索結果が、ユーザーのロールとグループのアクセス許可に基づいてフィルタリングされるようになります。

1. ユースケースを確認してデプロイします。

 **3. Amazon Cognito を設定する** 

1. GAAB デプロイで使用する Amazon Cognito ユーザープールを検索します。この Amazon Cognito ユーザープールは通常、メインデプロイダッシュボードの CloudFormation スタックが作成したものです。

1. Amazon Cognito ユーザープールに新しいユーザーを作成します。ユーザーを作成する際は、[Send an email invitation] オプションを選択して、ユーザーが E メールで一時的なログイン認証情報を受け取るようにします。これにより、新しいユーザーがサインアップして GAAB アプリケーションにアクセスできるようになります。

1. Amazon Cognito ユーザープールにユーザーグループを作成します。グループ名が Amazon Kendra インデックス ACL で設定されているグループと完全に一致していることを確認します。ユーザーがアクセスできる検索結果はグループのメンバーシップによって決まるため、これは、RBAC を有効にする上で非常に重要です。

1. ユーザーのロールとアクセス許可に基づいて、ユーザーを適切なグループに割り当てます。ユーザーは、Amazon Kendra インデックス ACL に必要なグループと、GAAB デプロイ中に作成されたユースケース固有のグループの両方に追加する必要があります。これにより、特定のユースケースと関連する検索結果にアクセスするために必要なアクセス許可がユーザーに付与されます。

このような手順を実行すると、GAAB デプロイにロールベースのアクセスコントロール (RBAC) を設定でき、ユーザーは割り当てられたユーザーグループとアクセス許可に基づいて、承認済みの情報と機能のみにアクセスして操作できるようになります。

**注記**  
現時点では、AWS での生成 AI アプリケーションビルダーでナレッジベースの RBAC をサポートしているのは Amazon Kendra のみです。Amazon Bedrock ナレッジベースでは RBAC はサポートされていませんが、メタデータフィルターを使用してある程度のフィルタリングを行うことができます。詳細については、「[Amazon Bedrock ユーザーガイド](https://docs.aws.amazon.com/bedrock/latest/userguide/kb-test-config.html)」を参照してください。