Ricerca tra cluster per il servizio OpenSearch di Amazon - Amazon OpenSearch Service

Ricerca tra cluster per il servizio OpenSearch di Amazon

La ricerca tra cluster nel servizio OpenSearch di Amazon consente di eseguire query e aggregazioni su più domini connessi. Spesso ha più senso utilizzare più domini più piccoli invece di un singolo dominio di grandi dimensioni, soprattutto quando si eseguono diversi tipi di carichi di lavoro.

I domini specifici del carico di lavoro consentono di completare le seguenti attività:

  • Ottimizzare ogni dominio scegliendo i tipi di istanza per carichi di lavoro specifici.

  • Stabilire i limiti di isolamento del guasto tra i carichi di lavoro. Ciò significa che se uno dei carichi di lavoro genera errori, il guasto è contenuto all'interno di quel dominio specifico e non influisce sugli altri carichi di lavoro.

  • Scalabilità più semplice tra domini.

La ricerca tra cluster supporta OpenSearch Dashboards, in modo da poter creare visualizzazioni e pannelli di controllo in tutti i domini.

Restrizioni

La ricerca tra cluster presenta diverse limitazioni importanti:

  • Non è possibile connettere un dominio Elasticsearch a un dominio OpenSearch.

  • Non è possibile connettersi a cluster OpenSearch/Elasticsearch autogestiti.

  • Per collegare domini tra le regioni, entrambi i domini devono trovarsi su Elasticsearch 7.10 o versione successiva oppure in OpenSearch.

  • Un dominio può avere un massimo di 20 connessioni in uscita. Analogamente, un dominio può avere un massimo di 20 connessioni in ingresso. In altre parole, un dominio può connettersi a un massimo di 20 altri domini.

  • I domini devono condividere la stessa versione principale o essere nella versione secondaria finale e nella versione principale successiva (ad esempio, 6.8 e 7.x sono compatibili).

  • Non è possibile utilizzare dizionari personalizzati o SQL con la ricerca tra cluster.

  • Non è possibile utilizzare AWS CloudFormation per connettere domini.

  • Non è possibile utilizzare la ricerca tra cluster su istanze M3 o istanze espandibili (T2 e T3).

Prerequisiti di ricerca tra cluster

Prima di configurare la ricerca tra cluster, assicurarsi che i domini soddisfino i seguenti requisiti:

  • Due domini OpenSearch o domini Elasticsearch nella versione 6.7 o successiva

  • Controllo granulare degli accessi abilitato

  • Crittografia da nodo a nodo abilitata

Prezzi della funzionalità di ricerca tra cluster

Non è previsto alcun costo aggiuntivo per la ricerca tra domini.

Configurazione di una connessione

Il dominio "di origine" si riferisce al dominio da cui proviene una richiesta di ricerca tra cluster. In altre parole, il dominio di origine è quello a cui si invia la richiesta iniziale di ricerca.

Il dominio "di destinazione" è il dominio sul quale il dominio di origine esegue le query.

Una connessione tra cluster è unidirezionale dall'origine al dominio di destinazione. Ciò significa che il dominio di destinazione non può eseguire query sul dominio di origine. Tuttavia, è possibile impostare un'altra connessione nella direzione opposta.


        Flusso di autorizzazione di ricerca tra cluster

Il dominio di origine crea una connessione "in uscita" al dominio di destinazione. Il dominio di destinazione riceve una richiesta di connessione "in ingresso" dal dominio di origine.

Per impostare una connessione

  1. Nel pannello di controllo del dominio scegliere un dominio e selezionare la scheda Connessioni.

  2. Nella sezione Connessioni in uscita scegli Richiesta.

  3. Per Alias di connessione, specifica un nome per la connessione.

  4. Scegli tra connettere a un dominio nella regione e nel proprio Account AWS o in un'altra regione o account.

    • Per il collegamento a un cluster nella tua regione e nel tuo Account AWS, scegli il dominio dal menu a discesa e seleziona Richiesta.

    • Per il collegamento a un cluster in un'altra regione o un altro Account AWS, seleziona l'ARN del dominio remoto e scegli Richiesta. Per il collegamento di domini tra regioni, entrambi i domini devono trovarsi su Elasticsearch 7.10 o versione successiva oppure in OpenSearch.

  5. La ricerca tra cluster convalida innanzitutto la richiesta di connessione per assicurare che i prerequisiti siano soddisfatti. Se i domini risultano incompatibili, la richiesta di connessione entra nello stato Validation failed.

  6. Dopo che la richiesta di connessione è stata convalidata correttamente, viene inviata al dominio di destinazione, dove deve essere approvata. Fino a quando non si avviene questa approvazione, la connessione rimane in uno stato Pending acceptance. Quando la richiesta di connessione viene accettata nel dominio di destinazione, lo stato cambia in Active e il dominio di destinazione diventa disponibile per le query.

    • La pagina del dominio mostra i dettagli generali dello stato del dominio e dello stato dell'istanza del dominio di destinazione. Solo i proprietari dei domini dispongono della flessibilità necessaria per creare, visualizzare, rimuovere e monitorare le connessioni da o verso i propri domini.

Dopo aver stabilito la connessione, tutto il traffico che passa tra i nodi dei domini connessi viene crittografato. Se si connette un dominio VPC a un dominio non VPC e il dominio non VPC è un endpoint pubblico in grado di ricevere traffico da Internet, il traffico tra cluster tra i domini è ancora crittografato e protetto.

Rimozione di una connessione

La rimozione di una connessione interrompe qualsiasi operazione tra cluster sui relativi indici.

  1. Nel pannello di controllo del dominio, passa alla scheda Connessioni.

  2. Selezionare le connessioni di dominio che si desidera rimuovere e scegliere Elimina, quindi confermare l'eliminazione.

È possibile eseguire queste operazioni sul dominio di origine o di destinazione per rimuovere la connessione. Dopo aver rimosso la connessione, questa sarà ancora visibile con lo stato Deleted per altri 15 giorni.

Non è possibile eliminare un dominio con connessioni tra cluster attive. Per eliminare un dominio, rimuovere innanzitutto tutte le connessioni in ingresso e in uscita da tale dominio. Questo per essere certi di considerare gli utenti del dominio tra cluster prima di eliminare il dominio.

Configurazione della sicurezza e spiegazione passo per passo di esempio

  1. Si invia una richiesta di ricerca tra cluster al dominio di origine.

  2. Il dominio di origine valuta tale richiesta in base alla policy di accesso al dominio. Poiché la ricerca tra cluster richiede un controllo di accesso granulare, è consigliabile una policy di accesso aperta nel dominio di origine.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "*" ] }, "Action": [ "es:ESHttp*" ], "Resource": "arn:aws:es:region:account:domain/src-domain/*" } ] }
    Nota

    Se includi indici remoti nel percorso, devi codificare in formato URL l'URI nell'ARN del dominio. Ad esempio, utilizzare arn:aws:es:us-east-1:123456789012:domain/my-domain/local_index,dst%3Aremote_index anziché arn:aws:es:us-east-1:123456789012:domain/my-domain/local_index,dst:remote_index.

    Se si sceglie di utilizzare una policy di accesso restrittiva oltre al controllo di accesso granulare, la policy deve consentire l'accesso almeno a es:ESHttpGet.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::123456789012:user/test-user" ] }, "Action": "es:ESHttpGet", "Resource": "arn:aws:es:region:account:domain/src-domain/*" } ] }
  3. Ilcontrollo di accesso granulare nel dominio di origine valuta la richiesta:

    • La richiesta è firmata con credenziali di base IAM o HTTP valide?

    • In tal caso, l'utente dispone dell'autorizzazione per eseguire la ricerca e accedere ai dati?

    Se la richiesta ricerca solo i dati nel dominio di destinazione, ad esempio dest-alias:dest-index/_search, sono necessarie solo le autorizzazioni per il dominio di destinazione.

    Se la richiesta cerca dati su entrambi i domini, ad esempio source-index,dest-alias:dest-index/_search, sono necessarie le autorizzazioni per entrambi i domini.

    Nel controllo di accesso granulare, gli utenti devono disporre dell'autorizzazione indices:admin/shards/search_shards oltre allo standard read o alle autorizzazioni search per gli indici pertinenti.

  4. Il dominio di origine invia la richiesta al dominio di destinazione. Il dominio di destinazione valuta la richiesta in base alla policy di accesso al dominio. È necessario includere l'autorizzazione es:ESCrossClusterGet per il dominio di destinazione:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "es:ESCrossClusterGet", "Resource": "arn:aws:es:region:account:domain/dst-domain" } ] }

    Assicurarsi che l'autorizzazione es:ESCrossClusterGet sia applicata per /dst-domain e non per /dst-domain/*.

    Tuttavia, questo policy minima consente solo ricerche tra cluster. Per eseguire altre operazioni, ad esempio l'indicizzazione dei documenti e l'esecuzione di ricerche standard, sono necessarie ulteriori autorizzazioni. Si consiglia la seguente policy per il dominio di destinazione:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "*" ] }, "Action": [ "es:ESHttp*" ], "Resource": "arn:aws:es:region:account:domain/dst-domain/*" }, { "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "es:ESCrossClusterGet", "Resource": "arn:aws:es:region:account:domain/dst-domain" } ] }
    Nota

    Tutte le richieste di ricerca tra cluster tra domini vengono crittografate in transito per impostazione predefinita, come parte della crittografia da nodo a nodo.

  5. Il dominio di destinazione esegue la ricerca e restituisce i risultati al dominio di origine.

  6. Il dominio di origine combina i propri risultati (se presenti) con i risultati del dominio di destinazione e li restituisce all'utente.

  7. Consigliamo Postman per le richieste di test:

    • Nel dominio di destinazione, indicizzare un documento:

      POST https://dst-domain.us-east-1.es.amazonaws.com/books/_doc/1 { "Dracula": "Bram Stoker" }
    • Per eseguire una query su questo indice dal dominio di origine, includere l'alias di connessione del dominio di destinazione all'interno della query.

      GET https://src-domain.us-east-1.es.amazonaws.com/<connection_alias>:books/_search { ... "hits": [ { "_index": "source-destination:books", "_type": "_doc", "_id": "1", "_score": 1, "_source": { "Dracula": "Bram Stoker" } } ] }

      È possibile trovare l'alias di connessione nella scheda Connessioni nel pannello di controllo del dominio.

    • Se si imposta una connessione tra domain-a -> domain-b con l'alias di connessione cluster_b e domain-a -> domain-c con l'alias di connessione cluster_c, ricercare domain-a, domain-b e domain-c come segue:

      GET https://src-domain.us-east-1.es.amazonaws.com/local_index,cluster_b:b_index,cluster_c:c_index/_search { "query": { "match": { "user": "domino" } } }

      Risposta

      { "took": 150, "timed_out": false, "_shards": { "total": 3, "successful": 3, "failed": 0, "skipped": 0 }, "_clusters": { "total": 3, "successful": 3, "skipped": 0 }, "hits": { "total": 3, "max_score": 1, "hits": [ { "_index": "local_index", "_type": "_doc", "_id": "0", "_score": 1, "_source": { "user": "domino", "message": "Lets unite the new mutants", "likes": 0 } }, { "_index": "cluster_b:b_index", "_type": "_doc", "_id": "0", "_score": 2, "_source": { "user": "domino", "message": "I'm different", "likes": 0 } }, { "_index": "cluster_c:c_index", "_type": "_doc", "_id": "0", "_score": 3, "_source": { "user": "domino", "message": "So am I", "likes": 0 } } ] } }

      Affinché la richiesta di ricerca venga eseguita correttamente, tutti i cluster di destinazione ricercati devono essere disponibili. In caso contrario, l'intera richiesta avrà esito negativo: anche se uno dei domini non è disponibile non verrà restituito alcun risultato della ricerca.

OpenSearch Dashboards

È possibile visualizzare i dati di più domini connessi nello stesso modo di un singolo dominio, tranne per il fatto che è necessario accedere agli indici remoti utilizzando connection-alias:index. Quindi, il modello di indice deve corrispondere a connection-alias:index.