View a markdown version of this page

托管知识库的资源策略 - Amazon Bedrock

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

托管知识库的资源策略

基于资源的策略是您直接附加到托管知识库的 JSON 文档。它控制哪些 IAM 委托人可以在知识库上执行操作,从而启用跨账户访问等用例。该政策支持两者兼Allow而有Deny之。

重要

Resource-based 只有托管知识库(类型MANAGED)才支持策略。矢量知识库(类型VECTOR)不支持资源策略。

支持的操作

可以在知识库资源策略中使用以下操作:

处理建议 说明
bedrock:Retrieve 查询知识库并从数据源检索相关结果。
bedrock:GetDocumentContent 从知识库数据源检索特定文档的完整内容。
注意

Control-plane 资源策略中不能使用诸如GetKnowledgeBaseUpdateKnowledgeBaseDeleteKnowledgeBase、、和数据源管理操作之类的操作。这些操作必须由知识库所有者账户中的委托人执行。

资源政策要求

知识库资源策略遵循标准的 IAM 策略语法。有关策略元素和评估逻辑的详细信息,请参阅AWS Identity and Access Management 用户指南中的 IAM JSON 策略元素参考

以下特定于服务的限制适用:

  • 仅托管知识库。资源策略只能附加到类型的知识库MANAGED。尝试将资源策略附加到VECTOR类型知识库会返回错误。

  • 支持的操作。只能在资源策略中使用bedrock:Retrievebedrock:GetDocumentContent

  • 资源或操作中没有通配符。您必须在Resource元素中指定完整的知识库 ARN,并明确列出每个操作。这些元素不支持通配符。

跨账户访问的工作原理

Cross-account access 允许其他 AWS 账户的委托人致电RetrieveGetDocumentContent访问您的知识库。要使用跨账户访问权限,必须满足以下两个条件:

  • 知识库所有者附加了一个资源策略,该策略向调用主体授予访问权限。

  • 调用方具有基于身份的策略,允许对知识库 ARN 进行相应的 Amazon Bedrock 操作。

有关 IAM 如何评估跨账户访问权限的更多信息,请参阅 AWS Identity and Access Management 用户指南中的Cross-account 策略评估逻辑

示例:授予跨账户访问权限

以下资源策略向另一个账户中的特定 IAM 角色授予调用Retrieve和的权限GetDocumentContent

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCrossAccountRetrieve", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::CONSUMER_ACCOUNT_ID:role/service-role-name" }, "Action": [ "bedrock:Retrieve", "bedrock:GetDocumentContent" ], "Resource": "arn:aws:bedrock:REGION:OWNER_ACCOUNT_ID:knowledge-base/KB_ID" } ] }

向多个委托人授予访问权限

要向多个使用角色授予访问权限,请将每个角色 ARN 列Principal.AWS为一个数组:

"Principal": { "AWS": [ "arn:aws:iam::ACCOUNT_ID_1:role/role-name-1", "arn:aws:iam::ACCOUNT_ID_2:role/role-name-2" ] }

要向其他账户中的所有委托人授予访问权限,请使用账户 root 作为委托人:

"Principal": { "AWS": "arn:aws:iam::CONSUMER_ACCOUNT_ID:root" }

使用 “拒绝” 语句

资源策略支持两者兼Allow而有Deny之。资源策略Deny中的显式优先于委托人基于身份的策略Allow中的任何内容。

{ "Sid": "DenySpecificPrincipals", "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::ACCOUNT_ID:role/role-name" }, "Action": [ "bedrock:Retrieve", "bedrock:GetDocumentContent" ], "Resource": "arn:aws:bedrock:REGION:OWNER_ACCOUNT_ID:knowledge-base/KB_ID" }

管理资源策略

要管理知识库上的资源策略,知识库所有者的 IAM 委托人需要以下权限:

处理建议 说明
bedrock:PutResourcePolicy 在知识库中附加或更新基于资源的策略。
bedrock:GetResourcePolicy 查看附加到知识库的基于资源的政策。
bedrock:DeleteResourcePolicy 从知识库中删除基于资源的策略。

知识库所有者的策略示例

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "bedrock:PutResourcePolicy", "bedrock:GetResourcePolicy", "bedrock:DeleteResourcePolicy" ], "Resource": "arn:aws:bedrock:REGION:ACCOUNT_ID:knowledge-base/KB_ID" } ] }

API 操作

PutResourcePolicy— 在知识库中附加或替换基于资源的策略。

PUT /resourcepolicy/{knowledgeBaseArn} HTTP/1.1 Content-Type: application/json { "policy": "{policyDocument}" }

policy字段是一个包含策略文档的 JSON-escaped 字符串。

GetResourcePolicy— 返回当前附加到知识库的基于资源的策略。

GET /resourcepolicy/{knowledgeBaseArn} HTTP/1.1

ResourceNotFoundException如果未附加任何策略,则返回。

DeleteResourcePolicy— 从知识库中删除基于资源的策略。

DELETE /resourcepolicy/{knowledgeBaseArn} HTTP/1.1

资源策略版本控制

当您调用时PutResourcePolicy,API policyRevisionId 会返回表示策略的当前版本的。您可以选择在后续PutResourcePolicy调用中包含此修订版 ID 以强制执行乐观锁定。

  • 如果您提供的与当前版本policyRevisionId相匹配,则更新成功并返回新的修订版 ID。

  • 如果您提供的与当前版本policyRevisionId不匹配(因为另一位委托人同时更新了策略),则调用将失败并显示冲突错误。检索当前策略,合并您的更改,然后重试。

  • 如果省略,则无论是否同时进行任何修改policyRevisionId,都将无条件地替换该策略。

当多个管理员或自动化系统可能同时更新相同的知识库策略时,请使用修订版 ID,以防止意外覆盖。

设置消费者账户

在使用者账户中,将基于身份的策略附加到需要访问共享知识库的委托人。该政策必须允许所有者账户对知识库 ARN 进行相应的 Amazon Bedrock 操作。

基于身份的策略示例

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "bedrock:Retrieve", "bedrock:GetDocumentContent" ], "Resource": "arn:aws:bedrock:REGION:OWNER_ACCOUNT_ID:knowledge-base/KB_ID" } ] }