配置访问权限
知识存储服务和记忆存储服务支持通过 RAM Policy,从接口(Action)和资源(Resource)两个维度对访问进行精细化控制,授权粒度可精细到知识库子空间或记忆范围(scope),满足多业务、多团队、多租户场景下的访问隔离需求。
适用范围
本文描述的鉴权规则适用于以下两类 API。
知识存储相关 API:管理知识存储、文档(Document)、切片(Chunk),以及知识检索(Retrieve)。
记忆存储相关 API:管理记忆存储、记忆(Memory)、记忆消息与请求、记忆任务(Task)以及 Dream 任务(Dream Task)等。
授权语法和元素
RAM Policy 由 Effect、Action、Resource、Condition 四个元素组成,通用语法详见授权语法与元素,本文仅介绍知识存储与记忆存储相关的差异部分,即 Action 的取值范围与 Resource 的资源 ARN 格式。
接口(Action)
Action 格式为 ots:<API 名称>,支持通配符 *,例如 ots:*KnowledgeBase 匹配全部知识存储管理操作,ots:*Memory* 匹配全部记忆相关操作。下表按功能分组列出全部可授权接口。
知识存储
功能分组 | Action |
知识存储管理 |
|
文档管理 |
|
切片管理 |
|
检索 |
|
记忆存储
功能分组 | Action |
记忆存储管理 |
|
记忆管理 |
|
消息与请求 |
|
记忆任务 |
|
Dream 任务 |
|
资源(Resource)
所有资源 ARN 均以实例为前缀,整体结构如下。
acs:ots:$region:$accountId:instance/$instanceName/<资源路径>占位符 | 说明 |
| 实例所在地域 ID,例如 |
| 资源所属阿里云账号 ID(UID)。使用 |
| 实例名称。使用 |
| 知识存储或记忆存储的资源路径,按下文规则拼接。 |
知识存储
知识存储资源支持三个授权层级,从粗到细如下。
授权层级 | Resource 格式 | 匹配范围 |
实例级 |
| 实例下的全部知识存储。 |
知识存储级 |
| 指定的单个知识存储,包含其下全部文档与切片。 |
子空间级 |
| 指定知识存储下的单个子空间(subspace)。 |
资源关键字 knowledgebase 和 subspace 为固定值;$knowledgeBaseName 与 $subspace 取自请求中的同名字段。鉴权层级按以下规则确定:
请求未携带
knowledgeBaseName(典型如列举类操作)时,按实例级.../instance/$instanceName/*鉴权。请求携带单个
subspace时按子空间级鉴权;一次请求涉及多个 subspace 时,回退到所属知识存储级.../knowledgebase/$knowledgeBaseName鉴权。如需放开某个知识存储下的全部子空间,使用通配符
.../knowledgebase/$knowledgeBaseName/subspace/*,或直接授权到知识存储级(其覆盖范围包含全部子空间)。
记忆存储
记忆存储资源支持三个授权层级,从粗到细如下。
授权层级 | Resource 格式 | 匹配范围 |
实例级 |
| 实例下的全部记忆存储。 |
记忆存储级 |
| 指定记忆存储下的全部记忆。请求未携带 |
范围(scope)级 |
| 指定记忆存储下、指定范围内的记忆。请求携带 |
资源关键字 memorystore、appid、tenantid、agentid、runid 为固定值;$memoryStoreName 取自请求中的同名字段,$appId、$tenantId、$agentId、$runId 取自请求 scope 中的对应字段。请求未携带 memoryStoreName 时,按实例级 .../instance/$instanceName/* 鉴权。
范围(scope)默认值
请求携带 scope 但未指定其中某个字段时,该字段在鉴权资源中取默认值 __default__。例如请求 scope 仅指定 appId=app_a,鉴权资源拼接为:
acs:ots:$region:$accountId:instance/$instanceName/memorystore/$memoryStoreName/appid/app_a/tenantid/__default__/agentid/__default__/runid/__default__在 RAM Policy 中放开某些范围维度时,必须使用通配符 *(如 .../agentid/*/runid/*)显式占位,不可省略对应层级,否则将匹配到 __default__ 而非全部值。
常见授权场景示例
以下示例统一以实例名 myinstance 为例,请将示例中的 $accountId 替换为实际账号 ID,并按业务实际情况调整地域、知识存储名、记忆存储名等占位符。
只读访问指定知识存储
以下策略允许对知识存储 product_docs_kb 进行检索与查询,禁止任何写操作。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ots:DescribeKnowledgeBase",
"ots:GetDocument",
"ots:ListDocuments",
"ots:ListChunks",
"ots:Retrieve"
],
"Resource": [
"acs:ots:cn-hangzhou:$accountId:instance/myinstance/knowledgebase/product_docs_kb",
"acs:ots:cn-hangzhou:$accountId:instance/myinstance/knowledgebase/product_docs_kb/subspace/*"
]
}
]
}按子空间隔离知识库写权限
以下策略允许对知识存储 product_docs_kb 的子空间 team_a 进行文档与切片的读写,其他子空间不受影响。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ots:AddDocuments",
"ots:GetDocument",
"ots:ListDocuments",
"ots:UpdateDocument",
"ots:DeleteDocuments",
"ots:ListChunks",
"ots:UpdateChunks",
"ots:Retrieve"
],
"Resource": "acs:ots:cn-hangzhou:$accountId:instance/myinstance/knowledgebase/product_docs_kb/subspace/team_a"
}
]
}按应用维度隔离记忆访问
以下策略允许对记忆存储 agent_mem 中 appId=app_a 的全部记忆(不限 tenant、agent、run)进行读写,其他 appId 的记忆不可访问。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ots:AddMemories",
"ots:SearchMemories",
"ots:ListMemories",
"ots:GetMemory",
"ots:UpdateMemory",
"ots:DeleteMemory"
],
"Resource": "acs:ots:cn-hangzhou:$accountId:instance/myinstance/memorystore/agent_mem/appid/app_a/tenantid/*/agentid/*/runid/*"
}
]
}未限定的 tenantid、agentid、runid 必须用 * 显式放开,不可省略,原因见上文范围(scope)默认值说明。
实例内全权管理
以下策略允许对实例 myinstance 下所有相关资源执行全部操作。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ots:*KnowledgeBase",
"ots:*Document*",
"ots:*Chunks",
"ots:Retrieve",
"ots:*Memory*"
],
"Resource": "acs:ots:cn-hangzhou:$accountId:instance/myinstance/*"
}
]
}注意事项
资源前缀始终为实例:资源 ARN 必须以
acs:ots:$region:$accountId:instance/$instanceName/开头,知识存储与记忆存储均不存在跨实例的资源形态。上级覆盖下级:上层资源天然覆盖其下子资源。授权到知识存储级即覆盖其下全部子空间,授权到记忆存储级
memorystore/$store/*即覆盖其下全部范围。需要精细控制时,下钻到子空间级或范围级。主账号不受策略约束:以上策略仅作用于 RAM 用户与角色,主账号(Root)默认拥有自有资源的全部权限。