设置查询引擎和权限以创建带结构化数据存储的知识库 - Amazon Bedrock

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

设置查询引擎和权限以创建带结构化数据存储的知识库

本主题介绍将知识库连接到结构化数据存储时所需的权限。如果您计划将 Amazon Bedrock 知识库连接到结构化数据存储,则需要满足相应的先决条件。有关需满足的一般权限要求,请参阅为用户或角色设置创建和管理知识库所需的权限

重要

执行任意 SQL 查询可能对任何 Text-to-SQL应用程序构成安全风险。我们建议您根据需要采取预防措施,例如使用受限角色、只读数据库和沙盒处理。

Amazon Bedrock 知识库使用 Amazon Redshift 作为查询引擎来查询数据存储。查询引擎访问结构化数据存储中的元数据,并使用这些元数据来帮助生成 SQL 查询。Amazon Redshift 是一项数据仓库服务,它使用 SQL 来分析数据仓库、数据库和数据湖中的结构化数据。

创建 Amazon Redshift 查询引擎

可以根据您的使用案例使用 Amazon Redshift Serverless 或已预调配的 Amazon Redshift,并连接到数据仓库的工作组或集群。Amazon Redshift 引擎可以查询的基础数据可以是原生存储在 Amazon Redshift 集群中的数据,也可以是位于默认集群下的数据AWS Glue Data Catalog(例如亚马逊 S3 等)。

如果您已创建查询引擎,则可以跳过此先决条件。否则,请执行以下步骤来设置已预调配的 Amazon Redshift 或 Amazon Redshift Serverless 查询引擎:

在已预调配的 Amazon Redshift 中设置查询引擎
  1. 按照《Amazon Redshift 入门指南》中的步骤 1:创建示例 Amazon Redshift 集群中的过程操作。

  2. 记下集群 ID。

  3. (可选)有关 Amazon Redshift 预调配集群的更多信息,请参阅《Amazon Redshift 管理指南》中的 Amazon Redshift 预调配集群

在 Amazon Redshift Serverless 中设置查询引擎
  1. 仅按照《Amazon Redshift 入门指南》中的使用 Amazon Redshift Serverless 创建数据仓库中的设置过程操作,并为其配置默认设置。

  2. 记下工作组 ARN。

  3. (可选)有关 Amazon Redshift Serverless 工作组的更多信息,请参阅《Amazon Redshift 管理指南》中的工作组和命名空间

配置 Amazon Redshift 查询引擎权限

根据您选择的 Amazon Redshift 查询引擎,您可以配置某些权限。您配置的权限取决于身份验证方法。下表显示了可用于不同的查询引擎的身份验证方法:

身份验证方法 已预调配的 Amazon Redshift Amazon Redshift Serverless
IAM Green circular icon with a white checkmark symbol inside. Green circular icon with a white checkmark symbol inside.
数据库用户名 Green circular icon with a white checkmark symbol inside. Red circular icon with an X symbol, indicating cancellation or denial.
AWS Secrets Manager Green circular icon with a white checkmark symbol inside. Green circular icon with a white checkmark symbol inside.

Amazon Bedrock 知识库使用服务角色将知识库连接到结构化数据存储,从这些数据存储中检索数据,并根据用户查询和数据存储的结构生成 SQL 查询。

注意

如果您计划使用AWS 管理控制台来创建知识库,则可以跳过此先决条件。控制台将创建具有适当权限的 Amazon Bedrock 知识库服务角色。

要创建具有适当权限的自定义 IAM 服务角色,请按照创建向 AWS 服务委派权限的角色中的步骤操作,并附加信任关系中定义的信任关系。

然后,为您的知识库添加对 Amazon Redshift 查询引擎和数据库的访问权限。展开与适用于您的使用案例的部分:

将以下策略附加到您的自定义服务角色,以允许此角色访问您的数据并使用该数据生成查询:

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

要附加的权限取决于您的身份验证方法。展开一个部分以查看方法的权限。

IAM

要允许您的服务角色通过 IAM 对 Amazon Redshift Serverless 查询引擎进行身份验证,请将以下策略附加到自定义服务角色:

JSON
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}" ] } ] }

允许知识库服务角色访问您的数据存储

确保您的数据存储在以下某个支持的结构化数据存储中:

  • 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. Green circular icon with a white checkmark symbol inside.
数据库用户名 Green circular icon with a white checkmark symbol inside. Red circular icon with an X symbol, indicating cancellation or denial.
AWS Secrets Manager Green circular icon with a white checkmark symbol inside. Red circular icon with an X symbol, indicating cancellation or denial.

要了解如何为 Amazon Bedrock 知识库服务角色设置适当权限,以便访问您的数据存储并基于其生成查询,请展开与数据存储所在的服务对应的部分:

要向 Amazon Bedrock 知识库服务角色授予对 Amazon Redshift 数据库的访问权限,请使用 Amazon Redshift 查询编辑器 V2 并运行以下 SQL 命令:

  1. (如果您使用 IAM 进行身份验证但尚未为数据库创建用户)运行以下命令,该命令使用 CREATE USER 创建数据库用户并允许其通过 IAM 进行身份验证,${service-role}替换为您创建的自定义 Amazon Bedrock 知识库服务角色的名称:

    CREATE USER "IAMR:${service-role}" WITH PASSWORD DISABLE;
    重要

    如果您使用在控制台中为您创建的 Amazon Bedrock 知识库服务角色,然后在执行此步骤之前同步您的数据存储,则系统将为您创建用户,不过同步将失败,因为该用户尚未获得对您的数据存储的访问权限。在同步之前,您必须执行以下步骤。

  2. 通过运行 GRANT 命令向身份授予从数据库中检索信息的权限。

    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 Managerusername
    GRANT SELECT ON ALL TABLES IN SCHEMA ${schemaName} TO "${secretsUsername}";
    重要

    不要向 CREATEUPDATEDELETE 授予访问权限。向这些操作授予访问权限可能会导致您的数据发生非预期的修改。

    为了更精细地控制可以访问的表,可以用以下表示法替换ALL TABLES特定的表名:。${schemaName} ${tableName}有关此表示法的更多信息,请参阅跨数据库查询中的查询对象部分。

    IAM
    GRANT SELECT ON ${schemaName}.${tableName} TO "IAMR:${serviceRole}";
    Database user
    GRANT SELECT ON ${schemaName}.${tableName} TO "${dbUser}";
    AWS Secrets Managerusername
    GRANT SELECT ON ${schemaName}.${tableName} TO "${secretsUsername}";
  3. 如果您在 Redshift 数据库中创建了新架构,请运行以下命令以向身份授予对新架构的权限。

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

要授予您的 Amazon Bedrock 知识库服务角色访问您的AWS Glue Data Catalog数据存储的权限,请使用 Amazon Redshift 查询编辑器 v2 并运行以下 SQL 命令:

  1. 运行以下命令,该命令使用 CREATE US ER 创建数据库用户并允许其通过 IAM 进行身份验证,${service-role}替换为您创建的自定义 Amazon Bedrock 知识库服务角色的名称:

    CREATE USER "IAMR:${service-role}" WITH PASSWORD DISABLE;
    重要

    如果您使用在控制台中为您创建的 Amazon Bedrock 知识库服务角色,然后在执行此步骤之前同步您的数据存储,则系统将为您创建用户,不过同步将失败,因为该用户尚未获得对您的数据存储的访问权限。在同步之前,您必须执行以下步骤。

  2. 通过运行以下 GRANT 命令向服务角色授予从数据库中检索信息的权限:

    GRANT USAGE ON DATABASE awsdatacatalog TO "IAMR:${serviceRole}";
    重要

    不要向 CREATEUPDATEDELETE 授予访问权限。向这些操作授予访问权限可能会导致您的数据发生非预期的修改。

  3. 要允许访问您的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" ] } ] }
  4. 通过以下方式向你的服务角色授予权限AWS Lake Formation(要详细了解 Lake Formation 及其与 Amazon Redshift 的关系,请参阅 Redshift 的数据源):

    1. 登录并打开 Lake AWS 管理控制台 Formation 控制台,网址为https://console.aws.amazon.com/lakeformation/

    2. 从左侧导航窗格中选择数据权限

    3. 向用于 Amazon Bedrock 知识库的服务角色授予权限。

    4. 授予数据库和表的描述选择权限。

  5. 根据您在中使用的数据源AWS Glue Data Catalog,您可能需要添加访问该数据源的权限(有关更多信息,请参阅AWS Glue依赖于其他数据源AWS 服务)。例如,如果您的数据来源位于 Amazon S3 位置,则您需要向上述策略添加以下语句。

    { "Sid": "Statement1", "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetObject" ], "Resource": [ "arn:aws:s3:::${BucketName}", "arn:aws:s3:::${BucketName}/*" ] }
  6. (可选)如果您使用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" }