Vector Databases

Weaviate Multi-Tenant RAG : Sécurité au niveau des lignes et index isolés

La construction de systèmes de génération augmentée par récupération (RAG) pour les plateformes SaaS d'entreprise pose un défi unique : l'isolation des données. Contrairement aux applications mono-tenant, les environnements multi-tenant exigent des frontières strictes entre les clients. Bien que Weaviate offre une multi-tenancy native, la simple séparation des extraits par tenant est souvent insuffisante pour une sécurité de niveau entreprise. Cet article explore comment combiner les index isolés de Weaviate avec la sécurité au niveau des lignes (RLS) au niveau de l'application pour créer une architecture RAG sécurisée et évolutive.

Comprendre la multi-tenancy de Weaviate

La fonctionnalité de multi-tenancy de Weaviate vous permet de stocker les données de différents tenants dans une seule collection tout en maintenant une isolation physique ou logique. Chaque tenant possède son propre ensemble de vecteurs, créant ainsi des sous-collections. Cela réduit la surcharge de ressources par rapport à la création d'une collection distincte par client, mais nécessite une gestion minutieuse du contrôle d'accès.

L'avantage clé est la performance. Les requêtes sont limitées à des tenants spécifiques, garantissant que les opérations de recherche ne traversent que le shard de données pertinent. Cependant, cela ne gère pas automatiquement les autorisations au niveau de l'utilisateur au sein d'un tenant. C'est là que la sécurité au niveau des lignes (RLS) intervient.

Mise en œuvre de la sécurité au niveau des lignes avec le filtrage de métadonnées

La RLS dans Weaviate est généralement appliquée par le biais du filtrage de métadonnées. En étiquetant chaque vecteur avec des attributs supplémentaires tels que department, role ou project_id, vous pouvez restreindre les documents qu'un utilisateur peut récupérer. Par exemple, un "Responsable Financier" ne verrait que les documents étiquetés department: finance, tandis qu'un "Ingénieur" verrait department: engineering.

Voici comment vous pouvez structurer vos données pour prendre en charge la RLS :

import weaviate
import json

client = weaviate.Client("http://localhost:8080")

# Define a document with RLS-relevant metadata
document = {
    "title": "Q3 Financial Report",
    "content": "Detailed analysis of Q3 earnings...",
    "tenant": "acme-corp",
    "department": "finance",
    "clearance_level": "senior"
}

# Add to Weaviate with the appropriate tenant context
client.data_object.create(
    data=doc,
    collection="RAG_Documents",
    tenant="acme-corp"
)

Construction du pipeline de requêtes sécurisé

Lors de l'exécution d'une requête RAG, vous devez appliquer deux niveaux de filtrage : l'isolation du tenant et la sécurité au niveau des lignes. La couche applicative doit intercepter le contexte de l'utilisateur et construire dynamiquement la requête de filtre.

def secure_rag_query(client, user_context, query_text):
    tenant = user_context["tenant"]
    department = user_context["department"]
    
    # Construct the filter for RLS
    rls_filter = {
        "where": {
            "path": ["department"],
            "operator": "Equal",
            "valueText": department
        }
    }

    # Perform the hybrid search with tenant and filter
    results = client.query.get(
        collection="RAG_Documents",
        properties=["title", "content"],
        limit=5
    ).with_tenant(tenant).with_where_filter(rls_filter).with_nearest_neighbor(
        query_text
    ).do()

    return results

Meilleures pratiques pour le déploiement en entreprise

D'abord, ne faites jamais confiance aux filtres côté client. Appliquez toujours la RLS côté serveur en utilisant le client Python ou Go de Weaviate. Deuxièmement, utilisez des conventions de nommage cohérentes pour les identifiants de tenant afin d'éviter les conflits. Troisièmement, surveillez la latence des requêtes, car les filtres complexes peuvent affecter les performances ; envisagez de pré-calculer les embeddings pour les sous-ensembles filtrés si nécessaire. Enfin, implémentez la journalisation pour suivre quels documents sont accédés par quels utilisateurs aux fins de conformité à l'audit.

Conclusion

La combinaison de la multi-tenancy de Weaviate avec une sécurité robuste au niveau des lignes fournit une base puissante pour les systèmes RAG d'entreprise. En isolant les index par tenant et en appliquant un contrôle d'accès fin via les métadonnées, vous pouvez offrir une récupération de connaissances personnalisée et sécurisée qui évolue avec votre entreprise. À mesure que les applications IA deviennent plus centrales dans les opérations d'entreprise, la maîtrise de ces modèles de sécurité n'est plus optionnelle — elle est essentielle.

Share: