一、前言:为什么必须开启认证?

在 AI 大模型时代,向量数据库承载着企业的核心知识资产。然而默认安装的 Milvus 就像"大门敞开"的仓库——任何人都能连接并操作你的数据。

风险场景:

  • 内网渗透测试时被发现 19530 端口开放

  • 多团队协作时误删他人 Collection

  • 生产环境数据被未授权访问

本文将手把手教你通过 环境变量方式 快速启用 Token 认证,无需修改配置文件,5 分钟完成安全加固。


二、环境准备

2.1 确认当前部署状态

确保你已使用 Docker Compose 部署 Milvus Standalone 模式:

# 检查当前运行的容器
sudo docker ps | grep milvus

# 预期输出类似:
# milvus-standalone  milvusdb/milvus:v2.5.10  Up 3 days

2.2 版本要求

  • Milvus 版本: v2.3.0 及以上(推荐 v2.5.x)

  • PyMilvus 版本: 2.3.0 及以上

  • Docker Compose: v2.0+


三、核心配置:一键开启认证

3.1 修改 docker-compose.yml

找到 standalone 服务的环境变量部分,添加关键一行

version: '3.5'

services:
  etcd:
    container_name: milvus-etcd
    image: quay.io/coreos/etcd:v3.5.5
    # ... 其他配置保持不变

  minio:
    container_name: milvus-minio
    image: minio/minio:RELEASE.2023-03-20T20-16-18Z
    # ... 其他配置保持不变

  standalone:
    container_name: milvus-standalone
    image: milvusdb/milvus:v2.5.10  # 建议升级到最新版
    command: ["milvus", "run", "standalone"]
    security_opt:
      - seccomp:unconfined
    environment:
      ETCD_ENDPOINTS: etcd:2379
      MINIO_ADDRESS: minio:9000
      # 🔥 关键配置:开启 Token/账密认证
      common.security.authorizationEnabled: "true"
    volumes:
      - ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/milvus:/var/lib/milvus
    ports:
      - "19530:19530"
      - "9091:9091"
    depends_on:
      - "etcd"
      - "minio"

配置要点解析:

参数 说明 默认值
common.security.authorizationEnabled 启用 RBAC 认证 false
生效方式 环境变量注入,无需挂载配置文件 -
默认账号 root / Milvus -

四、重启服务生效

4.1 优雅重启(推荐)

# 1. 进入 docker-compose.yml 所在目录
cd /path/to/your/milvus-deployment

# 2. 停止现有服务(保留数据卷)
sudo docker compose down

# 3. 重新启动(后台模式)
sudo docker compose up -d

# 4. 查看启动日志(确认无报错)
sudo docker logs -f milvus-standalone --tail 100

4.2 验证服务状态

# 检查健康状态
sudo docker compose ps

# 预期输出:
# NAME                STATUS
# milvus-etcd         healthy
# milvus-minio        healthy
# milvus-standalone   healthy  ← 关键看这一项

⚠️ 重要提示: 首次启用认证后,Milvus 会在 etcd 中初始化权限数据,启动时间可能延长 10-30 秒,请耐心等待 healthy 状态。


五、Python 客户端连接实战

5.1 安装依赖

pip install pymilvus>=2.5.0

5.2 首次连接与密码修改

from pymilvus import MilvusClient, DataType
import sys

# ==========================================
# 步骤 1:使用默认 root 账号连接
# ==========================================
try:
    client = MilvusClient(
        uri="http://localhost:19530",
        token="root:Milvus"  # 默认格式:用户名:密码
    )
    print("✅ 认证连接成功!")
except Exception as e:
    print(f"❌ 连接失败: {e}")
    sys.exit(1)

# ==========================================
# 步骤 2:立即修改默认密码(安全最佳实践)
# ==========================================
try:
    client.update_password(
        user_name="root",
        old_password="Milvus",
        new_password="YourStrong@Pass123"  # 建议:大小写+数字+特殊符号
    )
    print("✅ root 密码修改成功!")
    
    # 重新用新密码连接(验证有效性)
    client = MilvusClient(
        uri="http://localhost:19530",
        token="root:YourStrong@Pass123"
    )
    print("✅ 新密码验证通过!")
    
except Exception as e:
    print(f"❌ 密码修改失败: {e}")
    sys.exit(1)

# ==========================================
# 步骤 3:创建业务账号(生产环境推荐)
# ==========================================
try:
    # 创建只读用户
    client.create_user(
        user_name="app_reader",
        password="Reader@2024"
    )
    print("✅ 业务用户 app_reader 创建成功")
    
    # 查看所有用户
    users = client.list_users()
    print(f"📋 当前用户列表: {users}")
    
except Exception as e:
    print(f"⚠️ 用户创建提示: {e}")

5.3 连接错误排查

错误 1:未提供 Token

# 错误代码
client = MilvusClient(uri="http://localhost:19530")
# 报错:MilvusException: (code=2, message=fail to get credential)

错误 2:密码错误

# 错误代码
client = MilvusClient(uri="http://localhost:19530", token="root:WrongPass")
# 报错:MilvusException: (code=5, message=authentication failed)

解决方案: 检查 common.security.authorizationEnabled 是否生效,查看容器日志确认认证模式已开启。


六、高级安全配置

6.1 配置超级用户(密码重置场景)

如需支持"忘记旧密码时强制重置",在环境变量中添加:

environment:
  ETCD_ENDPOINTS: etcd:2379
  MINIO_ADDRESS: minio:9000
  common.security.authorizationEnabled: "true"
  common.security.superUsers: "root,admin"  # 这些用户重置密码无需旧密码

6.2 Attu 可视化工具连接

启用认证后,Attu 连接时需要填写:

字段
Milvus Address localhost:19530
Database default
Authentication ✅ 启用
Username root
Password YourStrong@Pass123

七、生产环境 checklist

□ 修改默认 root 密码(必须)
□ 创建业务专用账号(避免使用 root 日常操作)
□ 配置防火墙规则(限制 19530 端口访问 IP)
□ 启用 TLS 加密传输(生产环境建议)
□ 定期备份 etcd 数据(权限信息存储于此)
□ 监控认证失败日志(防范暴力破解)

八、常见问题 FAQ

Q1: 启用认证后现有数据会丢失吗?
A: 不会。认证信息存储在 etcd 中,与业务数据分离。

Q2: 如何关闭认证?
A: 将 common.security.authorizationEnabled 改为 "false" 后重启,但生产环境强烈不建议。

Q3: 支持 LDAP/SSO 集成吗?
A: Milvus 2.5 目前支持内置账号体系,企业级 LDAP 集成需通过 API 网关或 Zilliz Cloud 实现。


九、总结

通过本文的 环境变量注入法,我们实现了:

  1. ✅ 零配置文件修改,升级维护更简单

  2. ✅ 基于 Token 的安全认证机制

  3. ✅ 完整的账号生命周期管理(创建/修改/删除)

关键配置回顾:

common.security.authorizationEnabled: "true"

安全无小事,向量数据库作为 AI 应用的核心基础设施,务必在部署首日就完成认证加固!


参考文档:

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐