Monitoraggio dei log di verifica in Amazon OpenSearch Service - Amazon OpenSearch Service

Monitoraggio dei log di verifica in Amazon OpenSearch Service

Se il dominio Amazon OpenSearch Service utilizza il controllo granulare degli accessi, è possibile abilitare i log di verifica per i dati. I log di verifica sono altamente personalizzabili e consentono di tenere traccia delle attività degli utenti nei cluster OpenSearch, inclusi errori e riuscite dell'autenticazione, richieste a OpenSearch, modifiche all'indice e query di ricerca in entrata. La configurazione predefinita tiene traccia di una serie comune di azioni utente, ma si consiglia di personalizzare le impostazioni in base alle proprie esigenze.

Proprio come i log delle applicazioni OpenSearch e i log lenti, OpenSearch Service pubblica i log di verifica in CloudWatch Logs. Se abilitato, si applicano i prezzi standard di CloudWatch.

Nota

Per abilitare i log di verifica, il ruolo utente deve essere mappato al ruolo security_manager, che consente di accedere all'API REST plugins/_security di OpenSearch. Per ulteriori informazioni, consultare Modifica dell'utente principale.

Restrizioni

I log di verifica hanno le seguenti limitazioni:

  • I log di verifica non includono le richieste della ricerca tra cluster rifiutate dalla policy di accesso al dominio della destinazione.

  • La dimensione massima di ogni messaggio del log di verifica è 10.000 caratteri. Il messaggio del log di verifica viene troncato se supera questo limite.

Abilitazione dei log di verifica

La procedura per abilitare i log di verifica prevede due fasi: Per prima cosa, è possibile configurare il dominio per pubblicare i log di verifica su CloudWatch Logs. In seguito, abilitare i log di verifica in OpenSearch Dashboards e configurarli in base alle esigenze.

Importante

Se si verifica un errore durante la procedura descritta di seguito, consultare Impossibile abilitare i log di verifica per informazioni sulla risoluzione dei problemi.

Passaggio 1: abilitare i registri di controllo e configurare una policy di accesso

In questi passaggi viene descritto come abilitare i registri di verifica tramite la console. È possibile anche abilitarli usando il AWS CLI, o l’API di configurazione.

Come abilitare i log di verifica per un dominio OpenSearch Service (console)

  1. Sceglere il dominio per aprire la sua configurazione, quindi andare alla scheda Registri.

  2. Selezionare Verifica registri e poi Abilita.

  3. Crea un gruppo di log CloudWatch oppure scegline uno esistente.

  4. Scegliere una policy d'accesso che contiene le autorizzazioni appropriate oppure creare una policy utilizzando il formato JSON che la console offre:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "es.amazonaws.com" }, "Action": [ "logs:PutLogEvents", "logs:CreateLogStream" ], "Resource": "cw_log_group_arn" } ] }

    Si consiglia di aggiungere le chiavi di condizione aws:SourceAccount e aws:SourceArn alla policy per proteggersi dal problema del "confused deputy". L'account fonte è il proprietario del flusso di log e l'ARN fonte è l'ARN del dominio. Per aggiungere queste chiavi di condizione, il dominio deve trovarsi sul software di servizio R20211203 o versioni successive.

    Ad esempio, è possibile aggiungere il seguente blocco di condizione alla policy:

    "Condition": { "StringEquals": { "aws:SourceAccount": "account-id" }, "ArnLike": { "aws:SourceArn": "arn:aws:es:region:account-id:domain/domain-name" } }
  5. Scegli Enable (Abilita).

Passaggio 2: attivare i registri di verifica in OpenSearch Dashboards

Dopo aver abilitato i registri di verifica nella console OpenSearch Service, è necessario abilitarli anche in OpenSearch Dashboards e configurarli in base alle esigenze.

  1. Aprire OpenSearch Dashboards e scegliere Sicurezza dal menu a sinistra.

  2. Scegliere Log di verifica.

  3. Scegliere Abilita registrazione di verifica.

L'interfaccia utente di Dashboards offre il controllo completo delle impostazioni del log di verifica in Impostazioni generali e Impostazioni di conformità. Per una descrizione di tutte le opzioni di configurazione, consultare Impostazioni dei registri di verifica.

Abilitare la registrazione di controllo tramite il AWS CLI

Il seguente comando AWS CLI abilita i log di verifica su un dominio esistente:

aws opensearch update-domain-config --domain-name my-domain --log-publishing-options "AUDIT_LOGS={CloudWatchLogsLogGroupArn=arn:aws:logs:us-east-1:123456789012:log-group:my-log-group,Enabled=true}"

È inoltre possibile abilitare i log di verifica quando si crea un dominio. Per ulteriori informazioni, consultare Riferimento ai comandi AWS CLI.

Abilitare la registrazione di controllo tramite l'API di configurazione

La seguente richiesta all'API di configurazione abilita i log di verifica su un dominio esistente:

POST https://es.us-east-1.amazonaws.com/2021-01-01/opensearch/domain/my-domain/config { "LogPublishingOptions": { "AUDIT_LOGS": { "CloudWatchLogsLogGroupArn":"arn:aws:logs:us-east-1:123456789012:log-group1:sample-domain", "Enabled":true|false } } }

Per informazioni dettagliate, consulta Riferimento dell'API di configurazione per il servizio OpenSearch di Amazon.

Livelli e categorie dei log di verifica

La comunicazione del cluster avviene su due livelli separati: il livello REST e il livello di trasporto.

  • Il livello REST copre la comunicazione con client HTTP come curl, Logstash, OpenSearch Dashboards,Client REST di livello elevato Java, la libreria Requests di Python, ovvero tutte le richieste HTTP che arrivano al cluster.

  • Il livello di trasporto copre la comunicazione tra i nodi. Ad esempio, dopo che una richiesta di ricerca arriva al cluster (sul livello REST), il nodo di coordinamento che serve la richiesta invia la query ad altri nodi, riceve le risposte, raccoglie i documenti necessari e li unisce nella risposta finale. Operazioni come l'allocazione delle partizioni e il ribilanciamento si verificano anche sul livello di trasporto.

È possibile abilitare o disabilitare i log di verifica per interi livelli, nonché per singole categorie di controllo per un livello. La tabella seguente contiene un riepilogo delle categorie di verifica e dei livelli per i quali sono disponibili.

Categoria Descrizione Disponibile per REST Disponibile per il trasporto

FALLITO_LOGIN

Una richiesta conteneva credenziali non valide e l'autenticazione non è riuscita.

MISSING_PRIVILEGES

Un utente non disponeva dei privilegi per effettuare la richiesta.

GRANTED_PRIVILEGES

Un utente disponeva dei privilegi per effettuare la richiesta.

OPENSEARCH_SECURITY_INDEX_ATTEMPT

Una richiesta ha provato a modificare l'indice .opendistro_security. No

AUTHENTICATED

Una richiesta conteneva credenziali valide e l'autenticazione è riuscita.

INDEX_EVENT

Una richiesta ha eseguito un'operazione amministrativa su un indice, ad esempio la creazione, l'impostazione di un alias o l'esecuzione di un'unione forzata. L'elenco completo delle operazioni indices:admin/ incluse in questa categoria sono disponibili nella documentazione di OpenSearch. No

Oltre a queste categorie standard, il controllo granulare degli accessi offre diverse categorie aggiuntive progettate per soddisfare i requisiti di conformità dei dati.

Categoria Descrizione

COMPLIANCE_DOC_READ

Una richiesta ha eseguito un evento di lettura su un documento in un indice.

COMPLIANCE_DOC_WRITE

Una richiesta ha eseguito un evento di scrittura su un documento in un indice.

COMPLIANCE_INTERNAL_CONFIG_READ

Una richiesta ha eseguito un evento di lettura sull'indice .opendistro_security.

COMPLIANCE_INTERNAL_CONFIG_WRITE

Una richiesta ha eseguito un evento di scrittura sull'indice .opendistro_security.

È possibile disporre di una combinazione di categorie e attributi di messaggio. Ad esempio, se si invia una richiesta REST per indicizzare un documento, è possibile che vengano visualizzate le seguenti righe nei log di verifica:

  • AUTHENTICATED sul livello REST (autenticazione)

  • GRANTED_PRIVILEGE a livello di trasporto (autorizzazione)

  • COMPLIANCE_DOC_WRITE (documento scritto su un indice)

Impostazioni dei log di verifica

I log di verifica dispongono di numerose opzioni di configurazione.

Impostazioni generali

Le impostazioni generali consentono di abilitare o disabilitare singole categorie o interi livelli. Si consiglia vivamente di lasciare GRANTED_PRIVILES e AUTHENTICATED come categorie escluse. In caso contrario, queste categorie vengono registrate per ogni richiesta valida al cluster.

Nome Impostazione del back-end Descrizione

Livello REST

enable_rest

Abilitare o disabilitare gli eventi che si verificano sul livello REST.

Categorie REST disabilitate

disabled_rest_categories

Specificare le categorie di verifica da ignorare sul livello REST. La modifica di queste categorie può aumentare notevolmente le dimensioni dei log di verifica.

Livello di trasporto

enable_transport

Abilitare o disabilitare gli eventi che si verificano sul livello di trasporto.

Categorie di trasporto disabilitate

disabled_transport_categories

Specificare le categorie di verifica che devono essere ignorate sul livello di trasporto. La modifica di queste categorie può aumentare notevolmente le dimensioni dei log di verifica.

Le impostazioni degli attributi consentono di personalizzare la quantità di dettagli in ogni riga di log.

Nome Impostazione del back-end Descrizione

Richieste in blocco

resolve_bulk_requests

L'abilitazione di questa impostazione genera un log per ogni documento in una richiesta in blocco, che può aumentare notevolmente le dimensioni dei log di verifica.

Corpo della richiesta

log_request_body

Includere il corpo della richiesta delle richieste.

Risoluzione di indici

resolve_indices

Risolvere gli alias sugli indici.

Utilizzare Ignora impostazioni per escludere un set di utenti o percorsi API:

Nome Impostazione del back-end Descrizione

Utenti ignorati

ignore_users

Specificare gli utenti che si desidera escludere.

Richieste ignorate

ignore_requests

Specificare i modelli di richiesta che si desidera escludere.

Impostazioni di conformità

Le impostazioni di conformità consentono di regolare l'accesso a livello di indice, documento o campo.

Nome Impostazione del back-end Descrizione

Registrazione della conformità

enable_compliance

Abilitare o disabilitare la registrazione della conformità.

È possibile specificare le seguenti impostazioni per la registrazione degli eventi di lettura e scrittura.

Nome Impostazione del back-end Descrizione

Registrazione della configurazione interna

internal_config

Abilitare o disabilitare la registrazione degli eventi sull'indice .opendistro_security.

Registrazione della configurazione esterna

external_config Abilitare o disabilitare la registrazione degli eventi di configurazione esterni.

È possibile specificare le seguenti impostazioni per gli eventi di lettura.

Nome Impostazione del back-end Descrizione

Lettura di metadati

read_metadata_only

Includere solo i metadati per gli eventi di lettura. Non includere campi di documento.

Utenti ignorati

read_ignore_users

Non includere determinati utenti per gli eventi di lettura.

Campi osservati

read_watched_fields

Specificare gli indici e i campi da controllare per gli eventi di lettura. L'aggiunta di campi controllati genera un log per accesso ai documenti, che può aumentare notevolmente le dimensioni dei log di verifica. I campi osservati supportano i modelli di indice e i modelli di campo:

{ "index-name-pattern": [ "field-name-pattern" ], "logs*": [ "message" ], "twitter": [ "id", "user*" ] }

È possibile specificare le seguenti impostazioni per gli eventi di scrittura.

Nome Impostazione del back-end Descrizione

Scrittura di metadati

write_metadata_only

Includere solo i metadati per gli eventi di scrittura. Non includere campi di documento.

Differenze dei log

write_log_diffs

Se write_metadata_only è false, includere solo le differenze tra gli eventi di scrittura.

Utenti ignorati

write_ignore_users

Non includere determinati utenti per gli eventi di scrittura.

Osservazione di indici

write_watched_indices

Specificare gli indici o i modelli di indice da controllare per gli eventi di scrittura. L'aggiunta di campi controllati genera un log per accesso ai documenti, che può aumentare notevolmente le dimensioni dei log di verifica.

Esempi di log di verifica

Questa sezione include una configurazione di esempio, una richiesta di ricerca e il log di verifica risultante per tutti gli eventi di lettura e scrittura di un indice.

Fase 1: Configurazione dei log di verifica

Dopo aver abilitato la pubblicazione dei log di verifica in un gruppo CloudWatch Logs, passare alla pagina di registrazione della verifica di OpenSearch Dashboards e scegliere Abilita registrazione di verifica.

  1. In Impostazioni generali, scegliere Configura e assicurarsi che il livello REST sia abilitato.

  2. In Impostazioni di conformità, scegliere Configura.

  3. In Scrittura, in Campi osservati, aggiungere accounts per tutti gli eventi di scrittura su questo indice.

  4. In Lettura, in Campi osservati, aggiungere i campi ssn e id- dell'indice accounts:

    { "accounts-": [ "ssn", "id-" ] }

Fase 2: Esecuzione di eventi di lettura e scrittura

  1. Passare a OpenSearch Dashboard, scegliere Strumenti di sviluppo e indicizzare un documento di esempio:

    PUT accounts/_doc/0 { "ssn": "123", "id-": "456" }
  2. Per verificare un evento di lettura, inviare la seguente richiesta:

    GET accounts/_search { "query": { "match_all": {} } }

Fase 3: Osservazione dei log

  1. Aprire la console CloudWatch all'indirizzo https://console.aws.amazon.com/cloudwatch/.

  2. Nel pannello di navigazione, seleziona Log groups (Gruppi di log).

  3. Scegliere il gruppo di log specificato durante l'abilitazione dei log di verifica. All'interno del gruppo di log, OpenSearch Service crea un flusso di log per ogni nodo del dominio.

  4. In Flussi di log, scegliere Cerca tutto.

  5. Per gli eventi di lettura e scrittura, consultare i log corrispondenti. È possibile prevedere un ritardo di 5 secondi prima che venga visualizzato il log.

    Registro di verifica della scrittura di esempio

    { "audit_compliance_operation": "CREATE", "audit_cluster_name": "824471164578:audit-test", "audit_node_name": "be217225a0b77c2bd76147d3ed3ff83c", "audit_category": "COMPLIANCE_DOC_WRITE", "audit_request_origin": "REST", "audit_compliance_doc_version": 1, "audit_node_id": "3xNJhm4XS_yTzEgDWcGRjA", "@timestamp": "2020-08-23T05:28:02.285+00:00", "audit_format_version": 4, "audit_request_remote_address": "3.236.145.227", "audit_trace_doc_id": "lxnJGXQBqZSlDB91r_uZ", "audit_request_effective_user": "admin", "audit_trace_shard_id": 8, "audit_trace_indices": [ "accounts" ], "audit_trace_resolved_indices": [ "accounts" ] }

    Registro di verifica della scrittura di esempio

    { "audit_cluster_name": "824471164578:audit-docs", "audit_node_name": "806f6050cb45437e2401b07534a1452f", "audit_category": "COMPLIANCE_DOC_READ", "audit_request_origin": "REST", "audit_node_id": "saSevm9ASte0-pjAtYi2UA", "@timestamp": "2020-08-31T17:57:05.015+00:00", "audit_format_version": 4, "audit_request_remote_address": "54.240.197.228", "audit_trace_doc_id": "config:7.7.0", "audit_request_effective_user": "admin", "audit_trace_shard_id": 0, "audit_trace_indices": [ "accounts" ], "audit_trace_resolved_indices": [ "accounts" ] }

Per includere il corpo della richiesta, tornare a Impostazioni di conformità in OpenSearch Dashboards e disabilitare Scrivi metadati. Per escludere eventi da un utente specifico, aggiungere l'utente a Utenti ignorati.

Per una descrizione di ogni campo del log di verifica, consultare Riferimento ai campi dei log di verifica. Per informazioni sulla ricerca e l'analisi dei dati dei log di verifica, consultare Analisi dei dati di log con CloudWatch Logs Insights nella Guida per l'utente di Amazon CloudWatch Logs.

Configurazione dei log di verifica tramite l'API REST

Si consiglia di utilizzare OpenSearch Dashboards per configurare i log di verifica, ma è anche possibile utilizzare l'API REST per il controllo granulare degli accessi. In questa sezione è riportata una richiesta di esempio. La documentazione completa sull'API REST è disponibile nella documentazione di OpenSearch.

PUT _plugins/_security/api/audit/config { "enabled": true, "audit": { "enable_rest": true, "disabled_rest_categories": [ "GRANTED_PRIVILEGES", "AUTHENTICATED" ], "enable_transport": true, "disabled_transport_categories": [ "GRANTED_PRIVILEGES", "AUTHENTICATED" ], "resolve_bulk_requests": true, "log_request_body": true, "resolve_indices": true, "exclude_sensitive_headers": true, "ignore_users": [ "kibanaserver" ], "ignore_requests": [ "SearchRequest", "indices:data/read/*", "/_cluster/health" ] }, "compliance": { "enabled": true, "internal_config": true, "external_config": false, "read_metadata_only": true, "read_watched_fields": { "read-index-1": [ "field-1", "field-2" ], "read-index-2": [ "field-3" ] }, "read_ignore_users": [ "read-ignore-1" ], "write_metadata_only": true, "write_log_diffs": false, "write_watched_indices": [ "write-index-1", "write-index-2", "log-*", "*" ], "write_ignore_users": [ "write-ignore-1" ] } }