本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
为 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。使用 ArnEquals
或 ArnLike
条件将范围限制为特定的知识库。
注意
出于安全目的的最佳实践,请在创建知识库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}
" }