Torna al blog Security & Reliability

La tua applicazione self-hosted può ricostruire la ricerca? Checklist di prontezza operativa

Il ripristino di un database può riportare online un’applicazione mentre la ricerca rimane incompleta, obsoleta o non sicura. Usa questa checklist operativa per mappare le dipendenze della ricerca, decidere se un indice può essere ricostruito e testare la reale finestra di ripristino.

Team operativo che mappa database, archiviazione file, indice di ricerca e flusso di ripristino di un’applicazione self-hosted

La ricerca è una dipendenza operativa, non solo una funzionalità dell’interfaccia

La ricerca può sembrare una funzionalità standard dell’applicazione: una casella nell’intestazione, un filtro in una pagina di record o un modo per trovare testo all’interno dei file caricati. Dal punto di vista operativo, può essere un sistema separato, con dati, configurazione, processi di elaborazione e modalità di errore propri.

Questa distinzione è importante durante un ripristino, una migrazione o un incidente. Il ripristino del database principale può ripristinare utenti, record e riferimenti ai documenti, ma lasciare la ricerca vuota, obsoleta o incompleta. Un servizio di ricerca separato può richiedere il ripristino di uno snapshot, una ricostruzione dai record sorgente o entrambe le cose. La ricerca nei file può inoltre dipendere da uno storage degli allegati accessibile e da strumenti di estrazione del testo.

Considera la ricerca ripristinata solo quando gli utenti possono trovare i record e i contenuti dei documenti appropriati, mentre gli utenti senza autorizzazione non possono individuare informazioni protette tramite risultati, estratti, conteggi o evidenziazioni. Il semplice fatto che un servizio risponda alle query non dimostra, da solo, che l’esperienza di ricerca sia stata ripristinata.

  • Definisci la ricerca come una dipendenza nel piano di ripristino dell’applicazione, insieme al database, allo storage dei file, all’identità e alla configurazione di rete.
  • Stabilisci un obiettivo di ripristino per una ricerca utilizzabile, non soltanto per l’avvio del processo di ricerca.
  • Assegna un responsabile per le decisioni sul ripristino della ricerca, l’esecuzione della ricostruzione e i test di accettazione.
  • Documenta se la ricerca è necessaria per il lavoro ordinario immediatamente dopo il ripristino o se può essere ripristinata in una fase successiva.
La ricerca è una dipendenza operativa, non solo una funzionalità dell’interfaccia

Mappa l’intero percorso di ricerca prima di decidere cosa sottoporre a backup

Inizia con una mappa del flusso dei dati, anziché con un’ipotesi sull’architettura di un prodotto. Per ogni elemento ricercabile, traccia il modo in cui diventa un risultato. Il record autorevole può risiedere in un database relazionale; un file binario caricato può risiedere in un volume di file o nell’object storage; il testo estratto può essere archiviato separatamente; e un indice può essere conservato nel database o in un cluster di ricerca dedicato.

Identifica inoltre il percorso della query. L’applicazione può interrogare il proprio database, inviare una richiesta a un servizio di ricerca separato, applicare regole di autorizzazione nell’applicazione oppure basarsi su attributi di controllo degli accessi indicizzati. Questi dettagli determinano se una ricostruzione è praticabile e dove un errore nelle autorizzazioni potrebbe esporre dati.

Una mappa utile distingue la fonte di verità durevole dagli artefatti derivati. Dovrebbe coprire sia i record strutturati sia gli allegati, perché ripristinare i metadati di un file non equivale a ripristinare il file o il testo precedentemente estratto da esso.

  • Record autorevoli: quali tabelle, raccolte o API del database contengono il titolo, il corpo, lo stato, il proprietario e i dati di accesso canonici?
  • Allegati: dove sono archiviati i file originali e sono inclusi nella procedura di backup e ripristino dell’applicazione?
  • Contenuto estratto: il testo viene generato al caricamento, salvato nello storage principale, salvato nel sistema di ricerca o generato solo durante l’indicizzazione?
  • Indice: si tratta di un indice full-text del database, di un indice in un motore di ricerca separato o di una combinazione?
  • Elaborazione: quali worker, code, webhook, job pianificati o comandi manuali creano e aggiornano le voci dell’indice?
  • Servizio di query: quale componente esegue le ricerche e di quale configurazione, credenziali e percorso di rete necessita?
  • Autorizzazione: dove vengono applicate le restrizioni a livello di record, documento e campo?
Mappa l’intero percorso di ricerca prima di decidere cosa sottoporre a backup

Classifica l’indice: autorevole, derivato o parzialmente derivato

La domanda centrale per il ripristino non è se un’applicazione abbia un indice. È se l’indice possa essere ricreato da dati sorgente conservati e accessibili, a un costo accettabile e in un tempo accettabile.

Un indice derivato può in genere essere ricostruito quando vengono conservati i record canonici, i file e le regole di trasformazione necessarie. Uno snapshot della ricerca può comunque essere prezioso perché può abbreviare il ripristino, preservare la configurazione operativa o evitare una ricostruzione di grandi dimensioni. Tuttavia, non è l’unica copia dei dati aziendali.

Un indice autorevole o parzialmente autorevole richiede un esame più approfondito. Può contenere testo arricchito, embedding, dati storici, autorizzazioni, annotazioni o altro materiale che non può essere rigenerato dai dati dell’applicazione ripristinata. Se tali informazioni sono necessarie per una ricerca corretta, l’indice e la configurazione associata diventano elementi critici per il backup. Non presumere che uno snapshot del motore di ricerca contenga ogni dipendenza: file esterni, database dell’applicazione e informazioni esterne di identità o autorizzazione possono rimanere al di fuori di esso.

Per i cluster di ricerca dedicati, la configurazione è importante quanto i documenti. Elastic documenta che gli snapshot possono includere dati, configurazione e dati interni delle funzionalità, a seconda del caso d’uso. Al contrario, l’API Reindex di Elastic richiede documenti sorgente conservati con _source abilitato e non copia le impostazioni o i template dell’indice sorgente nella destinazione. Un runbook di ricostruzione deve quindi identificare mapping previsti, scelte per shard e repliche, template e configurazione di ingest prima dell’inizio del lavoro.

  • Derivato: tutti i contenuti ricercabili e gli attributi di accesso possono essere rigenerati dai record primari e dai file conservati.
  • Autorevole: parte dei contenuti o metadati ricercabili necessari esiste solo nell’indice o nel suo snapshot.
  • Parzialmente derivato: i record principali possono essere ricostruiti, ma arricchimenti, contenuto estratto, segnali di ranking o dati di accesso potrebbero non essere riproducibili.
  • Sconosciuto: nessun responsabile è in grado di mostrare la sorgente, la trasformazione e la procedura di ricostruzione. Consideralo una lacuna da colmare prima dell’adozione o della produzione.

Esamina trigger di indicizzazione, code e gestione degli errori

Una ricostruzione dell’indice spesso fallisce non perché il motore di ricerca non sia disponibile, ma perché il processo che lo alimenta non viene mai eseguito o perde silenziosamente il lavoro. Identifica ogni evento che dovrebbe creare, aggiornare o rimuovere un elemento ricercabile: creazione di record, modifiche, caricamenti di allegati, cambiamenti delle autorizzazioni, spostamenti tra progetti o spazi, eliminazioni e azioni di conservazione.

Identifica poi come tali eventi vengono consegnati. Un’applicazione può indicizzare in modo sincrono durante una richiesta utente, inserire il lavoro in una coda asincrona, eseguire un job pianificato o richiedere un comando dell’amministratore. Ogni modello ha implicazioni di ripristino distinte. Il lavoro in coda richiede una policy chiara dopo un ripristino: riprodurlo, scartarlo ed eseguire una ricostruzione completa, oppure ripristinare lo stato della coda se tale stato è necessario e affidabile.

Il comportamento in caso di errore merita un test diretto. OpenSearch documenta che un processore di ingest in errore interrompe la pipeline per impostazione predefinita e il documento non viene indicizzato, mentre una gestione facoltativa degli errori può modificare questo comportamento. La sua documentazione descrive inoltre il logging degli errori e le metriche di ingest con conteggi dei fallimenti. Qualunque sia la tecnologia scelta, gli operatori devono poter rispondere in modo osservabile a questa domanda: quanti elementi sono stati inviati, completati con successo, falliti, ritentati e rimangono in attesa?

  • Elenca ogni trigger di indicizzazione, compresi i cambiamenti di autorizzazione e le eliminazioni.
  • Registra il worker o lo scheduler responsabile di ogni trigger e il modo in cui viene avviato dopo il ripristino.
  • Determina se le code sono durevoli, sottoposte a backup e sicure da riprodurre dopo un ripristino.
  • Individua log degli errori, metriche o viste di stato che identificano il lavoro di indicizzazione fallito e in attesa.
  • Definisci il comportamento dei tentativi e il percorso di escalation per gli elementi con errore permanente.
  • Verifica se un elemento eliminato o soggetto a restrizioni di accesso viene rimosso o aggiornato rapidamente nella ricerca.

Testa la ricerca filtrata per autorizzazioni come controllo di autorizzazione dei dati

L’autorizzazione della ricerca deve essere valutata a livello del risultato. Un utente può accedere correttamente e disporre di un ruolo generale appropriato, ma ricevere comunque un titolo, un estratto, un’evidenziazione, un conteggio dei risultati o testo di un allegato relativo a un record specifico che non è autorizzato a consultare.

OWASP ASVS richiede autorizzazioni esplicite per specifici elementi di dati e l’applicazione dell’autorizzazione in un livello di servizio affidabile, comprese le regole per l’accesso a dati specifici e a livello di campo. Applica questo principio all’intera esperienza di ricerca, non soltanto all’apertura di un risultato dopo che è stato mostrato.

Questo è particolarmente importante dopo una ricostruzione. Se i dati di autorizzazione sono indicizzati, potrebbero essere obsoleti o mancanti. Se il filtraggio avviene nell’applicazione, verifica che venga applicato a ogni percorso di query. Controlla la ricerca globale, la ricerca avanzata, l’autocompletamento, le ricerche salvate, le esportazioni, le API, le notifiche in background e qualsiasi funzionalità di IA o recupero che utilizzi risultati di ricerca.

  • Crea account di test che rappresentino un utente normale, un responsabile, un amministratore e, dove pertinente, un utente esterno o con restrizioni.
  • Inserisci o identifica record con regole di accesso intenzionalmente diverse, incluso un allegato riservato.
  • Cerca termini univoci presenti in titoli protetti, testo del corpo e contenuti dei file.
  • Verifica che gli utenti non autorizzati non visualizzino risultati, estratti, evidenziazioni, conteggi o suggerimenti che rivelino contenuti protetti.
  • Modifica l’accesso a un elemento noto, quindi misura e verifica come la modifica raggiunge la ricerca.
  • Ripeti i test dopo un ripristino e dopo una ricostruzione completa dell’indice.

Includi allegati ed estrazione del testo nel progetto di ripristino

La ricerca nei file è un problema di ripristino distinto dalla ricerca nei record. Un’applicazione può indicizzare soltanto nomi e metadati dei file, oppure può estrarre il testo dai documenti supportati. Nel secondo caso, una ricostruzione riuscita dipende dalla disponibilità e leggibilità dei file binari originali e, quando necessario, dal loro nuovo invio al processo di estrazione.

Il plugin ingest-attachment di OpenSearch è un esempio di questo modello: utilizza Apache Tika per estrarre contenuto e metadati dai file, che possono poi essere memorizzati in un campo allegato. La documentazione sui formati di Apache Tika chiarisce che il supporto è specifico per formato e distingue l’estrazione dei metadati dall’estrazione del contenuto testuale. Il set di test dovrebbe quindi rappresentare i file sui quali le persone fanno realmente affidamento, anziché soltanto un comodo documento di testo.

La policy di estrazione influisce sulla completezza. Il processore di allegati di OpenSearch ha un limite di caratteri estratti che può essere configurato; un limite diverso può cambiare ciò che diventa ricercabile. Registra tali limiti e le implicazioni in termini di risorse di ogni modifica. Documenta inoltre il trattamento di file cifrati, scansioni prive di testo utilizzabile, caricamenti danneggiati, formati non comuni e file rifiutati dalla policy. Una ricostruzione non può recuperare testo che non è mai stato estraibile, conservato o indicizzato con successo.

  • Ripristina e verifica l’accesso all’archivio originale degli allegati prima di dichiarare recuperabile la ricerca nei file.
  • Mantieni un corpus di test rappresentativo: documenti Office comuni, PDF, testo semplice, fogli di calcolo, presentazioni, file scansionati e formati specialistici importanti utilizzati dal team.
  • Registra i formati supportati e quelli intenzionalmente non supportati, oltre al comportamento previsto per ciascuno.
  • Registra i limiti di estrazione, le impostazioni linguistiche ove applicabili e qualsiasi restrizione di dimensione o sicurezza.
  • Testa una frase nota vicina alla fine di un documento rappresentativo lungo per rilevare eventuali troncamenti.
  • Misura separatamente i conteggi delle estrazioni e indicizzazioni fallite rispetto all’indicizzazione riuscita dei metadati.

Esegui un test di ripristino della ricerca che misuri il ripristino utilizzabile

Una dichiarazione scritta sui backup non dimostra che la ricerca possa essere ripristinata. NIST SP 800-184 sottolinea la pianificazione del ripristino, lo sviluppo di playbook, i test e il miglioramento. Inserisci la ricerca in questo ciclo con un’esercitazione ripetibile.

Utilizza un ambiente di test isolato e autorizzato. Ripristina i dati applicativi primari e gli allegati da un punto di ripristino selezionato, ripristina o ricrea il servizio di ricerca e la relativa configurazione, quindi segui il percorso documentato di ricostruzione o ripristino da snapshot. OpenSearch osserva che gli snapshot del cluster richiedono tempo e non sono viste perfettamente simultanee di un cluster attivo; definisci quindi quale limite di coerenza sia accettabile e come gestire le modifiche che avvengono durante l’attività di backup.

Il test dovrebbe concludersi con evidenze, non con lo stato positivo di un processo. Confronta i risultati attesi ed effettivi per un campione controllato di record e allegati. Conferma sia i risultati positivi per gli utenti autorizzati sia l’assenza di risultati protetti per gli utenti non autorizzati. Registra il tempo trascorso per ripristinare i dati primari, rendere pronta l’infrastruttura di ricerca, completare l’indicizzazione, svuotare eventuali arretrati e superare la convalida. Questo totale è la finestra pratica di ripristino per la ricerca.

  • Scegli un punto di ripristino e documentane l’orario e il confine previsto dei dati.
  • Ripristina record canonici, dati di utenti e autorizzazioni richiesti dall’applicazione e storage degli allegati.
  • Ripristina il servizio di ricerca da uno snapshot oppure ricostruiscilo da fonti conservate, secondo il progetto documentato.
  • Riapplica i template di indice, i mapping, le pipeline di ingest, le impostazioni e la configurazione di accesso necessari prima o durante la ricostruzione, secondo necessità.
  • Monitora totali degli elementi, profondità della coda, errori dei processori e stato di completamento durante l’intera esercitazione.
  • Convalida ricerche di termini esatti per record noti, frasi previste negli allegati e elementi modificati o eliminati.
  • Esegui test delle autorizzazioni su tutti i percorsi di query rilevanti.
  • Registra tempi trascorsi, eccezioni, interventi manuali e lacune irrisolte; aggiorna il runbook prima del test successivo.

Inserisci servizi e configurazione di ricerca nei registri di backup, migrazione e modifica

La necessità di sottoporre a backup l’indice stesso è una decisione progettuale, non una regola universale. Un indice completamente derivato, con una ricostruzione testata, può essere ricreato anziché sottoposto a backup come percorso principale di ripristino. Un indice di grandi dimensioni, un processo di estrazione lento o un indice parzialmente autorevole possono giustificare snapshot per ridurre il downtime o preservare informazioni che non possono essere ricreate.

Se vengono utilizzati snapshot, includi gli elementi che li rendono utilizzabili. Elastic rileva che gli snapshot possono preservare configurazione e dati interni delle funzionalità, mentre la perdita degli indici di sistema o dello stato del cluster può comportare la perdita della configurazione e dello stato delle funzionalità. Verifica con precisione cosa includa l’ambito dello snapshot selezionato nella tua distribuzione, anziché applicare un’ipotesi generica. Per OpenSearch, considera il fatto che la tempistica degli snapshot non rappresenta una vista point-in-time perfettamente simultanea.

Lo stesso inventario supporta migrazioni e gestione delle modifiche. Un cambiamento di mapping, analizzatori, pipeline di ingest, limiti di estrazione, comportamento delle code, autorizzazioni o policy di conservazione può alterare la qualità della ricerca e il comportamento di ripristino. Acquisisci la configurazione desiderata in una forma controllata e riproducibile e aggiorna il runbook di ripristino ogni volta che cambia il progetto della ricerca.

Airbip fornisce deployment gestito per applicazioni di catalogo come workload Docker su server cloud Airbip, insieme alla gestione del ciclo di vita dei servizi e a backup giornalieri, settimanali e mensili configurabili. Queste funzionalità possono supportare il lato infrastrutturale di una distribuzione applicativa. Il team dell’applicazione deve comunque determinare cosa memorizza l’applicazione scelta, come viene costruita la sua ricerca e chi convalida il ripristino di dati, allegati, autorizzazioni e comportamento della ricerca.

  • Inventaria backup del database, backup degli allegati, snapshot della ricerca, esportazioni di configurazione e segreti o credenziali richiesti dalla procedura di ripristino.
  • Documenta conservazione, aspettative per il punto di ripristino e responsabilità del ripristino per ciascun artefatto.
  • Registra le ipotesi di compatibilità per componenti di applicazione, database, estrazione e ricerca prima di modificarli.
  • Decidi se il percorso preferito sia il ripristino da snapshot, la ricostruzione completa o una combinazione a fasi.
  • Richiedi una revisione dell’impatto sulla ricerca per le modifiche a schema, gestione dei file, autorizzazione e flussi di lavoro di indicizzazione.
  • Conserva un record datato dell’ultima esercitazione di ripristino riuscita e delle lacune individuate.

Domande frequenti

Un backup del database può ripristinare la ricerca in un’applicazione self-hosted?

A volte, ma non sempre. La ricerca può essere implementata nel database oppure dipendere da un indice separato, worker, code, storage dei file e processi di estrazione. Conferma l’architettura dell’applicazione e testa il ripristino dell’intero percorso di ricerca.

Dovremmo sottoporre a backup l’indice di ricerca o ricostruirlo?

Usa una ricostruzione testata quando l’indice è interamente derivato dai dati primari e dai file conservati e quando la ricostruzione rientra nella finestra pratica di ripristino. Preferisci gli snapshot come parte del piano quando riducono materialmente il tempo di ripristino, preservano la configurazione necessaria o contengono informazioni che non possono essere rigenerate. Molti ambienti usano entrambi.

Cosa rende impossibile ricostruire in sicurezza un indice di ricerca?

Tra gli ostacoli comuni vi sono contenuti sorgente canonici mancanti, allegati inaccessibili o persi, pipeline di ingest o mapping non registrati, strumenti di estrazione non disponibili, dati di autorizzazione mancanti e contenuti indicizzati che sono stati arricchiti o creati solo nel sistema di ricerca. Anche un processo non testato o non documentato rappresenta un rischio operativo significativo.

Perché la ricerca negli allegati deve essere testata separatamente?

I file caricati possono richiedere l’estrazione del testo prima che il loro contenuto diventi ricercabile. Il supporto all’estrazione varia in base al formato del file e policy quali i limiti di caratteri estratti possono influire sulla quantità di contenuto indicizzato. Ripristinare solo i metadati dei file non dimostra che il contenuto dei file possa essere cercato.

Come testiamo se la ricerca rispetta le autorizzazioni?

Utilizza account con diversi livelli di accesso ai dati e cerca termini univoci in record e allegati con autorizzazioni intenzionalmente differenti. Verifica che gli utenti non autorizzati non possano vedere risultati, estratti, evidenziazioni, conteggi, suggerimenti di autocompletamento o risposte API che rivelino contenuti protetti. Ripeti dopo le ricostruzioni e le modifiche alle autorizzazioni.

Quando è preferibile un modello di ricerca integrato nel database rispetto a un servizio di ricerca separato?

Può essere preferibile quando il comportamento di ricerca richiesto è adeguatamente supportato dal database dell’applicazione e la semplicità operativa è una priorità. PostgreSQL, ad esempio, supporta la ricerca full-text e documenta vettori di ricerca generati memorizzati con indici GIN. Un servizio separato può aggiungere funzionalità, ma aggiunge anche dipendenze che devono essere gestite e ripristinate.

Fonti e approfondimenti

  1. Snapshot and restore — Elastic
  2. Reindex documents — Elastic
  3. Take and restore snapshots — OpenSearch
  4. Handling pipeline failures — OpenSearch
  5. Ingest-attachment plugin — OpenSearch
  6. Supported Document Formats — Apache Tika
  7. OWASP ASVS 5.0: Authorization — OWASP
  8. NIST SP 800-184: Guide for Cybersecurity Event Recovery — NIST
  9. PostgreSQL Full Text Search: Tables and Indexes — PostgreSQL Global Development Group
  10. PostgreSQL Full Text Search: Preferred Index Types — PostgreSQL Global Development Group