

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

# 設定查詢引擎和建立具有結構化資料存放區之知識庫的許可
<a name="knowledge-base-prereq-structured"></a>

本主題說明將知識庫連線至結構化資料存放區時所需的許可。如果您計劃將 Amazon Bedrock 知識庫連線至結構化資料存放區，則需要滿足先決條件。如需要滿足的一般許可要求，請參閱 [設定使用者或角色的許可，以建立和管理知識庫](knowledge-base-prereq-permissions-general.md)。

**重要**  
執行任意 SQL 查詢可能是任何文字轉 SQL 應用程式的安全風險。我們建議您視需要採取預防措施，例如使用受限的角色、唯讀資料庫和沙盒。

Amazon Bedrock 知識庫支援使用 Amazon Redshift 作為查詢引擎來查詢您的資料存放區。查詢引擎會從結構化資料存放區存取中繼資料，並使用中繼資料協助產生 SQL 查詢。Amazon Redshift 是一項資料倉儲服務，使用 SQL 來分析跨資料倉儲、資料庫和資料湖的結構化資料。

## 建立 Amazon Redshift 查詢引擎
<a name="kb-query-engine-setup-create"></a>

您可以根據您的使用案例使用 Amazon Redshift Serverless 或 Amazon Redshift 佈建，並連線至資料倉儲的工作群組或叢集。Amazon Redshift 引擎可以查詢的基礎資料可以原生存放在 Amazon Redshift 叢集中的資料，或位於預設值下的資料 AWS Glue Data Catalog （例如 Amazon S3 等）。

如果您已建立查詢引擎，則可以略過此先決條件。否則，請執行下列步驟來設定 Amazon Redshift 佈建或 Amazon Redshift Serverless 查詢引擎：

**在佈建的 Amazon Redshift 中設定查詢引擎**

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 佈建叢集的詳細資訊，請參閱《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 佈建 | Amazon Redshift Serverless | 
| --- | --- | --- | 
| IAM | ![\[Green circular icon with a white checkmark symbol inside.\]](http://docs.aws.amazon.com/zh_tw/bedrock/latest/userguide/images/icons/icon-yes.png)是 | ![\[Green circular icon with a white checkmark symbol inside.\]](http://docs.aws.amazon.com/zh_tw/bedrock/latest/userguide/images/icons/icon-yes.png)是 | 
| 資料庫使用者名稱 | ![\[Green circular icon with a white checkmark symbol inside.\]](http://docs.aws.amazon.com/zh_tw/bedrock/latest/userguide/images/icons/icon-yes.png)是 | ![\[Red circular icon with an X symbol, indicating cancellation or denial.\]](http://docs.aws.amazon.com/zh_tw/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/zh_tw/bedrock/latest/userguide/images/icons/icon-yes.png)是 | ![\[Green circular icon with a white checkmark symbol inside.\]](http://docs.aws.amazon.com/zh_tw/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
<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 佈建查詢引擎，請將下列政策連接至您的自訂服務角色：

------
#### [ 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/zh_tw/bedrock/latest/userguide/images/icons/icon-yes.png)是 | ![\[Green circular icon with a white checkmark symbol inside.\]](http://docs.aws.amazon.com/zh_tw/bedrock/latest/userguide/images/icons/icon-yes.png)是 | 
| 資料庫使用者名稱 | ![\[Green circular icon with a white checkmark symbol inside.\]](http://docs.aws.amazon.com/zh_tw/bedrock/latest/userguide/images/icons/icon-yes.png)是 | ![\[Red circular icon with an X symbol, indicating cancellation or denial.\]](http://docs.aws.amazon.com/zh_tw/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/zh_tw/bedrock/latest/userguide/images/icons/icon-yes.png)是 | ![\[Red circular icon with an X symbol, indicating cancellation or denial.\]](http://docs.aws.amazon.com/zh_tw/bedrock/latest/userguide/images/icons/icon-no.png)否 | 

若要了解如何設定 Amazon Bedrock 知識庫服務角色的許可，以存取資料存放區並根據其產生查詢，請展開對應至資料存放區所在服務的區段：

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

若要授予 Amazon Bedrock 知識庫服務角色存取 Amazon Redshift 資料庫的權限，請使用 [Amazon Redshift 查詢編輯器 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 進行身分驗證，以您建立的自訂 Amazon Bedrock 知識庫服務角色名稱取代 *\$1\$1service-role\$1*：

   ```
   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) 命令，授予身分許可以從資料庫擷取資訊。

------
#### [ 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 資料庫中建立了新的結構描述，請執行下列命令來授予對新結構描述的身分許可。

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

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

若要授予 Amazon Bedrock Knowledge Bases 服務角色存取 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 進行身分驗證，以您建立的自訂 Amazon Bedrock 知識庫服務角色名稱取代 *\$1\$1service-role\$1*：

   ```
   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：//[https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/) 開啟 Lake Formation 主控台。

   1. 從左側導覽窗格中選取**資料許可**。

   1. 將許可授予您用於 Amazon Bedrock 知識庫的服務角色。

   1. 授予**描述**和**選取**資料庫和資料表的許可。

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