本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
设置查询引擎和使用结构化数据存储创建知识库的权限
本主题介绍将知识库连接到结构化数据存储时所需的权限。如果您计划将 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 中设置查询引擎,请预配置
-
按照《亚马逊 Redshift 入门指南》中的步骤 1:创建示例 Amazon Redshift 集群中的步骤进行操作。
-
记下集群 ID。
-
(可选)有关亚马逊 Redshift 预配置集群的更多信息,请参阅《亚马逊 Redshift 管理指南》中的亚马逊 Redshift 预配置集群。
在 Amazon Redshift Serverless 中设置查询引擎
-
仅按照《亚马逊 Redshift 入门指南》中使用 Amazon Redshift Serverless 创建数据仓库中的设置步骤进行操作,并使用默认设置进行配置。
-
记下工作组 ARN。
-
(可选)有关 Amazon Redshift 无服务器工作组的更多信息,请参阅《亚马逊 Redshift 管理指南》中的工作组和命名空间。
配置 Amazon Redshift 查询引擎权限
根据您选择的 Amazon Redshift 查询引擎,您可以配置某些权限。您配置的权限取决于身份验证方法。下表显示了可用于不同查询引擎的身份验证方法:
身份验证方法 | 亚马逊 Redshift 已配置 | Amazon Redshift Serverless |
---|---|---|
IAM |
![]() |
![]() |
数据库用户名 |
![]() |
![]() |
AWS Secrets Manager |
![]() |
![]() |
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": "*" } ] }
您还需要添加权限以允许您的服务角色向查询引擎进行身份验证。展开一个部分以查看该方法的权限。
要附加的权限取决于您的身份验证方法。展开一个部分以查看方法的权限。
允许知识库服务角色访问您的数据存储
确保您的数据存储在以下支持的结构化数据存储中:
Amazon Redshift
AWS Glue Data Catalog (AWS Lake Formation)
下表汇总了查询引擎可用的身份验证方法,具体取决于您的数据存储:
身份验证方法 | Amazon Redshift | AWS Glue Data Catalog (AWS Lake Formation) |
---|---|---|
IAM |
![]() |
![]() |
数据库用户名 |
![]() |
![]() |
AWS Secrets Manager |
![]() |
![]() |
要了解如何为您的 Amazon Bedrock 知识库服务角色设置访问您的数据存储并基于其生成查询的权限,请展开与您的数据存储所在服务对应的部分:
要授予您的亚马逊 Bedrock 知识库服务角色访问您的 Amazon Redshift 数据库的权限,请使用亚马逊 Redshift 查询编辑器 v2 并运行以下 SQL 命令:
-
(如果您使用 IAM 进行身份验证但尚未为您的数据库创建用户)运行以下命令,该命令使用 CREATE USER 创建数据库用户并允许其通过 IAM 进行身份验证,
${service-role}
替换为您创建的自定义 Amazon Bedrock 知识库服务角色的名称:CREATE USER "IAMR:
${service-role}
" WITH PASSWORD DISABLE;重要
如果您使用在控制台中为您创建的 Amazon Bedrock Knowledge Bases 服务角色,然后在执行此步骤之前同步您的数据存储,则系统将为您创建用户,但同步将失败,因为该用户尚未获得访问您的数据存储的权限。在同步之前,您必须执行以下步骤。
-
通过运行 GRANT 命令授予从数据库检索信息的身份权限。
重要
不要授予
CREATE
UPDATE
、或DELETE
访问权限。授予这些操作可能会导致您的数据被意外修改。为了更精细地控制可以访问的表,可以用以下表示法替换
ALL TABLES
特定的表名:。${schemaName}
${tableName}
有关此表示法的更多信息,请参阅跨数据库查询中的查询对象部分。 -
如果您在 Redshift 数据库中创建了新架构,请运行以下命令以授予针对新架构的身份权限。
GRANT USAGE ON SCHEMA ${schemaName} TO "IAMR:${serviceRole}";
要授予您的 Amazon Bedrock 知识库服务角色访问您的 AWS Glue Data Catalog 数据存储的权限,请使用 Amazon Redshift 查询编辑器 v2 并运行以下 SQL 命令:
-
运行以下命令,该命令使用 CREATE US ER 创建数据库用户并允许其通过 IAM 进行身份验证,
${service-role}
替换为您创建的自定义 Amazon Bedrock 知识库服务角色的名称:CREATE USER "IAMR:
${service-role}
" WITH PASSWORD DISABLE;重要
如果您使用在控制台中为您创建的 Amazon Bedrock Knowledge Bases 服务角色,然后在执行此步骤之前同步您的数据存储,则系统将为您创建用户,但同步将失败,因为该用户尚未获得访问您的数据存储的权限。在同步之前,您必须执行以下步骤。
-
通过运行以下 GRANT 命令向服务角色授予从数据库检索信息的权限:
GRANT USAGE ON DATABASE awsdatacatalog TO "IAMR:
${serviceRole}
";重要
不要授予
CREATE
UPDATE
、或DELETE
访问权限。授予这些操作可能会导致您的数据被意外修改。 -
要允许访问您的 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" ] } ] } -
通过以下方式向你的服务角色授予权限 AWS Lake Formation (要详细了解 Lake Formation 及其与 Amazon Redshift 的关系,请参阅 Redshift 的数据源):
-
登录并打开 Lake AWS Management Console Formation 控制台,网址为https://console.aws.amazon.com/lakeformation/
。 -
从左侧导航窗格中选择数据权限。
-
向你正在使用 Amazon Bedrock 知识库的服务角色授予权限。
-
为您的数据库和表授予 “描述” 和 “选择” 权限。
-
-
根据您在中使用的数据源 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}
/*" ] } -
(可选)如果您使用 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" }