Traccia di Audit dei Dati Qdrant

Introduzione
I database vettoriali come Qdrant spesso mancano di tracciati di audit dei dati robusti. Tuttavia, questi database gestiscono informazioni sensibili per applicazioni di machine learning, NLP e ricerche basate su intelligenza artificiale. Le organizzazioni si affidano a Qdrant per l’ottimizzazione della ricerca, la ricerca semantica e i motori di raccomandazione. Ciò rende essenziale implementare una traccia di audit dei dati in Qdrant per proteggere i propri dati.
Una traccia di audit dei dati Qdrant completa tiene traccia di chi accede ai dati, quali modifiche vengono apportate e quando avvengono queste azioni. Senza meccanismi di audit adeguati, le organizzazioni rischiano di violare regolamenti sulla privacy come il GDPR e HIPAA. Queste leggi richiedono una protezione rigorosa delle informazioni sensibili, rendendo le tracce di audit dei dati fondamentali per la conformità.
L’Importanza della Traccia di Audit dei Dati Qdrant
Qdrant memorizza gli embeddings vettoriali come rappresentazioni matematiche piuttosto che identificatori personali diretti. Tuttavia, questi embeddings richiedono comunque un attento monitoraggio tramite tracce di audit dei dati. L’Opinion 05/2014 del Gruppo di Lavoro dell’Articolo 29 avverte che i dati trasformati necessitano di protezione quando potrebbero aiutare a identificare individui tramite inferenza o combinazione dei dati.
La norma sulla privacy ISO/IEC 27701:2019 rafforza questo requisito. Essa impone alle organizzazioni di proteggere le trasformazioni matematiche dei dati personali allo stesso modo delle informazioni originali. Questo rende fondamentale il mantenimento di una traccia di audit dei dati in Qdrant per la sicurezza e la conformità.
La violazione dei dati Equifax del 2017 dimostra perché le organizzazioni necessitano di solide tracce di audit dei dati. Un monitoraggio insufficiente degli accessi ai dati portò a una violazione che interessò 147 milioni di persone e risultò in un accordo da 425 milioni di dollari. L’Articolo 30 del GDPR ora richiede alle organizzazioni di registrare tutte le attività di trattamento dati. Ciò include il monitoraggio di dati trasformati, come gli embeddings vettoriali, attraverso tracce di audit dei dati Qdrant complete.
Capacità di Logging Native di Qdrant
Qdrant è un potente database vettoriale, ma manca di capacità native complete di log per l’audit. Attualmente, Qdrant non dispone di funzionalità integrate specifiche per l’audit. I log di sistema disponibili sono basilari e principalmente progettati per scopi di debug, offrendo dettagli minimi sulle azioni degli utenti, sugli accessi ai dati o sulle modifiche apportate. Affidarsi esclusivamente a questi log di sistema come tracciato di audit non soddisferebbe i requisiti normativi né fornirebbe il livello di dettaglio necessario per la sicurezza e la conformità dei dati.

Per questo motivo, le organizzazioni che desiderano garantire la conformità alle normative dovranno probabilmente implementare soluzioni personalizzate o strumenti di terze parti per assicurarsi che tutte le attività rilevanti, come modifiche ai dati, tentativi di accesso e esecuzione di query, siano opportunamente registrate.
Esempio di Implementazione del Monitoraggio delle Ricerche
Un approccio basilare per implementare le tracce di audit in Qdrant potrebbe prevedere l’involucro del client Qdrant per catturare i log di audit delle operazioni sul database. Di seguito è riportato un esempio di come si potrebbe implementare un wrapper per monitorare l’operazione di ricerca:
from qdrant_client import QdrantClient
from datetime import datetime
import json
from pathlib import Path
class AuditedQdrantClient:
def __init__(self, host='localhost', port=6333, log_file='logs/qdrant_audit.jsonl'):
self.client = QdrantClient(host=host, port=port)
self.log_file = log_file
# Crea la directory dei log se necessario
Path(self.log_file).parent.mkdir(parents=True, exist_ok=True)
def log_operation(self, operation_details: dict):
# Aggiunge il timestamp
operation_details["timestamp"] = datetime.now().isoformat()
# Registra sulla console
print(f"Audit log: {json.dumps(operation_details, indent=2)}")
# Registra sul file
with open(self.log_file, 'a') as f:
json.dump(operation_details, f)
f.write('\n')
def search(self, collection_name: str, query_vector: list, **kwargs):
start_time = datetime.now()
try:
results = self.client.search(
collection_name=collection_name,
query_vector=query_vector,
**kwargs
)
self.log_operation({
"operation": "search",
"collection": collection_name,
"parameters": {
"vector_size": len(query_vector),
"limit": kwargs.get('limit', None),
"other_params": kwargs
},
"results_count": len(results),
"status": "success",
"duration_ms": (datetime.now() - start_time).total_seconds() * 1000
})
return results
except Exception as e:
self.log_operation({
"operation": "search",
"collection": collection_name,
"status": "error",
"error": str(e),
"duration_ms": (datetime.now() - start_time).total_seconds() * 1000
})
raise
Questo semplice wrapper catturerà tutte le operazioni di ricerca eseguite tramite di esso, inclusi i parametri della query, il conteggio dei risultati, il tempo di esecuzione e lo stato (successo o errore).
Esempio di Script di Test
Per testare questa implementazione, è possibile utilizzare lo script seguente, che aggiungerà alcuni punti di test, eseguirà una ricerca basilare e chiamerà lo script di audit per registrare l’operazione di ricerca in un file JSON:
`from qdrant_audit import AuditedQdrantClient
# Crea il client con il logging abilitato
client = AuditedQdrantClient(log_file='logs/qdrant_audit.jsonl')
try:
# Ottieni informazioni sulla collezione
collection_info = client.client.get_collection("test_collection")
print("Informazioni sulla collezione:", collection_info)
# Aggiungi alcuni punti di test
client.client.upsert(
collection_name="test_collection",
points=[
{"id": 1, "vector": [0.1, 0.2, 0.3], "payload": {"description": "punto di test 1"}},
{"id": 2, "vector": [0.2, 0.3, 0.4], "payload": {"description": "punto di test 2"}}
]
)
print("Punti di test aggiunti")
# Esegui una ricerca
results = client.search(
collection_name="test_collection",
query_vector=[0.1, 0.2, 0.3],
limit=10
)
print("Risultati della ricerca:", results)
except Exception as e:
print(f"Errore: {e}")`
Di seguito viene mostrato un output dell’esecuzione con successo dello script:

Possiamo anche provare a modificare la query di test all’interno dello script per eseguire un’operazione su una collezione inesistente, per verificare se anche in questo caso verrebbero registrate richieste non andate a buon fine

Ora, che abbiamo sia tentativi di ricerca falliti sia riusciti, possiamo provare ad accedere ai log:
cat logs/qdrant_audit.jsonl | jq '.'

In sintesi, questo script registra le operazioni di ricerca, catturando però solo i dettagli specifici definiti nella sua implementazione e limitati al suo ambito operativo. Se si desidera includere ulteriori dettagli, come l’indirizzo IP del client o metadati più estesi, oppure se si intende eseguire l’audit di altre operazioni come upsert, delete o create_collection, sarà necessario estendere lo script con logica addizionale o avvolgere questi metodi individualmente.
Affrontare le Limitazioni dell’Audit
Sebbene questa implementazione personalizzata possa dimostrare come si possano implementare basi per le tracce di audit dei dati Qdrant nelle operazioni di ricerca, essa presenta ancora delle limitazioni significative:
- Copertura Limitata: Viene monitorata solo l’operazione di ricerca. Altre azioni come
upsert,deleteecreate_collectionrichiedono wrapper aggiuntivi. - Specificità del Client: Per garantire l’audit, tutte le interazioni con Qdrant devono essere instradate attraverso questo wrapper. Se un altro sviluppatore utilizza direttamente il
QdrantClientpredefinito, tali operazioni non verranno registrate. - Manutenzione Manuale: Costruire un sistema di audit completo richiederebbe un impegno significativo per monitorare tutte le operazioni e mantenere il codice del wrapper.
Per affrontare queste limitazioni, le organizzazioni potrebbero prendere in considerazione:
1. Soluzioni Personalizzate
- Sviluppare collezionatori di log su misura per Qdrant.
- Creare database di audit centralizzati per la conformità.
- Costruire strumenti di reporting personalizzati per la conformità e il rilevamento delle anomalie.
2. Integrazione di Terze Parti
- Sfruttare piattaforme di gestione dei log per l’archiviazione e l’elaborazione centralizzata.
- Integrare con sistemi SIEM per il monitoraggio in tempo reale e gli alert.
- Utilizzare strumenti per il monitoraggio della conformità in modo da garantire che i requisiti normativi vengano rispettati.
3. Modifiche Architetturali
- Implementare livelli proxy per catturare log dettagliati da tutte le richieste degli utenti.
- Introdurre servizi di autenticazione e autorizzazione per monitorare i controlli di accesso.
- Costruire servizi dedicati di log per l’audit in grado di catturare e analizzare le modifiche in tempo reale.
Perché DataSunrise è la Soluzione Perfetta per Qdrant
Sebbene soluzioni personalizzate e integrazioni di terze parti possano contribuire ad affrontare le limitazioni dell’audit in Qdrant, un’opzione più efficace e senza interruzioni è l’integrazione di DataSunrise con Qdrant. DataSunrise offre una soluzione completa per l’audit dei dati che può monitorare tutte le interazioni con il database, garantendo la conformità alle normative e migliorando la sicurezza dei dati.

DataSunrise fornisce una gamma estesa di capacità di audit, tra cui:
- Monitoraggio Completo delle Modifiche ai Dati: Registra tutte le modifiche ai dati, comprese le inserzioni, gli aggiornamenti e le cancellazioni.
- Attribuzione Completa degli Utenti: Tiene traccia di ID sessione, ruoli utente e dettagli delle applicazioni.
- Logging in Tempo Reale delle Query: Cattura l’intero ciclo di vita della query, dall’esecuzione ai risultati.
- Monitoraggio degli Accessi: Registra tutti i tentativi di accesso, riusciti o meno, insieme alle azioni associate.
- Conformità Normativa: Garantisce la conformità al GDPR, HIPAA e ad altri standard di protezione dei dati.
Con DataSunrise, le organizzazioni possono automatizzare il monitoraggio delle operazioni sul database di Qdrant, riducendo la complessità del logging manuale e migliorando significativamente la capacità di rispettare i requisiti normativi.

Conclusione
Nonostante Qdrant sia un potente database vettoriale, le sue capacità native di log per l’audit sono minime e insufficienti per scopi di conformità e sicurezza. Implementando wrapper personalizzati o sfruttando strumenti di terze parti, le organizzazioni possono raggiungere un livello base di tracciabilità delle operazioni. Tuttavia, per tracce di audit complete, scalabili e facilmente gestibili, l’integrazione di una soluzione come DataSunrise rappresenta l’approccio migliore.
DataSunrise offre una soluzione avanzata e pronta all’uso per monitorare e tracciare tutte le interazioni con i dati in Qdrant, rendendola uno strumento prezioso per le organizzazioni che mirano a proteggere dati sensibili e garantire la conformità ai requisiti normativi. Scopri in prima persona i benefici: prenota una demo online oggi stesso e rivoluziona il processo di raccolta delle tracce di audit dei dati in Qdrant con DataSunrise.
