Aller au contenu principal

Chapitre 3 : Sécurité et contrôle d'accès

Préoccupations de sécurité dans RAG​

PréoccupationRisqueAtténuation
Accès non autoriséFuite de donnéesContrôle d'accès
Injection de promptManipulationValidation des entrées
Isolation des donnéesInter-locataireEspaces de noms

Permissions au niveau du document​

def search_with_permissions(query, user):
"""Filtrer les résultats en fonction des permissions de l'utilisateur"""
# Obtenir les ID de documents autorisés pour l'utilisateur
allowed_docs = get_user_permissions(user.id)

# Recherche avec filtre
results = vectorstore.similarity_search(
query,
filter={"doc_id": {"$in": allowed_docs}},
k=10
)

return results

Architecture multi-locataire​

Option 1 : Isolation par espace de noms​

# Chaque locataire obtient un espace de noms
def get_tenant_retriever(tenant_id):
return vectorstore.as_retriever(
search_kwargs={
"namespace": f"tenant_{tenant_id}",
"k": 5
}
)

Option 2 : Filtrage par métadonnées​

# Stocker tenant_id dans les métadonnées
def add_document(text, tenant_id):
vectorstore.add_texts(
[text],
metadatas=[{"tenant_id": tenant_id}]
)

def query_tenant(query, tenant_id):
return vectorstore.similarity_search(
query,
filter={"tenant_id": tenant_id}
)

Validation des entrées​

def sanitize_query(query):
"""Prévenir l'injection de prompt"""
# Supprimer les motifs d'injection potentiels
dangerous_patterns = [
"ignore previous instructions",
"disregard the above",
"system:"
]

for pattern in dangerous_patterns:
if pattern.lower() in query.lower():
raise ValueError("Requête invalide")

return query

Journalisation des audits​

def log_rag_access(user_id, query, docs_accessed, response):
"""Journaliser toutes les interactions RAG"""
log_entry = {
"timestamp": datetime.utcnow(),
"user_id": user_id,
"query": query,
"documents_accessed": [d.id for d in docs_accessed],
"response_length": len(response)
}
audit_logger.info(json.dumps(log_entry))

Liste de vérification de sécurité​

  • Mettre en œuvre l'authentification
  • Appliquer les permissions des documents
  • Isoler les données des locataires
  • Valider/sanitiser les entrées
  • Journaliser tous les accès
  • Chiffrer les données sensibles
  • Audits de sécurité réguliers