为 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 账户

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

    • 知识库

    • 知识库的数据来源

    • 您在亚马逊 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": "${AccountId}" }, "ArnLike": { "AWS:SourceArn": "arn:aws:bedrock:${Region}:${AccountId}: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": "${AccountId}" } } }] }

访问您的 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:${Region}:${AccountId}:secret:${secret-id}" ] }, { "Effect": "Allow", "Action": [ "kms:Decrypt" ], "Resource": [ "arn:aws:kms:${Region}:${AccountId}:key/${KeyId}" ], "Condition": { "StringLike": { "kms:ViaService": [ "secretsmanager.${Region}.amazonaws.com" ] } } }, }

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

注意

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

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

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": [ "arn:aws:secretsmanager:${Region}:${AccountId}:secret:${SecretId}" ] }, { "Effect": "Allow", "Action": [ "kms:Decrypt" ], "Resource": [ "arn:aws:kms:${Region}:${AccountId}:key/${KeyId}" ], "Condition": { "StringLike": { "kms:ViaService": [ "secretsmanager.${Region}.amazonaws.com" ] } } }, }

访问您的 Salesforce 数据来源的权限

注意

Salesforce 数据来源连接器目前为预览版,可能随时发生变化。

附加以下策略,以向角色提供访问 Salesforce 的权限。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": [ "arn:aws:secretsmanager:${Region}:${AccountId}:secret:${SecretId}" ] }, { "Effect": "Allow", "Action": [ "kms:Decrypt" ], "Resource": [ "arn:aws:kms:${Region}:${AccountId}:key/${KeyId}" ], "Condition": { "StringLike": { "kms:ViaService": [ "secretsmanager.${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在特定的知识库中使用${KnowledgeBaseArn},请提供并使用以下政策:

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

(可选)访问您的亚马逊 Kendra GenAI 索引的权限

如果您为知识库创建了 Amazon Kendra GenAI 索引,请将以下策略附加到您的 Amazon Bedrock 知识库服务角色以允许访问该索引。在策略中,将${Partition}${Region}${AccountId}、和${IndexId}替换为索引的值。您可以通过将多个索引添加到Resource列表中来允许访问它们。要允许访问您的中的每个索引 AWS 账户,请替换${IndexId}为通配符 (*)。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kendra:Retrieve", // To call their Retrieve API "kendra:DescribeIndex" // For validation when creating the KB ], "Resource": "arn:${${Partition}}:kendra:${${Region}}:${${AccountId}}:index/${${IndexId}}" } ] }

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

如果您在亚马逊 OpenSearch 服务中为知识库创建了矢量数据库,请将以下策略附加到您的 Amazon Bedrock 知识库服务角色以允许访问该馆藏。将${Region}${AccountId}替换为数据库所属的区域和账户 ID。在中输入您的亚马逊 OpenSearch 服务系列的编号${CollectionId}。您可以通过将多个集合添加到Resource列表中来允许访问这些集合。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "aoss:APIAccessAll" ], "Resource": [ "arn:aws:aoss:${Region}:${AccountId}:collection/${CollectionId}" ] }] }

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

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

{ "Version": "2012-10-17", "Statement": [ { "Sid": "RdsDescribeStatementID", "Effect": "Allow", "Action": [ "rds:DescribeDBClusters" ], "Resource": [ "arn:aws:rds:${Region}:${AccountId}:cluster:${DbClusterId}" ] }, { "Sid": "DataAPIStatementID", "Effect": "Allow", "Action": [ "rds-data:BatchExecuteStatement", "rds-data:ExecuteStatement" ], "Resource": [ "arn:aws:rds:${Region}:${AccountId}:cluster:${DbClusterId}" ] }] }

(可选)访问配置了 AWS Secrets Manager 密钥的矢量数据库的权限

如果您的矢量数据库配置了 AWS Secrets Manager 密钥,请将以下策略附加到您的 Amazon Bedrock 知识库服务角色, AWS Secrets Manager 以允许对您的账户进行身份验证以访问数据库。将${Region}${AccountId}替换为数据库所属的区域和账户 ID。${SecretId}替换为您的密钥的 ID。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": [ "arn:aws:secretsmanager:${Region}:${AccountId}:secret:${SecretId}" ] }] }

如果您使用密钥加密了您的密 AWS KMS 钥,请按照中的步骤为该角色授予解密密钥的权限。对包含知识库的向量存储的 AWS Secrets Manager 密钥进行解密的权限

(可选)用于管理数据摄 AWS 取期间临时数据存储的 AWS KMS 密钥的权限

要允许在摄取数据源的过程中为临时数据存储创建 AWS KMS 密钥,请将以下策略附加到您的 Amazon Bedrock 知识库服务角色。将${Region}、和 ${AccountId}${KeyId},替换为相应的值。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": [ "arn:aws:kms:${Region}:${AccountId}:key/${KeyId}" ] } ] }

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

要允许访问其他用户的 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}" } }] }

如果使用 AWS KMS 密钥对 Amazon S3 存储桶进行加密,则还需要将以下内容添加到知识库角色中。用相应的值替换和。${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}" }