
类型:向量数据库
简介:存储、索引和管理由深度神经网络和机器学习(ML)模型生成的大规模嵌入向量。
Milvus提供了多种安全功能来保障数据安全性,包括启用TLS加密和用户身份验证。通过设置相应的配置,可以确保与Milvus的通信是加密的,并且只有授权用户能够访问系统。
为了更好地管理用户权限,Milvus还支持基于角色的访问控制(RBAC),管理员可以灵活地定义和分配角色与权限。Milvus允许通过配置文件启用或禁用这些安全功能,以满足不同安全需求。本文将详细介绍如何启用 TLS 和用户身份验证,如何创建、管理用户与角色,以及如何处理证书和加密设置。
一、启用Milvus身份验证
TLS 和用户身份验证是两种不同的安全方法。如果在 Milvus 系统中同时启用了用户身份验证和 TLS,则必须提供用户名、密码和证书文件路径。
本页的代码片段使用新的MilvusClient(Python) 与 Milvus 进行交互。用于其他语言的新 MilvusClient SDK 将在未来更新中发布。
要为 Milvus 服务器启用用户身份验证,请在 Milvus 配置文件milvus.yaml 中将 common.security.authorizationEnabled 设置为 true。
1、通过身份验证连接Milvus
启用身份验证后,需要使用用户名和密码连接到 Milvus。默认情况下,启动 Milvus 时会创建root 用户,密码为Milvus 。下面是一个示例,说明如何使用默认root 用户在启用身份验证后连接 Milvus:
2、创建新用户
以默认root 用户身份连接后,可以按以下步骤创建和验证新用户:
3、使用新用户连接 Milvus
使用新创建用户的凭据进行连接:
4、更新用户密码
用以下代码更改现有用户的密码:
如果忘记了旧密码,Milvus 提供了一个配置项,允许将某些用户指定为超级用户。这样,重置密码时就不需要旧密码了。
默认情况下,Milvus 配置文件中的common.security.superUsers 字段为空,这意味着所有用户在重置密码时都必须提供旧密码。不过,你可以将特定用户指定为超级用户,他们不需要提供旧密码。在下面的代码段中,root 和foo 被指定为超级用户。
你应该在管理 Milvus 实例运行的 Milvus 配置文件中添加以下配置项。
5、删除用户
要删除用户,请使用drop_user() 方法。
client.drop_user(user_name="user_1")
要删除用户,你不能是被删除的用户。否则,将引发错误。
6、列出所有用户
列出所有用户。
client.list_users()
7、限制条件
用户名不得为空,长度不得超过 32 个字符。必须以字母开头,且只能包含下划线、字母或数字。
密码必须至少包含 6 个字符,长度不得超过 256 个字符。
二、用户权限角色
Milvus 通过 RBAC 实现细粒度访问控制。可以从创建用户和角色开始,然后为角色分配权限或权限组,最后通过向用户授予角色来管理访问控制。这种方法可确保访问管理的效率和安全性。
1、用户
初始化 Milvus 实例后,会自动生成一个根用户,用于首次连接 Milvus 时进行身份验证。根用户的用户名是root ,密码是Milvus 。根用户的默认角色是admin ,可以访问所有资源。为确保数据安全,请妥善保管根用户的凭据,防止未经授权的访问。
对于日常操作,我们建议创建用户而不是使用根用户。
2、创建用户
下面的示例显示了如何创建用户名为user_1 、密码为P@ssw0rd 的用户。用户名和密码必须遵循以下规则:
- 用户名:必须以字母开头,只能包含大写或小写字母、数字和下划线;
- 密码:长度必须为 8-64 个字符,必须包括以下三种字符:大写字母、小写字母、数字和特殊字符。
3、更新密码
创建用户后,如果忘记密码,可以更新密码。
新密码也必须遵循以下规则:
- 长度必须为 8-64 个字符,并包含以下三个字符:大写字母、小写字母、数字和特殊字符;
- 下面的示例显示了如何将用户user_1 的密码更新为NewP@ssw0rd 。
4、列出用户
创建多个用户后,可以列出并查看所有现有用户。
下面是一个输出示例。root 是 Milvus 自动生成的默认用户。user_1 是刚刚创建的新用户。
5、角色
Milvus 提供了一个名为admin 的内置角色,它是一个管理员角色,可以访问所有实例下的资源,并拥有所有操作的权限。为实现更精细的访问管理和增强数据安全性,建议根据需要创建自定义角色。
6、创建角色
下面的示例演示了如何创建名为role_a 的角色。
角色名称必须遵循以下规则:
- 必须以字母开头,且只能包含大写或小写字母、数字和下划线”。
7、列出角色
创建多个角色后,可以列出并查看所有现有角色。
下面是一个输出示例。admin 是 Milvus 中的默认角色。role_a 是刚刚创建的新角色。
三、启用RBAC
RBAC(基于角色的访问控制)是一种基于角色的访问控制方法。通过 RBAC,可以精细控制用户在 Collections、数据库和实例级别上可以执行的操作,增强数据的安全性。
与传统的用户访问控制模型不同,RBAC 引入了角色的概念。在 RBAC 模型中,先授予角色权限,然后再将这些角色授予用户。然后,用户才能获得权限。
RBAC 模型可以提高访问控制管理的效率。例如,如果多个用户需要同一套权限,就不需要为每个用户手动设置权限。相反,你可以创建一个角色并将该角色分配给用户。如果要调整这些用户的权限,只需调整角色的权限,修改后的权限将应用到所有拥有该角色的用户。
RBAC主要概念:
RBAC 模型中有五个主要组成部分。
- 资源:可访问的资源实体。Milvus 中的资源分为三个级别–实例、数据库和 Collections;
- 权限:对 Milvus 资源执行特定操作的权限(如创建 Collection、插入数据等);
- 权限组:由多个权限组成的组;
- 角色:角色由权限和资源两部分组成。权限定义了角色可以执行的操作类型,而资源则定义了可以执行操作的目标资源。例如,数据库管理员角色可以对某些数据库执行读、写和管理操作;
- 用户:用户是指使用 Milvus 的人。每个用户都有一个唯一的 ID,并被授予一个或多个角色。
四、传输中加密
TLS(传输层安全)是一种确保通信安全的加密协议。Milvus 代理使用 TLS 单向和双向验证。
本主题将介绍如何在 Milvus 代理中启用 TLS,用于 gRPC 和 RESTful 流量。
TLS 和用户身份验证是两种不同的安全方法。如果在 Milvus 系统中同时启用了用户身份验证和 TLS,则需要提供用户名、密码和证书文件路径。
1、创建自己的证书
确保已安装 OpenSSL。如果尚未安装,请先构建并安装OpenSSL。
openssl version
如果未安装 OpenSSL。可在 Ubuntu 中使用以下命令安装。
sudo apt install openssl
创建文件
(1)创建gen.sh文件。
mkdir cert && cd cert touch gen.sh
(2)将以下脚本复制到gen.sh 。
有必要在gen.sh 文件中配置CommonName 。CommonName 指的是客户端在连接时应指定的服务器名称。
gen.sh
gen.sh 文件中的变量对创建证书签名请求文件的过程至关重要。前五个变量是基本的签名信息,包括国家、州、地点、组织、组织单位。在配置CommonName 时需要谨慎,因为它将在客户端与服务器通信时进行验证。
(3)运行gen.sh生成证书
运行gen.sh 文件创建证书。
chmod +x gen.sh ./gen.sh
将创建以下七个文件:ca.key,ca.pem,ca.srl,server.key,server.pem,client.key,client.pem 。
请确保ca.key,ca.pem,ca.srl 安全,以便以后更新证书。server.key 和server.pem 文件由服务器使用,而client.key 和client.pem 文件由客户端使用。
(4)更新证书(可选)
如果想在某些情况下更新证书,例如证书即将过期,可以使用以下脚本。
工作目录中需要ca.key,ca.pem,ca.srl 。
renew.sh
运行renew.sh 文件创建证书。
chmod +x renew.sh ./renew.sh













