本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
托管知识库的资源策略
基于资源的策略是您直接附加到托管知识库的 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:Retrieve和bedrock:GetDocumentContent。 -
资源或操作中没有通配符。您必须在
Resource元素中指定完整的知识库 ARN,并明确列出每个操作。这些元素不支持通配符。
跨账户访问的工作原理
Cross-account access 允许其他 AWS 账户的委托人致电Retrieve并GetDocumentContent访问您的知识库。要使用跨账户访问权限,必须满足以下两个条件:
-
知识库所有者附加了一个资源策略,该策略向调用主体授予访问权限。
-
调用方具有基于身份的策略,允许对知识库 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" } ] }