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

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

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

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

重要

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

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

创建亚马逊 Redshift 查询引擎

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

如果您已经创建了查询引擎,则可以跳过此先决条件。否则,请执行以下步骤来设置预配置的 Amazon Redshift 或亚马逊 Redshift 无服务器查询引擎:

要在亚马逊 Redshift 中设置查询引擎,请预配置
  1. 按照《亚马逊 Redshift 入门指南》中的步骤 1:创建示例 Amazon Redshift 集群中的步骤进行操作。

  2. 记下集群 ID。

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

在 Amazon Redshift Serverless 中设置查询引擎
  1. 仅按照《亚马逊 Redshift 入门指南》中使用 Amazon Redshift Serverless 创建数据仓库中的设置步骤进行操作,并使用默认设置进行配置。

  2. 记下工作组 ARN。

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

配置 Amazon Redshift 查询引擎权限

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

身份验证方法 亚马逊 Redshift 已配置 Amazon Redshift Serverless
IAM Yes Yes
数据库用户名 Yes No
AWS Secrets Manager Yes Yes

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

注意

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

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

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

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

{ "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:${Region}:${Account}: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 预配置的查询引擎进行身份验证,请将以下策略附加到您的自定义服务角色:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "GetCredentialsWithFederatedIAMCredentials", "Effect": "Allow", "Action": "redshift:GetClusterCredentialsWithIAM", "Resource": [ "arn:aws:redshift:${region}:${account}:dbname:${cluster}/${database}" ] } }
Database user

要以 Amazon Redshift 数据库用户身份进行身份验证,请将以下策略附加到服务角色:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "GetCredentialsWithClusterCredentials", "Effect": "Allow", "Action": [ "redshift:GetClusterCredentials" ], "Resource": [ "arn:aws:redshift:${region}:${account}:dbuser:${cluster}/${dbuser}", "arn:aws:redshift:${region}:${account}: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 无服务器查询引擎进行身份验证,请将以下策略附加到您的自定义服务角色:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "RedshiftServerlessGetCredentials", "Effect": "Allow", "Action": "redshift-serverless:GetCredentials", "Resource": [ "arn:aws:redshift-serverless:${Region}:${Account}: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 Yes Yes
数据库用户名 Yes No
AWS Secrets Manager Yes No

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

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

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

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

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

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

    不要授予CREATEUPDATE、或DELETE访问权限。授予这些操作可能会导致您的数据被意外修改。

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

    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}";
  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 Knowledge Bases 服务角色,然后在执行此步骤之前同步您的数据存储,则系统将为您创建用户,但同步将失败,因为该用户尚未获得访问您的数据存储的权限。在同步之前,您必须执行以下步骤。

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

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

    不要授予CREATEUPDATE、或DELETE访问权限。授予这些操作可能会导致您的数据被意外修改。

  3. 要允许访问您的 AWS Glue Data Catalog 数据库,请将以下权限附加到服务角色:

    { "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:${Region}:${Account}:table/${DatabaseName}/${TableName}", "arn:aws:glue:${Region}:${Account}:database/${DatabaseName}", "arn:aws:glue:${Region}:${Account}:catalog" ] } ] }
  4. 通过以下方式向你的服务角色授予权限 AWS Lake Formation (要详细了解 Lake Formation 及其与 Amazon Redshift 的关系,请参阅 Redshift 的数据源):

    1. 登录并打开 Lake AWS Management Console 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" }