RBAC 概述
v1.29 中添加基于角色的访问控制 (RBAC) 在 Weaviate 中从 v1.29 版本开始可用。
Weaviate 通过基于 授权级别,根据 认证用户身份提供差异化访问权限。
如果启用了基于角色的访问控制 (RBAC),则可以根据用户的角色进一步限制访问权限。下图说明了 Weaviate 中的 RBAC 模型,其中访问权限由定义角色和向其分配特定权限来控制。这些权限决定了用户可以对指定资源类型执行哪些操作。
主要组件是
-
用户:将各个用户(例如
user-a和user-b)分配给特定角色。 -
角色:每个角色封装一组权限。这种抽象化使您可以管理一组用户可以执行的操作。
-
权限:权限由三个部分组成
- 操作:诸如创建、读取、更新、删除和管理等操作。
- 资源:这些操作的具体目标,例如集合和备份。
- 可选约束:资源特定的约束,例如按集合名称过滤。
此 RBAC 系统可确保用户仅具有其角色所需的访问权限,从而提高 Weaviate 中的安全性和可管理性。可以通过 Weaviate REST API 直接或通过 客户端库 以编程方式管理角色和权限。
角色
预定义角色
Weaviate 附带一组预定义角色。这些角色是
root:root 角色对 Weaviate 中的所有资源具有完全访问权限。viewer:viewer 角色对 Weaviate 中的所有资源具有只读访问权限。
可以通过 Weaviate 配置文件使用 AUTHORIZATION_RBAC_ROOT_USERS 环境变量将 root 角色分配给用户。无法修改预定义角色。但是,可以通过 Weaviate API 向用户分配其他角色。
也可以通过 Weaviate API 分配所有角色,包括预定义角色。预定义角色无法修改,但可以分配或撤销用户的权限。
有关如何将预定义角色分配给用户的更多信息,请参阅 RBAC:配置页面。
自定义角色
任何未分配预定义角色的已认证用户默认情况下都没有角色或权限。
可以通过具有适当权限来管理角色的 Weaviate 用户修改这些用户的权限。这允许创建自定义角色,并根据需要将其分配给用户。
可以使用 预定义的 root 角色或具有 manage_roles 权限的自定义角色来执行角色管理。
在向管理角色的角色分配权限时请务必小心。这些权限可用于通过向用户分配其他角色来提升权限。仅将这些权限分配给受信任的用户。
权限
Weaviate 中的权限定义了用户可以对特定资源执行哪些操作。每个权限由以下组成
- 资源类型(例如,集合、备份)
- 访问级别(读取、写入、更新、删除、管理)
- 可选的资源特定约束
可用权限
可以使用以下资源、访问级别和可选约束定义权限
| 资源类型 | 访问级别 | 可选的资源特定约束 |
|---|---|---|
| 角色管理 | 创建角色 读取角色信息 更新角色权限 删除角色 | 角色名称过滤器
角色范围
|
| 用户管理 | 创建用户 读取用户信息 更新/轮换用户 API 密钥 删除用户 向用户分配和撤销角色 | 用户名过滤器
|
| 集合 (仅集合定义,数据对象权限是单独的) | 创建集合 读取集合定义 更新集合定义 删除集合 | 集合名称过滤器
|
| 租户 | 创建租户 读取租户信息 更新租户 删除租户 | 集合名称过滤器
租户名称过滤器
|
| 数据对象 | 创建对象 读取对象 更新对象 删除对象 | 集合名称过滤器
租户名称过滤器
|
| 备份 | 管理备份 | 集合名称过滤器
|
| 集群数据访问 | 读取集群元数据 | |
| 节点数据访问 | 以指定的详细程度读取节点元数据 | 详细程度
集合名称过滤器(仅适用于
|
| 集合别名 | 创建别名 读取别名 更新别名 删除别名 | 别名名称过滤器
|
| 复制 | 创建复制 读取复制 更新复制 删除复制 | 集合名称过滤器
分片名称过滤器
|
| 组 | 读取组 分配和撤销组成员资格 | 组名称过滤器
组类型过滤器
|
权限行为
在定义权限时,将权限设置为 False 表示权限未设置,而不是明确拒绝访问。这意味着如果用户具有多个角色,并且一个角色授予权限而另一个将其设置为 False,则用户仍然可以通过授予权限的角色获得该权限。
例如,如果用户具有两个角色
- 角色 A 将
read设置为False,用于集合 X - 角色 B 将
read设置为True,用于集合 X
用户将具有对集合 X 的读取访问权限,因为角色 B 授予了权限,而角色 A 的 False 值仅仅表示未设置权限,而不是阻止访问。
权限中的名称过滤器
某些权限需要集合名称过滤器才能指定权限适用的集合。
在这种情况下,"*" 充当多字符通配符。例如,将权限设置为 "Test*" 作为集合名称过滤器将把该权限应用于所有以 Test 开头的集合。或者,将权限设置为 "*" 作为集合过滤器将把该权限应用于所有可用集合。
集合和租户权限
集合权限独立于租户权限。
要对属于集合的租户进行操作的权限,用户必须具有该集合的适当租户级别权限。集合级别权限,例如创建集合的权限,不会授予等效的租户级别权限,例如创建该集合的租户的权限。
例如,要在名为 TestCollection 的集合中创建租户,用户必须具有在该集合中“创建”租户的权限。这与创建名为 TestCollection 的集合的权限是分开的。
用户
可以使用 用户管理 API 来创建、删除和列出用户、轮换其 API 密钥以及管理其角色。
更多资源
问题和反馈
如果您有任何问题或反馈,请在 用户论坛 中告诉我们。
