

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 構造化データストアを使用してナレッジベースを作成するためのクエリエンジンとアクセス許可を設定します
<a name="knowledge-base-prereq-structured"></a>

このトピックでは、ナレッジベースを構造化データストアに接続するときに必要なアクセス許可について説明します。Amazon Bedrock ナレッジベースを構造化データストアに接続する場合は、前提条件を満たす必要があります。一般的なアクセス許可要件を満たすには、「[ユーザーまたはロールがナレッジベースを作成および管理するためのアクセス許可を設定する](knowledge-base-prereq-permissions-general.md)」を参照してください。

**重要**  
任意の SQL クエリを実行すると、Text-to-SQL アプリケーションにとってセキュリティリスクになる可能性があります。制限されたロール、読み取り専用データベース、サンドボックスの使用など、必要に応じて予防措置を講じることをお勧めします。

Amazon Bedrock ナレッジベースは、データストアにクエリを実行するためのクエリエンジンとして Amazon Redshift を使用します。クエリエンジンは構造化データストアからメタデータにアクセスし、そのメタデータを使用して SQL クエリを生成します。Amazon Redshift は、SQL を使用してデータウェアハウス、データベース、データレイク全体の構造化データを分析するデータウェアハウスサービスです。

## Amazon Redshift クエリエンジンを作成する
<a name="kb-query-engine-setup-create"></a>

ユースケースに応じて Amazon Redshift Serverless または Amazon Redshift Provisioned を使用して、データウェアハウスのワークグループまたはクラスターに接続できます。Amazon Redshift エンジンがクエリできる基盤となるデータは、Amazon Redshift クラスターにネイティブに保存されるデータでも、デフォルト AWS Glue Data Catalog (Amazon S3 など) にあるデータでもかまいません。

クエリエンジンを既に作成している場合は、この前提条件をスキップできます。それ以外の場合は、次の手順を実行して Amazon Redshift Provisioned または Amazon Redshift Serverless のクエリエンジンを設定します。

**Amazon Redshift Provisioned でクエリエンジンを設定するには**

1. 「Amazon Redshift 入門ガイド」の「[ステップ 1: サンプルの Amazon Redshift クラスターを作成する](https://docs.aws.amazon.com/redshift/latest/gsg/new-user.html#rs-gsg-launch-sample-cluster)」に記載されている手順に従います。

1. クラスター ID を書き留めます。

1. (オプション) Amazon Redshift Provisioned クラスター の詳細については、「Amazon Redshift 管理ガイド」の「[Amazon Redshift でプロビジョニングされたクラスター](https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html)」を参照してください。

**Amazon Redshift Serverless でクエリエンジンを設定するには**

1. 「Amazon Redshift 入門ガイド」の「[Amazon Redshift Serverless によるデータウェアハウスの作成](https://docs.aws.amazon.com/redshift/latest/gsg/new-user-serverless.html#serverless-console-resource-creation)」の設定手順のみに従い、デフォルト設定で設定します。

1. ワークグループ ARN を書き留めます。

1. (オプション) Amazon Redshift Serverless ワークグループの詳細については、「Amazon Redshift 管理ガイド」の「[ワークグループと名前空間](https://docs.aws.amazon.com/redshift/latest/mgmt/serverless-workgroup-namespace.html)」を参照してください。

## Amazon Redshift クエリエンジンのアクセス許可を設定する
<a name="kb-query-engine-setup-redshift-permissions"></a>

選択した Amazon Redshift クエリエンジンに応じて、特定のアクセス許可を設定できます。設定するアクセス許可は、認証方法によって異なります。次の表は、さまざまなクエリエンジンに使用できる認証方法を示しています。


****  

| 認証方法 | Amazon Redshift Provisioned | Amazon Redshift Serverless | 
| --- | --- | --- | 
| IAM | ![\[Green circular icon with a white checkmark symbol inside.\]](http://docs.aws.amazon.com/ja_jp/bedrock/latest/userguide/images/icons/icon-yes.png) あり | ![\[Green circular icon with a white checkmark symbol inside.\]](http://docs.aws.amazon.com/ja_jp/bedrock/latest/userguide/images/icons/icon-yes.png) あり | 
| データベースユーザー名 | ![\[Green circular icon with a white checkmark symbol inside.\]](http://docs.aws.amazon.com/ja_jp/bedrock/latest/userguide/images/icons/icon-yes.png) あり | ![\[Red circular icon with an X symbol, indicating cancellation or denial.\]](http://docs.aws.amazon.com/ja_jp/bedrock/latest/userguide/images/icons/icon-no.png)なし | 
| AWS Secrets Manager | ![\[Green circular icon with a white checkmark symbol inside.\]](http://docs.aws.amazon.com/ja_jp/bedrock/latest/userguide/images/icons/icon-yes.png) あり | ![\[Green circular icon with a white checkmark symbol inside.\]](http://docs.aws.amazon.com/ja_jp/bedrock/latest/userguide/images/icons/icon-yes.png) あり | 

Amazon Bedrock ナレッジベースは、[サービスロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)を使用してナレッジベースを構造化データストアに接続し、これらのデータストアからデータを取得して、ユーザークエリとデータストアの構造に基づいて SQL クエリを生成します。

**注記**  
を使用してナレッジベース AWS マネジメントコンソール を作成する場合は、この前提条件をスキップできます。コンソールは、適切なアクセス許可を持つ Amazon Bedrock ナレッジベースサービスロールを作成します。

適切なアクセス許可を持つカスタム IAM サービスロールを作成するには、「[AWS のサービスにアクセス許可を委任するロールを作成する](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)」の手順に従い、[信頼関係](kb-permissions.md#kb-permissions-trust) で定義されている信頼関係をアタッチします。

次に、ナレッジベースが Amazon Redshift クエリエンジンとデータベースにアクセスするためのアクセス許可を追加します。ユースケースに該当するセクションを展開します。

### クエリエンジンは Amazon Redshift Provisioned である
<a name="w2aac28c10c27c13c11c15b1"></a>

カスタムサービスロールに次のポリシーをアタッチして、データにアクセスし、それを使用してクエリを生成できるようにします。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "RedshiftDataAPIStatementPermissions",
            "Effect": "Allow",
            "Action": [
                "redshift-data:GetStatementResult",
                "redshift-data:DescribeStatement",
                "redshift-data:CancelStatement"
            ],
            "Resource": [
                "*"
            ],
            "Condition": {
                "StringEquals": {
                    "redshift-data:statement-owner-iam-userid": "${aws:userid}"
                }
            }
        },
        {
            "Sid": "RedshiftDataAPIExecutePermissions",
            "Effect": "Allow",
            "Action": [
                "redshift-data:ExecuteStatement"
            ],
            "Resource": [
                "arn:aws:redshift:us-east-1:123456789012:cluster:${Cluster}"
            ]
        },
        {
            "Sid": "SqlWorkbenchAccess",
            "Effect": "Allow",
            "Action": [
                "sqlworkbench:GetSqlRecommendations",
                "sqlworkbench:PutSqlGenerationContext",
                "sqlworkbench:GetSqlGenerationContext",
                "sqlworkbench:DeleteSqlGenerationContext"
            ],
            "Resource": "*"
        },
        {
            "Sid": "GenerateQueryAccess",
            "Effect": "Allow",
            "Action": [
                "bedrock:GenerateQuery"
            ],
            "Resource": "*"
        }
    ]
}
```

------

また、サービスロールがクエリエンジンに対して認証できるようにするアクセス許可を追加する必要があります。セクションを展開すると、その方法のアクセス許可が表示されます。

------
#### [ IAM ]

サービスロールが IAM を使用して Amazon Redshift Provisioned クエリエンジンに対して認証できるようにするには、カスタムサービスロールに次のポリシーをアタッチします。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "GetCredentialsWithFederatedIAMCredentials",
            "Effect": "Allow",
            "Action": "redshift:GetClusterCredentialsWithIAM",
            "Resource": [
                "arn:aws:redshift:us-east-1:123456789012:dbname:Cluster/database"
            ]
        }
    ]
}
```

------

------
#### [ Database user ]

Amazon Redshift データベースユーザーとして認証するには、サービスロールに次のポリシーをアタッチします。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "GetCredentialsWithClusterCredentials",
            "Effect": "Allow",
            "Action": [
                "redshift:GetClusterCredentials"
            ],
            "Resource": [
                "arn:aws:redshift:us-east-1:123456789012:dbuser:${cluster}/${dbuser}",
                "arn:aws:redshift:us-east-1:123456789012:dbname:${cluster}/${database}"
            ]
        }
    ]
}
```

------

------
#### [ AWS Secrets Manager ]

サービスロールが AWS Secrets Manager シークレットを使用して Amazon Redshift でプロビジョニングされたクエリエンジンに対して認証できるようにするには、次の手順を実行します。
+ 次のポリシーをロールにアタッチします。

  ```
  {
      "Version": "2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "GetSecretPermissions",
              "Effect": "Allow",
              "Action": [
                  "secretsmanager:GetSecretValue"
              ],
              "Resource": [
                  "arn:aws:secretsmanager:${region}:${account}:secret:${secretName}"
              ]
          }
      ]
  }
  ```

------

### クエリエンジンが Amazon Redshift Serverless である
<a name="w2aac28c10c27c13c11c15b3"></a>

アタッチするアクセス許可は、認証方法によって異なります。セクションを展開して、方法のアクセス許可を表示します。

------
#### [ IAM ]

サービスロールが IAM を使用して Amazon Redshift Serverless クエリエンジンに対して認証できるようにするには、カスタムサービスロールに次のポリシーをアタッチします。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "RedshiftServerlessGetCredentials",
            "Effect": "Allow",
            "Action": "redshift-serverless:GetCredentials",
            "Resource": [
                "arn:aws:redshift-serverless:us-east-1:123456789012:workgroup/WorkgroupId"
            ]
        }
    ]
}
```

------

------
#### [ AWS Secrets Manager ]

サービスロールが AWS Secrets Manager シークレットを使用して Amazon Redshift でプロビジョニングされたクエリエンジンに対して認証できるようにするには、次の手順を実行します。
+ 次のポリシーをロールにアタッチします。

  ```
  {
      "Version": "2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "GetSecretPermissions",
              "Effect": "Allow",
              "Action": [
                  "secretsmanager:GetSecretValue"
              ],
              "Resource": [
                  "arn:aws:secretsmanager:${region}:${account}:secret:${secretName}"
              ]
          }
      ]
  }
  ```

------

## データストアへのアクセスをナレッジベースサービスロールに許可する
<a name="knowledge-base-prereq-structured-db-access"></a>

次の[サポートされている構造化データストア](knowledge-base-structured-create.md)のいずれかにデータが保存されていることを確認します。
+ Amazon Redshift
+ AWS Glue Data Catalog (AWS Lake Formation)

次の表は、データストアに応じて、クエリエンジンで使用できる認証方法をまとめたものです。


****  

| 認証方法 | Amazon Redshift | AWS Glue Data Catalog (AWS Lake Formation) | 
| --- | --- | --- | 
| IAM | ![\[Green circular icon with a white checkmark symbol inside.\]](http://docs.aws.amazon.com/ja_jp/bedrock/latest/userguide/images/icons/icon-yes.png) あり | ![\[Green circular icon with a white checkmark symbol inside.\]](http://docs.aws.amazon.com/ja_jp/bedrock/latest/userguide/images/icons/icon-yes.png) あり | 
| データベースユーザー名 | ![\[Green circular icon with a white checkmark symbol inside.\]](http://docs.aws.amazon.com/ja_jp/bedrock/latest/userguide/images/icons/icon-yes.png) あり | ![\[Red circular icon with an X symbol, indicating cancellation or denial.\]](http://docs.aws.amazon.com/ja_jp/bedrock/latest/userguide/images/icons/icon-no.png)なし | 
| AWS Secrets Manager | ![\[Green circular icon with a white checkmark symbol inside.\]](http://docs.aws.amazon.com/ja_jp/bedrock/latest/userguide/images/icons/icon-yes.png) あり | ![\[Red circular icon with an X symbol, indicating cancellation or denial.\]](http://docs.aws.amazon.com/ja_jp/bedrock/latest/userguide/images/icons/icon-no.png)なし | 

Amazon Bedrock ナレッジベースサービスロールがデータストアにアクセスし、それに基づいてクエリを生成するためのアクセス許可を設定する方法については、データストアがあるサービスに対応するセクションを展開します。

### Amazon Redshift
<a name="w2aac28c10c27c13c13c13b1"></a>

Amazon Bedrock ナレッジベースサービスロールに Amazon Redshift データベースへのアクセスを許可するには、[Amazon Redshift query editor v2](https://docs.aws.amazon.com/redshift/latest/mgmt/query-editor-v2.html) を使用して、次の SQL コマンドを実行します。

1. (IAM で認証し、ユーザーがデータベース用にまだ作成されていない場合) 次のコマンドを実行します。このコマンドでは、[CREATE USER](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_USER.html) を使用してデータベースユーザーを作成し、IAM による認証を許可します。*\$1\$1service-role\$1* を、作成したカスタム Amazon Bedrock ナレッジベースサービスロールの名前に置き換えます。

   ```
   CREATE USER "IAMR:${service-role}" WITH PASSWORD DISABLE;
   ```
**重要**  
コンソールで作成した Amazon Bedrock ナレッジベースサービスロールを使用し、このステップを実行する前に[データストアを同期](kb-data-source-structured-sync-ingest.md)すると、ユーザーは自動的に作成されますが、データストアへのアクセス許可がユーザーに付与されていないため、同期は失敗します。同期する前に、次のステップを実行する必要があります。

1. [GRANT](https://docs.aws.amazon.com/redshift/latest/dg/r_GRANT.html) コマンドを実行して、データベースから情報を取得するアクセス許可を ID に付与します。

------
#### [ IAM ]

   ```
   GRANT SELECT ON ALL TABLES IN SCHEMA ${schemaName} TO "IAMR:${serviceRole}";
   ```

------
#### [ Database user ]

   ```
   GRANT SELECT ON ALL TABLES IN SCHEMA ${schemaName} TO "${dbUser}";
   ```

------
#### [ AWS Secrets Manager username ]

   ```
   GRANT SELECT ON ALL TABLES IN SCHEMA ${schemaName} TO "${secretsUsername}";
   ```

------
**重要**  
`CREATE`、`UPDATE`、または `DELETE` アクセスを付与しないでください。これらのアクションを付与すると、データの意図しない変更につながる可能性があります。

   アクセス可能なテーブルをよりきめ細かく制御するには、`ALL TABLES` の特定のテーブル名を *\$1\$1schemaName\$1**\$1\$1tableName\$1* という表記に置き換えます。この表記の詳細については、「[データベース間でのクエリ](https://docs.aws.amazon.com/redshift/latest/dg/cross-database-overview.html)」の「**オブジェクトをクエリします**」セクションを参照してください。

------
#### [ IAM ]

   ```
   GRANT SELECT ON ${schemaName}.${tableName} TO "IAMR:${serviceRole}";
   ```

------
#### [ Database user ]

   ```
   GRANT SELECT ON ${schemaName}.${tableName} TO "${dbUser}";
   ```

------
#### [ AWS Secrets Manager username ]

   ```
   GRANT SELECT ON ${schemaName}.${tableName} TO "${secretsUsername}";
   ```

------

1. Redshift データベースで新しいスキーマを作成した場合は、次のコマンドを実行して、新しいスキーマに対する ID アクセス許可を付与します。

   ```
   GRANT USAGE ON SCHEMA ${schemaName} TO "IAMR:${serviceRole}";
   ```

### AWS Glue Data Catalog
<a name="w2aac28c10c27c13c13c13b3"></a>

Amazon Bedrock ナレッジベースサービスロールに AWS Glue Data Catalog データストアへのアクセスを許可するには、[Amazon Redshift クエリエディタ v2](https://docs.aws.amazon.com/redshift/latest/mgmt/query-editor-v2.html) を使用して、次の SQL コマンドを実行します。

1. 次のコマンドを実行します。このコマンドは [CREATE USER](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_USER.html) を使用してデータベースユーザーを作成し、IAM による認証を許可します。*\$1\$1service-role\$1* を、作成したカスタム Amazon Bedrock ナレッジベースサービスロールの名前に置き換えます。

   ```
   CREATE USER "IAMR:${service-role}" WITH PASSWORD DISABLE;
   ```
**重要**  
コンソールで作成した Amazon Bedrock ナレッジベースサービスロールを使用し、このステップを実行する前に[データストアを同期](kb-data-source-structured-sync-ingest.md)すると、ユーザーは自動的に作成されますが、データストアへのアクセス許可がユーザーに付与されていないため、同期は失敗します。同期する前に、次のステップを実行する必要があります。

1. 次の [GRANT](https://docs.aws.amazon.com/redshift/latest/dg/r_GRANT.html) コマンドを実行して、データベースから情報を取得するアクセス許可をサービスロールに付与します。

   ```
   GRANT USAGE ON DATABASE awsdatacatalog TO "IAMR:${serviceRole}";
   ```
**重要**  
`CREATE`、`UPDATE`、または `DELETE` アクセスを付与しないでください。これらのアクションを付与すると、データの意図しない変更につながる可能性があります。

1.  AWS Glue Data Catalog データベースへのアクセスを許可するには、サービスロールに次のアクセス許可をアタッチします。

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "VisualEditor0",
               "Effect": "Allow",
               "Action": [
                   "glue:GetDatabases",
                   "glue:GetDatabase",
                   "glue:GetTables",
                   "glue:GetTable",
                   "glue:GetPartitions",
                   "glue:GetPartition",
                   "glue:SearchTables"
               ],
               "Resource": [
                   "arn:aws:glue:us-east-1:123456789012:table/${DatabaseName}/${TableName}",
                   "arn:aws:glue:us-east-1:123456789012:database/${DatabaseName}",
                   "arn:aws:glue:us-east-1:123456789012:catalog"
               ]
           }
       ]
   }
   ```

------

1. 以下を実行して AWS Lake Formation 、 (Lake Formation とその Amazon Redshift との関係の詳細については、[「Redshift のデータソース](https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-data-source.html)」を参照) を通じてサービスロールにアクセス許可を付与します。

   1. にサインインし AWS マネジメントコンソール、[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/) で Lake Formation コンソールを開きます。

   1. 左側のナビゲーションペインで **[データのアクセス許可]**を選択します。

   1. Amazon Bedrock ナレッジベースに使用しているサービスロールにアクセス許可を付与します。

   1. データベースとテーブルの **Describe** アクセス許可と **Select** アクセス許可を付与します。

1. 使用するデータソースによっては AWS Glue Data Catalog、そのデータソースにアクセスするためのアクセス許可を追加する必要がある場合があります (詳細については、[AWS Glue 「他の への依存関係 AWS のサービス](https://docs.aws.amazon.com/glue/latest/dg/dependency-on-other-services.html)」を参照してください）。例えば、データソースが Amazon S3 の場所にある場合は、上記のポリシーに次のステートメントを追加する必要があります。

   ```
   {
       "Sid": "Statement1",
       "Effect": "Allow",
       "Action": [
           "s3:ListBucket",
           "s3:GetObject"
       ],
       "Resource": [
           "arn:aws:s3:::${BucketName}",
           "arn:aws:s3:::${BucketName}/*"
       ]
   }
   ```

1. (オプション) AWS KMS を使用して Amazon S3 または のデータを暗号化する場合は AWS Glue Data Catalog、KMS キーのデータを復号化するためのアクセス許可をロールに追加する必要があります。

   ```
   {
       "Action": [
           "kms:Decrypt"
       ],
       "Resource": [
           "arn:aws:kms:${Region}:${Account}:key/{KmsId}",
           "arn:aws:kms:${Region}:${Account}:key/{KmsId}"
       ],
       "Effect": "Allow"
   }
   ```