Milvus RBAC Erklärt: Sichern Sie Ihre Vector Datenbank mit rollenbasierter Zugriffskontrolle
Beim Aufbau eines Datenbanksystems verbringen Ingenieure die meiste Zeit mit der Leistung: Indextypen, Abruf, Latenz, Durchsatz und Skalierung. Aber sobald ein System über den Laptop eines einzelnen Entwicklers hinausgeht, wird eine andere Frage genauso wichtig: Wer darf was in Ihrem Milvus-Cluster tun? Mit anderen Worten - Zugangskontrolle.
In der gesamten Branche sind viele betriebliche Vorfälle auf einfache Fehler bei den Zugriffsrechten zurückzuführen. Ein Skript wird in der falschen Umgebung ausgeführt. Ein Dienstkonto hat einen breiteren Zugriff als vorgesehen. Eine gemeinsam genutzte Administratorberechtigung landet in CI. Diese Probleme tauchen in der Regel als sehr praktische Fragen auf:
Dürfen Entwickler Produktionssammlungen löschen?
Warum kann ein Testkonto Vektordaten aus der Produktion lesen?
Warum melden sich mehrere Dienste mit der gleichen Administratorrolle an?
Können Analyse-Jobs nur Lesezugriff mit null Schreibrechten haben?
Milvus begegnet diesen Herausforderungen mit rollenbasierter Zugriffskontrolle (RBAC). Anstatt jedem Benutzer Superadmin-Rechte zu geben oder zu versuchen, Einschränkungen im Anwendungscode durchzusetzen, können Sie mit RBAC genaue Berechtigungen auf Datenbankebene definieren. Jeder Benutzer oder Dienst erhält genau die Fähigkeiten, die er benötigt - und nicht mehr.
Dieser Beitrag erklärt, wie RBAC in Milvus funktioniert, wie man es konfiguriert und wie man es sicher in Produktionsumgebungen anwendet.
Warum Zugriffskontrolle bei der Verwendung von Milvus wichtig ist
Wenn Teams klein sind und ihre KI-Anwendungen nur eine begrenzte Anzahl von Benutzern bedienen, ist die Infrastruktur in der Regel einfach. Einige wenige Techniker verwalten das System, Milvus wird nur für die Entwicklung oder für Tests verwendet, und die Arbeitsabläufe sind unkompliziert. In dieser frühen Phase erscheint die Zugangskontrolle selten dringend, da das Risiko gering ist und Fehler leicht rückgängig gemacht werden können.
Wenn Milvus in die Produktion übergeht und die Zahl der Benutzer, Dienste und Betreiber wächst, ändert sich das Nutzungsmodell schnell. Häufige Szenarien sind:
Mehrere Geschäftssysteme nutzen dieselbe Milvus-Instanz
Mehrere Teams greifen auf dieselben Vektorsammlungen zu
Test-, Staging- und Produktionsdaten koexistieren in einem einzigen Cluster
Unterschiedliche Rollen, die unterschiedliche Zugriffsebenen benötigen, von reinen Leseabfragen bis hin zu Schreibzugriffen und Betriebskontrolle
Ohne klar definierte Zugriffsgrenzen schaffen diese Konfigurationen vorhersehbare Risiken:
Testworkflows könnten versehentlich Produktionskollektionen löschen
Entwickler könnten versehentlich Indizes ändern, die von Live-Diensten verwendet werden
Die weit verbreitete Nutzung des
rootKontos macht es unmöglich, Aktionen nachzuvollziehen oder zu überprüfen.Eine kompromittierte Anwendung könnte uneingeschränkten Zugriff auf alle Vektordaten erhalten.
Mit zunehmender Nutzung ist es nicht mehr tragbar, sich auf informelle Konventionen oder gemeinsame Administratorkonten zu verlassen. Ein konsistentes, durchsetzbares Zugriffsmodell wird unerlässlich - und das ist genau das, was Milvus RBAC bietet.
Was ist RBAC in Milvus
RBAC (Role-Based Access Control, rollenbasierte Zugriffskontrolle) ist ein Berechtigungsmodell, das den Zugriff auf der Grundlage von Rollen und nicht von einzelnen Benutzern steuert. In Milvus können Sie mit RBAC genau definieren, welche Operationen ein Benutzer oder Dienst durchführen darf - und auf welche spezifischen Ressourcen. Es bietet eine strukturierte, skalierbare Methode zur Verwaltung der Sicherheit, wenn Ihr System von einem einzelnen Entwickler zu einer kompletten Produktionsumgebung wächst.
Milvus RBAC ist um die folgenden Kernkomponenten herum aufgebaut:
Benutzer Rollen Privilegien
Ressource: Die Entität, auf die zugegriffen wird. In Milvus gehören zu den Ressourcen die Instanz, die Datenbank und die Sammlung.
Privileg: Eine bestimmte erlaubte Operation auf einer Ressource - zum Beispiel das Erstellen einer Sammlung, das Einfügen von Daten oder das Löschen von Entitäten.
Privilegiengruppe: Eine vordefinierte Gruppe von verwandten Privilegien, wie z. B. "nur lesen" oder "schreiben".
Rolle: Eine Kombination aus Berechtigungen und den Ressourcen, auf die sie sich beziehen. Eine Rolle bestimmt, welche Operationen durchgeführt werden können und wo.
Benutzer: Eine Identität in Milvus. Jeder Benutzer hat eine eindeutige ID und ist einer oder mehreren Rollen zugeordnet.
Diese Komponenten bilden eine klare Hierarchie:
Benutzern werden Rollen zugewiesen
Rollen definieren Privilegien
Privilegien gelten für bestimmte Ressourcen
Ein wichtiges Gestaltungsprinzip in Milvus ist, dass Berechtigungen niemals direkt an Benutzer vergeben werden. Der gesamte Zugriff erfolgt über Rollen. Diese Umleitung vereinfacht die Verwaltung, reduziert Konfigurationsfehler und macht Änderungen der Berechtigungen vorhersehbar.
Dieses Modell lässt sich in realen Einsätzen problemlos skalieren. Wenn sich mehrere Benutzer eine Rolle teilen, werden bei einer Aktualisierung der Berechtigungen für die Rolle sofort die Berechtigungen für alle Benutzer aktualisiert, ohne dass jeder Benutzer einzeln geändert werden muss. Es handelt sich um einen einzigen Kontrollpunkt, der der Art und Weise entspricht, wie moderne Infrastrukturen den Zugriff verwalten.
Wie RBAC in Milvus funktioniert
Wenn ein Client eine Anfrage an Milvus sendet, prüft das System diese durch eine Reihe von Autorisierungsschritten. Jeder Schritt muss bestanden werden, bevor die Operation fortgesetzt werden kann:
Wie RBAC in Milvus funktioniert
Authentifizierung der Anfrage: Milvus verifiziert zunächst die Identität des Benutzers. Wenn die Authentifizierung fehlschlägt, wird die Anfrage mit einem Authentifizierungsfehler zurückgewiesen.
Rollenzuweisung prüfen: Nach der Authentifizierung prüft Milvus, ob dem Benutzer mindestens eine Rolle zugewiesen ist. Wird keine Rolle gefunden, wird die Anfrage mit dem Fehler "Berechtigung verweigert" abgelehnt.
Erforderliche Berechtigungen überprüfen: Milvus prüft dann, ob die Rolle des Benutzers die erforderlichen Berechtigungen für die Zielressource gewährt. Schlägt die Berechtigungsprüfung fehl, wird die Anfrage mit dem Fehler "Berechtigung verweigert" zurückgewiesen.
Ausführen der Operation: Wenn alle Prüfungen erfolgreich waren, führt Milvus die angeforderte Operation aus und gibt das Ergebnis zurück.
So konfigurieren Sie die Zugriffskontrolle über RBAC in Milvus
1. Voraussetzungen
Bevor RBAC-Regeln ausgewertet und durchgesetzt werden können, muss die Benutzerauthentifizierung aktiviert werden, damit jede Anfrage an Milvus mit einer bestimmten Benutzeridentität verknüpft werden kann.
Hier sind zwei Standard-Bereitstellungsmethoden.
- Bereitstellen mit Docker Compose
Wenn Milvus mit Docker Compose bereitgestellt wird, bearbeiten Sie die Konfigurationsdatei milvus.yaml und aktivieren Sie die Autorisierung, indem Sie common.security.authorizationEnabled auf true setzen:
common:
security:
authorizationEnabled: true
- Einsatz mit Helm Charts
Wenn Milvus mithilfe von Helm Charts bereitgestellt wird, bearbeiten Sie die Datei values.yaml und fügen Sie die folgende Konfiguration unter extraConfigFiles.user.yaml hinzu:
extraConfigFiles:
user.yaml: |+
common:
security:
authorizationEnabled: true
2. Initialisierung
Standardmäßig erstellt Milvus beim Start des Systems einen eingebauten Benutzer root. Das Standardpasswort für diesen Benutzer lautet Milvus.
Als ersten Sicherheitsschritt sollten Sie den Benutzer root verwenden, um sich mit Milvus zu verbinden, und das Standardpasswort sofort ändern. Es wird dringend empfohlen, ein komplexes Passwort zu verwenden, um unbefugten Zugriff zu verhindern.
from pymilvus import MilvusClient
# Connect to Milvus using the default root user
client = MilvusClient(
uri='http://localhost:19530',
token="root:Milvus"
)
# Update the root password
client.update_password(
user_name="root",
old_password="Milvus",
new_password="xgOoLudt3Kc#Pq68"
)
3. Kernfunktionen
Benutzer anlegen
Für den täglichen Gebrauch wird empfohlen, eigene Benutzer anzulegen, anstatt das Konto root zu verwenden.
client.create_user(user_name="user_1", password="P@ssw0rd")
Rollen erstellen
Milvus bietet eine eingebaute admin Rolle mit vollen administrativen Rechten. Für die meisten Produktionsszenarien wird jedoch empfohlen, benutzerdefinierte Rollen zu erstellen, um eine feiner abgestufte Zugriffskontrolle zu erreichen.
client.create_role(role_name="role_a")
Privilegiengruppen erstellen
Eine Berechtigungsgruppe ist eine Sammlung von mehreren Berechtigungen. Um die Verwaltung von Berechtigungen zu vereinfachen, können verwandte Berechtigungen gruppiert und gemeinsam gewährt werden.
Milvus enthält die folgenden eingebauten Berechtigungsgruppen:
COLL_RO,COLL_RW,COLL_ADMINDB_RO,DB_RW,DB_ADMINCluster_RO,Cluster_RW,Cluster_ADMIN
Die Verwendung dieser integrierten Berechtigungsgruppen kann die Komplexität des Berechtigungsdesigns erheblich reduzieren und die Konsistenz zwischen den Rollen verbessern.
Sie können entweder die integrierten Berechtigungsgruppen direkt verwenden oder bei Bedarf benutzerdefinierte Berechtigungsgruppen erstellen.
# Create a privilege group
client.create_privilege_group(group_name='privilege_group_1')
# Add privileges to the privilege group
client.add_privileges_to_group(group_name='privilege_group_1', privileges=['Query', 'Search'])
Erteilen von Berechtigungen oder Berechtigungsgruppen an Rollen
Nachdem eine Rolle erstellt wurde, können der Rolle Berechtigungen oder Berechtigungsgruppen zugewiesen werden. Die Zielressourcen für diese Berechtigungen können auf verschiedenen Ebenen angegeben werden, einschließlich der Instanz, der Datenbank oder einzelner Sammlungen.
client.grant_privilege_v2(
role_name="role_a",
privilege="Search",
collection_name='collection_01',
db_name='default',
)
client.grant_privilege_v2(
role_name="role_a",
privilege="privilege_group_1",
collection_name='collection_01',
db_name='default',
)
client.grant_privilege_v2(
role_name="role_a",
privilege="ClusterReadOnly",
collection_name='*',
db_name='*',
)
Erteilen von Rollen an Benutzer
Sobald einem Benutzer Rollen zugewiesen sind, kann er auf Ressourcen zugreifen und die durch diese Rollen definierten Operationen durchführen. Einem einzelnen Benutzer können eine oder mehrere Rollen zugewiesen werden, je nach dem erforderlichen Zugriffsumfang.
client.grant_role(user_name="user_1", role_name="role_a")
4. Zugriff prüfen und entziehen
Einem Benutzer zugewiesene Rollen inspizieren
client.describe_user(user_name="user_1")
Einer Rolle zugewiesene Privilegien prüfen
client.describe_role(role_name="role_a")
Privilegien einer Rolle entziehen
client.revoke_privilege_v2(
role_name="role_a",
privilege="Search",
collection_name='collection_01',
db_name='default',
)
client.revoke_privilege_v2(
role_name="role_a",
privilege="privilege_group_1",
collection_name='collection_01',
db_name='default',
)
Rollen eines Benutzers widerrufen
client.revoke_role(
user_name='user_1',
role_name='role_a'
)
Benutzer und Rollen löschen
client.drop_user(user_name="user_1")
client.drop_role(role_name="role_a")
Beispiel: Design der Zugriffskontrolle für ein Milvus-gestütztes RAG-System
Betrachten Sie ein Retrieval-Augmented Generation (RAG)-System, das auf Milvus aufbaut.
In diesem System haben verschiedene Komponenten und Benutzer klar getrennte Verantwortlichkeiten, und jeder benötigt eine andere Zugriffsebene.
| Akteur | Verantwortung | Erforderlicher Zugriff |
|---|---|---|
| Plattform-Administrator | Systembetrieb und -konfiguration | Verwaltung auf Instanzebene |
| Vektor-Ingestion-Dienst | Aufnahme und Aktualisierung von Vektordaten | Lese- und Schreibzugriff |
| Suchdienst | Suche und Abruf von Vektordaten | Nur-Lese-Zugriff |
from pymilvus import MilvusClient
client = MilvusClient(
uri='http://localhost:19530',
token="root:xxx" # Replace with the updated root password
)
# 1. Create a user (use a strong password)
client.create_user(user_name="rag_admin", password="xxx")
client.create_user(user_name="rag_reader", password="xxx")
client.create_user(user_name="rag_writer", password="xxx")
# 2. Create roles
client.create_role(role_name="role_admin")
client.create_role(role_name="role_read_only")
client.create_role(role_name="role_read_write")
# 3. Grant privileges to the role
## Using built-in Milvus privilege groups
client.grant_privilege_v2(
role_name="role_admin",
privilege="Cluster_Admin",
collection_name='*',
db_name='*',
)
client.grant_privilege_v2(
role_name="role_read_only",
privilege="COLL_RO",
collection_name='*',
db_name='default',
)
client.grant_privilege_v2(
role_name="role_read_write",
privilege="COLL_RW",
collection_name='*',
db_name='default',
)
# 4. Assign the role to the user
client.grant_role(user_name="rag_admin", role_name="role_admin")
client.grant_role(user_name="rag_reader", role_name="role_read_only")
client.grant_role(user_name="rag_writer", role_name="role_read_write")
Schnelle Tipps: Wie Sie die Zugriffskontrolle in der Produktion sicher betreiben
Um sicherzustellen, dass die Zugangskontrolle in langlaufenden Produktionssystemen effektiv und überschaubar bleibt, sollten Sie diese praktischen Richtlinien befolgen.
1. Ändern Sie das Standardpasswort root und schränken Sie die Verwendung des Kontos root ein.
Aktualisieren Sie das Standardpasswort root sofort nach der Initialisierung und beschränken Sie seine Verwendung auf administrative Aufgaben. Vermeiden Sie die Verwendung oder gemeinsame Nutzung des root-Kontos für Routinevorgänge. Erstellen Sie stattdessen dedizierte Benutzer und Rollen für den täglichen Zugriff, um das Risiko zu verringern und die Verantwortlichkeit zu verbessern.
2. Physische Isolierung von Milvus-Instanzen in verschiedenen Umgebungen
Stellen Sie separate Milvus-Instanzen für Entwicklung, Staging und Produktion bereit. Die physische Isolierung bietet eine stärkere Sicherheitsgrenze als die logische Zugriffskontrolle allein und verringert das Risiko von Fehlern in verschiedenen Umgebungen erheblich.
3. Befolgen Sie das Prinzip der geringsten Privilegien
Gewähren Sie nur die für jede Rolle erforderlichen Berechtigungen:
Entwicklungsumgebungen: Die Berechtigungen können großzügiger sein, um Iterationen und Tests zu unterstützen.
Produktionsumgebungen: Die Berechtigungen sollten streng auf das Notwendige beschränkt werden.
Regelmäßige Audits: Regelmäßige Überprüfung der bestehenden Berechtigungen, um sicherzustellen, dass sie noch erforderlich sind.
4. Aktiver Entzug von Berechtigungen, wenn sie nicht mehr benötigt werden
Zugriffskontrolle ist keine einmalige Einrichtung, sondern erfordert eine kontinuierliche Pflege. Entziehen Sie Rollen und Berechtigungen umgehend, wenn sich Benutzer, Dienste oder Verantwortlichkeiten ändern. Dadurch wird verhindert, dass sich ungenutzte Berechtigungen im Laufe der Zeit ansammeln und zu versteckten Sicherheitsrisiken werden.
Fazit
Die Konfiguration der Zugriffskontrolle in Milvus ist nicht von Natur aus komplex, aber sie ist für den sicheren und zuverlässigen Betrieb des Systems in der Produktion unerlässlich. Mit einem gut durchdachten RBAC-Modell können Sie:
Risiken reduzieren, indem Sie versehentliche oder zerstörerische Operationen verhindern
die Sicherheit verbessern, indem der Zugriff auf Vektordaten mit den geringsten Rechten erzwungen wird
Standardisierung der Abläufe durch eine klare Trennung der Verantwortlichkeiten
Zuverlässig skalieren und so die Grundlage für mandantenfähige und groß angelegte Implementierungen schaffen
Zugriffskontrolle ist keine optionale Funktion oder eine einmalige Aufgabe. Sie ist ein grundlegender Bestandteil des sicheren Betriebs von Milvus auf lange Sicht.
Beginnen Sie mit dem Aufbau einer soliden Sicherheitsgrundlage mit RBAC für Ihren Milvus-Einsatz.
Haben Sie Fragen oder möchten Sie eine Funktion des neuesten Milvus genauer kennenlernen? Treten Sie unserem Discord-Kanal bei oder stellen Sie Fragen auf GitHub. Sie können auch eine 20-minütige Einzelsitzung buchen, um Einblicke, Anleitungen und Antworten auf Ihre Fragen über die Milvus-Sprechstunde zu erhalten.
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word



