为 Amazon Bedrock 知识库创建服务角色 - Amazon Bedrock

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

为 Amazon Bedrock 知识库创建服务角色

要在知识库中使用自定义角色而不是 Amazon Bedrock 自动创建的IAM角色,请按照创建角色向某人委派权限中的步骤创建一个角色并附加以下权限 AWS 服务。仅包含您自己的安全所需的权限。

  • 信任关系

  • 对 Amazon Bedrock 基础模型的访问权限

  • 访问存储数据所在的数据源

  • (如果您在 Amazon OpenSearch 服务中创建矢量数据库)访问您的 OpenSearch 服务集合

  • (如果您在 Amazon Aurora 中创建矢量数据库)访问您的 Aurora 集群

  • (如果您在中创建矢量数据库 Pinecone 或者 Redis Enterprise Cloud) 的权限 AWS Secrets Manager 来验证你的 Pinecone 或者 Redis Enterprise Cloud account

  • (可选)如果您使用密钥加密以下任何资源,则具有解密密KMS钥的权限(请参阅知识库资源的加密)。

    • 知识库

    • 知识库的数据来源

    • 你在 Amazon OpenSearch 服务中的矢量数据库

    • 您的第三方矢量数据库的秘密 AWS Secrets Manager

    • 数据提取作业

信任关系

以下策略允许 Amazon Bedrock 担任此角色,并创建和管理知识库。下面所示为您可以使用的示例策略。您可以使用一个或多个全局条件上下文键来限制权限的范围。有关更多信息,请参阅 AWS 全局条件上下文密钥。 aws:SourceAccount 值设置为您的账户 ID。使用 ArnEqualsArnLike 条件将范围限制为特定的知识库。

注意

出于安全考虑,作为最佳实践,请替换 * IDs在你创建它们之后会有特定的知识库。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "Service": "bedrock.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "account-id" }, "ArnLike": { "AWS:SourceArn": "arn:aws:bedrock:region:account-id:knowledge-base/*" } } }] }

访问 Amazon Bedrock 模型的权限

附加以下策略,以向角色提供使用 Amazon Bedrock 模型嵌入源数据的权限。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "bedrock:ListFoundationModels", "bedrock:ListCustomModels" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "bedrock:InvokeModel" ], "Resource": [ "arn:aws:bedrock:region::foundation-model/amazon.titan-embed-text-v1", "arn:aws:bedrock:region::foundation-model/cohere.embed-english-v3", "arn:aws:bedrock:region::foundation-model/cohere.embed-multilingual-v3" ] } ] }

访问您的数据源的权限

从以下数据源中进行选择,为该角色附加必要的权限。

访问您的 Amazon S3 数据源的权限

附上以下策略,为该角色提供访问 Amazon S3 的权限。

如果您使用加密了数据源 AWS KMS 密钥,按照中的步骤为角色附加解密密钥的权限。解密您在 Amazon S3 中的数据源的 AWS KMS 密钥的权限

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::bucket/path/to/folder", "arn:aws:s3:::bucket/path/to/folder/*" ], "Condition": { "StringEquals": { "aws:PrincipalAccount": "account-id" } } }] }

访问您的 Confluence 数据源的权限

注意

Confluence 数据源连接器处于预览版,可能会发生变化。

附上以下策略,为该角色提供访问 Confluence 的权限。

注意

secretsmanager:PutSecretValue只有在使用带有刷新令牌的 OAuth 2.0 身份验证时才是必需的。

Confluen OAuth2 ce .0 访问令牌的默认到期时间为 60 分钟。如果此令牌在您的数据源同步(同步任务)时过期,Amazon Bedrock 将使用提供的刷新令牌来重新生成此令牌。此重新生成会刷新访问令牌和刷新令牌。为了将令牌从当前同步任务更新到下一个同步任务,Amazon Bedrock 需要您的密钥凭证的写入/放置权限。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue", "secretsmanager:PutSecretValue" ], "Resource": [ "arn:aws:secretsmanager:your-region:your-account-id:secret:secret-id" ] }, { "Effect": "Allow", "Action": [ "kms:Decrypt" ], "Resource": [ "arn:aws:kms:your-region:your-account-id:key/key-id" ], "Condition": { "StringLike": { "kms:ViaService": [ "secretsmanager.your-region.amazonaws.com" ] } } }, }

访问你的微软 SharePoint 数据源的权限

注意

SharePoint 数据源连接器处于预览版,可能会发生变化。

附加以下策略为该角色提供访问权限 SharePoint。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": [ "arn:aws:secretsmanager:your-region:your-account-id:secret:secret-id" ] }, { "Effect": "Allow", "Action": [ "kms:Decrypt" ], "Resource": [ "arn:aws:kms:your-region:your-account-id:key/key-id" ], "Condition": { "StringLike": { "kms:ViaService": [ "secretsmanager.your-region.amazonaws.com" ] } } }, }

访问您的 Salesforce 数据源的权限

注意

Salesforce 数据源连接器处于预览版,可能会发生变化。

附上以下策略,为该角色提供访问 Salesforce 的权限。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": [ "arn:aws:secretsmanager:your-region:your-account-id:secret:secret-id" ] }, { "Effect": "Allow", "Action": [ "kms:Decrypt" ], "Resource": [ "arn:aws:kms:your-region:your-account-id:key/key-id" ], "Condition": { "StringLike": { "kms:ViaService": [ "secretsmanager.your-region.amazonaws.com" ] } } }, }

与您的文档聊天的权限

附上以下策略,为该角色提供使用 Amazon Bedrock 模型与您的文档聊天的权限:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "bedrock:RetrieveAndGenerate" ], "Resource": "*" } ] }

如果您只想授予用户与您的文档聊天的权限(而不是RetrieveAndGenerate在所有知识库中聊天),请使用以下策略:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "bedrock:RetrieveAndGenerate" ], "Resource": "*" }, { "Effect": "Deny", "Action": [ "bedrock:Retrieve" ], "Resource": "*" } ] }

如果您既想与文档聊天,又想RetrieveAndGenerate在特定的知识库中使用,请提供 insert KB ARN,并使用以下策略:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "bedrock:RetrieveAndGenerate" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "bedrock:Retrieve" ], "Resource": insert KB ARN } ] }

(可选)在 Amazon OpenSearch 服务中访问您的矢量数据库的权限

如果您在亚马逊 OpenSearch 服务中为知识库创建了矢量数据库,请将以下策略附加到您的 Amazon Bedrock 知识库服务角色以允许访问该馆藏。Replace(替换) region 以及 account-id 包含数据库所属的区域和账户 ID。在中输入您的 Amazon OpenSearch 服务系列的 ID collection-id。 您可以通过将多个集合添加到Resource列表中来允许访问它们。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "aoss:APIAccessAll" ], "Resource": [ "arn:aws:aoss:region:account-id:collection/collection-id" ] }] }

(可选)访问 Amazon Aurora 数据库集群的权限

如果您在 Amazon Aurora 中为知识库创建了数据库 (DB) 集群,请将以下策略附加到您的 Amazon Bedrock 知识库服务角色以允许访问数据库集群并提供对其的读写权限。Replace(替换) region 以及 account-id 以及数据库集群所属的区域和账户 ID。在中输入您的亚马逊 Aurora 数据库集群的 ID db-cluster-id。 您可以通过将多个数据库集群添加到Resource列表中来允许访问它们。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "RdsDescribeStatementID", "Effect": "Allow", "Action": [ "rds:DescribeDBClusters" ], "Resource": [ "arn:aws:rds:region:account-id:cluster:db-cluster-id" ] }, { "Sid": "DataAPIStatementID", "Effect": "Allow", "Action": [ "rds-data:BatchExecuteStatement", "rds-data:ExecuteStatement" ], "Resource": [ "arn:aws:rds:region:account-id:cluster:db-cluster-id" ] }] }

(可选)访问配置有矢量数据库的权限 AWS Secrets Manager secret

如果您的矢量数据库配置了 AWS Secrets Manager secret,将以下策略附加到您的 Amazon Bedrock 知识库服务角色以允许 AWS Secrets Manager 对您的账户进行身份验证以访问数据库。Replace(替换) region 以及 account-id 包含数据库所属的区域和账户 ID。Replace(替换) secret-id 用你的秘密的 ID。

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

如果你用加密了你的秘密 AWS KMS 密钥,按照中的步骤为角色附加解密密钥的权限。解密包含知识库的矢量存储的 AWS Secrets Manager 密钥的权限

(可选)的权限 AWS 管理一个 AWS KMS 数据摄取期间瞬态数据存储的密钥

允许创建 AWS KMS 暂时数据存储的密钥在摄取数据源的过程中,请将以下策略附加到您的 Amazon Bedrock 知识库服务角色。更换 region, account-id,以及 key-id 使用适当的值。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": [ "arn:aws:kms:region:account-id:key/key-id" ] } ] }

(可选)的权限 AWS 管理来自其他用户的数据源 AWS account。

允许访问其他用户的 AWS 账户,您必须创建一个允许跨账户访问其他用户账户中的 Amazon S3 存储桶的角色。更换 bucketName, bucketOwnerAccountId,以及 bucketNameAndPrefix 使用适当的值。

知识库角色所需的权限

知识库创建期间提供的知识库角色createKnowledgeBase需要以下 Amazon S3 权限。

{ "Version": "2012-10-17", "Statement": [{ "Sid": "S3ListBucketStatement", "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::bucketName" ], "Condition": { "StringEquals": { "aws:ResourceAccount": "bucketOwnerAccountId" } } },{ "Sid": "S3GetObjectStatement", "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::bucketNameAndPrefix/*" ], "Condition": { "StringEquals": { "aws:ResourceAccount": "bucketOwnerAccountId" } }] }

如果 Amazon S3 存储桶是使用加密的 AWS KMS 关键,还需要将以下内容添加到知识库角色中。更换 bucketOwnerAccountId 以及 region 使用适当的值。

{ "Sid": "KmsDecryptStatement", "Effect": "Allow", "Action": [ "kms:Decrypt" ], "Resource": [ "arn:aws:kms:region:bucketOwnerAccountId:key/keyId" ], "Condition": { "StringEquals": { "kms:ViaService": [ "s3.region.amazonaws.com" ] } } }

跨账户 Amazon S3 存储桶策略所需的权限

其他账户中的存储桶需要以下 Amazon S3 存储桶策略。更换 kbRoleArn, bucketName,以及 bucketNameAndPrefix 使用适当的值。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Example ListBucket permissions", "Effect": "Allow", "Principal": { "AWS": "kbRoleArn" }, "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::bucketName" ] }, { "Sid": "Example GetObject permissions", "Effect": "Allow", "Principal": { "AWS": "kbRoleArn" }, "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::bucketNameAndPrefix/*" ] } ] }

跨账户所需的权限 AWS KMS 密钥政策

如果跨账户 Amazon S3 存储桶是使用加密的 AWS KMS 键入该账户,该账户的政策 AWS KMS 密钥需要以下策略。更换 kbRoleArn 以及 kmsKeyArn 使用适当的值。

{ "Sid": "Example policy", "Effect": "Allow", "Principal": { "AWS": [ "kbRoleArn" ] }, "Action": [ "kms:Decrypt" ], "Resource": "kmsKeyArn" }