欢迎光临
我们一直在努力

milvus如何配置账号权限认证?

随着向量数据库在生产环境中的广泛应用,数据安全和多租户隔离成为AI基础设施的关键需求。Milvus 2.x通过内置的基于角色的访问控制(RBAC)机制,提供了强大的身份验证和权限管理能力。

本文将详细指导您如何在Milvus中启用认证,并利用PyMilvus客户端进行用户、角色和权限的配置。

1. 启用授权(Authorization)

Milvus默认情况下禁用权限认证。要启用它,您需要修改Milvus的配置文件 milvus.yaml

找到 authorization 部分,将其中的 enabled 字段设置为 true


1
2
3
4
5
6
7
8
9
10
11
# milvus.yaml 核心配置片段

# ... 其他配置

authorization:
  enabled: true
  # 初始管理员用户的用户名和密码。建议在生产环境中更改默认值。
  initial_username: root
  initial_password: Milvus

# ... 其他配置

操作步骤:

  1. 修改配置: 确保您修改了正在运行的Milvus实例所使用的 milvus.yaml
  2. 重启服务: 重启Milvus服务以使配置生效。如果您使用Docker Compose部署,可以运行 docker-compose restart

注意: 一旦启用授权,所有未提供用户名和密码的连接尝试都将被拒绝。

2. 使用管理员账户连接

服务重启后,您必须使用配置中定义的初始管理员账户(默认为 root/Milvus)进行连接。


1
2
3
4
5
6
7
8
9
10
11
12
from pymilvus import connections, utility

# 替换为您的Milvus地址和启用后的认证信息
connections.connect(
    alias="default",
    host="localhost",
    port="19530",
    user="root",
    password="Milvus"
)

print("成功以管理员身份连接到Milvus")

3. 创建用户和角色

在生产环境中,不应直接使用 root 账户进行日常操作。我们需要创建专用的用户和角色。

3.1 创建用户


1
2
3
4
5
6
7
8
9
10
# 1. 创建一个用于开发环境的用户
utility.create_user("dev_user", "secure_dev_pwd")
print("用户 'dev_user' 创建成功")

# 2. 创建一个用于只读分析的用户
utility.create_user("analytics_reader", "analytics_pwd")
print("用户 'analytics_reader' 创建成功")

# 查看当前所有用户
print(utility.list_users())

3.2 创建自定义角色

Milvus中的权限是授予给角色的,用户再被分配到角色中。这样做可以简化管理。


1
2
3
4
5
6
7
8
9
10
11
# 创建一个只允许读取Collection数据的角色
utility.create_role("read_only_role")

# 创建一个允许管理Collection结构(创建/删除)的角色
utility.create_role("schema_manager_role")

# 将用户分配给角色
utility.add_user_to_role("analytics_reader", "read_only_role")
utility.add_user_to_role("dev_user", "schema_manager_role")

print("角色创建及用户分配完成")

4. 配置和授予权限

权限授权是RBAC的核心。您需要指定:角色、资源类型、资源名称(可选,如Collection名称)以及操作类型(Privilege)。

Milvus支持的资源类型包括 Collection, Global, User, Role 等。

4.1 授予全局只读权限

我们希望 read_only_role 可以描述所有集合、搜索和查询数据,但不能修改结构或写入数据。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 定义 Collection 上的读取权限列表
read_privileges = [
    "DescribeCollection",
    "Search",
    "Query",
    "GetLoadingProgress"
]

for privilege in read_privileges:
    # 授予 read_only_role 在所有 Collection 上的特定权限
    # 资源名称为空字符串 "" 表示应用于所有资源
    utility.grant(
        role_name="read_only_role",
        object_type="Collection",
        object_name="",
        privilege=privilege
    )

print("只读权限配置完成")

4.2 授予结构管理权限

我们希望 schema_manager_role 可以创建和删除集合,但仅限于名称以 dev_ 开头的集合(实现资源隔离)。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 授予创建和删除 Collection 的权限
management_privileges = [
    "CreateCollection",
    "DropCollection"
]

for privilege in management_privileges:
    # 授予 dev_user 在所有 Collection 上管理权限
    # 注意:在Milvus 2.x中,权限控制的粒度如果需要针对Collection名称进行通配符匹配,
    # 需要依赖其底层的权限实现。这里先演示针对全局Collection资源的操作授权。
    utility.grant(
        role_name="schema_manager_role",
        object_type="Collection",
        object_name="",
        privilege=privilege
    )

print("结构管理权限配置完成")

5. 验证新用户权限

现在,我们尝试使用 analytics_reader 用户进行连接和操作验证。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# 断开管理员连接
connections.disconnect("default")

# 使用只读用户连接
connections.connect(
    alias="reader_session",
    host="localhost",
    port="19530",
    user="analytics_reader",
    password="analytics_pwd"
)

# 尝试只读操作 (例如,列出所有集合,如果存在)
try:
    collections = utility.list_collections(using='reader_session')
    print(f"Reader session可以查看的集合: {collections}")
except Exception as e:
    print(f"列出集合失败 (不应该发生如果已授权): {e}")

# 尝试写入操作 (例如,创建集合,应该失败)
try:
    from pymilvus import Collection, FieldSchema, CollectionSchema, DataType
    fields = [
        FieldSchema(name="id", dtype=DataType.INT64, is_primary=True),
        FieldSchema(name="vector", dtype=DataType.FLOAT_VECTOR, dim=128)
    ]
    schema = CollectionSchema(fields, description="Test Collection")
    Collection("test_denied", schema, using='reader_session')
    print("!!! 错误:创建集合成功 (权限未生效或配置错误)")
except Exception as e:
    if "Access denied" in str(e):
        print("权限验证成功: 只读用户无法创建集合。")
    else:
        print(f"其他错误: {e}")

通过上述步骤,您就完成了Milvus RBAC的启用和基本用户权限配置,确保了向量数据平台的安全性和可管理性。

【本站文章皆为原创,未经允许不得转载】:汤不热吧 » milvus如何配置账号权限认证?
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址