Elastic sotto chiave: attiviamo le opzioni di sicurezza del cluster Elasticsearch per l'accesso interno ed esterno

Elastic sotto chiave: attiviamo le opzioni di sicurezza del cluster Elasticsearch per l'accesso interno ed esterno

Elastic Stack è uno strumento ben noto nel mercato dei sistemi SIEM (e non solo). Può raccogliere una grande varietà di dati, sia sensibili che non. Non è del tutto corretto che l'accesso agli elementi stessi di Elastic Stack non sia protetto. Per impostazione predefinita, tutti gli elementi di Elastic (Elasticsearch, Logstash, Kibana e i collezionisti Beats) funzionano con protocolli aperti. Inoltre, l'autenticazione è disabilitata in Kibana. Tutte queste interazioni possono essere protette e in questo articolo spiegheremo come farlo. Per comodità, abbiamo suddiviso il racconto in 3 blocchi di contenuti significativi:

  • Modello di accesso ai dati
  • Sicurezza dei dati all'interno del cluster Elasticsearch
  • Sicurezza dei dati al di fuori del cluster Elasticsearch

Dettagli sotto il tag.

Modello di accesso ai dati

Se si installa Elasticsearch e non si apportano modifiche, l'accesso a tutti gli indici sarà aperto a chiunque. O, perlomeno, a chi sa usare curl. Per evitare ciò, Elasticsearch offre un modello di accesso ai ruoli, disponibile a partire dal piano di sottoscrizione Basic (che è gratuito). Schematizzando, appare circa così:

Elastic sotto chiave: attiviamo le opzioni di sicurezza del cluster Elasticsearch per l'accesso interno ed esterno

Cosa c'è nell'immagine

  • Gli utenti sono tutti coloro che possono accedere utilizzando le proprie credenziali.
  • Il ruolo è un insieme di permessi.
  • I permessi sono un insieme di privilegi.
  • I privilegi sono autorizzazioni per scrivere, leggere, eliminare, ecc. (Elenco completo dei privilegi)
  • Le risorse sono indici, documenti, campi, utenti e altri soggetti del database (il modello di ruolo per alcune risorse è disponibile solo con abbonamenti a pagamento).

In Elasticsearch, ci sono di default utenti predefiniti, a cui sono assegnati ruoli predefiniti. Dopo aver attivato le impostazioni di sicurezza, possono essere utilizzati immediatamente.

Per attivare la sicurezza nelle impostazioni di Elasticsearch, è necessario aggiungere nel file di configurazione (di default è elasticsearch/config/elasticsearch.yml) una nuova riga:

xpack.security.enabled: true

Dopo aver modificato il file di configurazione, avviare o riavviare Elasticsearch per rendere effettive le modifiche. Il passo successivo è assegnare le password agli utenti predefiniti. Faremo questo in modo interattivo utilizzando il comando qui sotto:

[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-setup-passwords interactive
Iniziamo la configurazione delle password per gli utenti riservati elastic, apm_system, kibana, logstash_system, beats_system, remote_monitoring_user.
Verrà richiesto di inserire le password durante il processo.
Si prega di confermare se si desidera continuare [y/N]y


Inserire la password per [elastic]:
Reinserire la password per [elastic]:
Inserire la password per [apm_system]:
Reinserire la password per [apm_system]:
Inserire la password per [kibana]:
Reinserire la password per [kibana]:
Inserire la password per [logstash_system]:
Reinserire la password per [logstash_system]:
Inserire la password per [beats_system]:
Reinserire la password per [beats_system]:
Inserire la password per [remote_monitoring_user]:
Reinserire la password per [remote_monitoring_user]:
Password cambiata per l'utente [apm_system]
Password cambiata per l'utente [kibana]
Password cambiata per l'utente [logstash_system]
Password cambiata per l'utente [beats_system]
Password cambiata per l'utente [remote_monitoring_user]
Password cambiata per l'utente [elastic]

Controllando:

[elastic@node1 ~]$ curl -u elastic 'node1:9200/_cat/nodes?pretty'
Inserire la password host per l'utente 'elastic':
192.168.0.2 23 46 14 0.28 0.32 0.18 dim * node1

Puoi darti una pacca sulla spalla — le impostazioni sul lato Elasticsearch sono state completate. Ora è il turno di configurare Kibana. Se la avvii ora, si verificheranno errori, quindi è importante creare un keystore. Si fa con due comandi (utente kibana e la password inserita durante la creazione delle password in Elasticsearch):

[elastic@node1 ~]$ ./kibana/bin/kibana-keystore add elasticsearch.username
[elastic@node1 ~]$ ./kibana/bin/kibana-keystore add elasticsearch.password

Se tutto è corretto, Kibana inizierà a richiedere nome utente e password. Nell'abbonamento di livello Basic è disponibile un modello di ruoli basato su utenti interni. A partire dal livello Gold, è possibile collegare sistemi di autenticazione esterni: LDAP, PKI, Active Directory e sistemi di Single sign-on.

Elastic sotto chiave: attiviamo le opzioni di sicurezza del cluster Elasticsearch per l'accesso interno ed esterno

È possibile limitare anche i diritti d'accesso agli oggetti all'interno di Elasticsearch. Tuttavia, per fare lo stesso con documenti o campi, è necessario un abbonamento a pagamento (questo vantaggio inizia con il livello Platinum). Queste impostazioni sono disponibili nell'interfaccia Kibana o tramite Security API. Può essere verificato tramite il già noto menu Dev Tools:

Creazione di un ruolo

PUT /_security/role/ruslan_i_ludmila_role
{
  "cluster": [],
  "indices": [
    {
      "names": [ "ruslan_i_ludmila" ],
      "privileges": ["read", "view_index_metadata"]
    }
  ]
}

Creazione di un utente

POST /_security/user/pushkin
{
  "password" : "nataliaonelove",
  "roles" : [ "ruslan_i_ludmila_role", "kibana_user" ],
  "full_name" : "Alexander Pushkin",
  "email" : "pushkin@lyceum.edu",
  "metadata" : {
    "hometown" : "San Pietroburgo"
  }
}

Sicurezza dei dati all'interno del cluster Elasticsearch

Quando Elasticsearch opera in un cluster (cosa comune), le impostazioni di sicurezza all'interno del cluster diventano fondamentali. Per garantire una comunicazione sicura tra i nodi, Elasticsearch utilizza il protocollo TLS. Per configurare una connessione sicura, è necessario un certificato. Generiamo un certificato e una chiave privata nel formato PEM:

[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-certutil ca --pem

Dopo aver eseguito il comando precedente, nella directory /../elasticsearch verrà creato un archivio elastic-stack-ca.zip. All'interno troverai il certificato e la chiave privata con estensioni crt e key rispettivamente. È consigliabile caricarli su una risorsa condivisa accessibile da tutti i nodi del cluster.

Per ogni nodo ora sono necessari certificati e chiavi private basate su quelli presenti nella directory condivisa. Durante l'esecuzione del comando sarà richiesto di inserire una password. È possibile aggiungere opzioni aggiuntive —ip e —dns per la verifica completa dei nodi interconnessi.

[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-certutil cert --ca-cert /shared_folder/ca/ca.crt --ca-key /shared_folder/ca/ca.key

Al termine del comando otterremo un certificato e una chiave privata nel formato PKCS#12, protetti da una password. Rimane da spostare il file generato p12 nella directory di configurazione:

[elastic@node1 ~]$ mv elasticsearch/elastic-certificates.p12 elasticsearch/config

Aggiungiamo una password al certificato in formato p12 nel keystore e truststore su ogni nodo:

[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password

Nel già noto elasticsearch.yml rimane da aggiungere le righe con i dati del certificato:

xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12

Avviamo tutti i nodi Elasticsearch ed eseguiamo curl. Se tutto è stato eseguito correttamente, verrà restituita una risposta con diversi nodi:

[elastic@node1 ~]$ curl node1:9200/_cat/nodes -u elastic:password                                                                                    
172.18.0.3 43 75 4 0.00 0.05 0.05 dim * node2                                                                                                                     
172.18.0.4 21 75 3 0.00 0.05 0.05 dim - node3                                                                                                                     
172.18.0.2 39 75 4 0.00 0.05 0.05 dim - node1

C'è un'altra opzione di sicurezza — filtraggio degli indirizzi IP (disponibile negli abbonamenti a partire dal livello Gold). Permette di creare whitelist di indirizzi IP autorizzati a connettersi ai nodi.

Sicurezza dei dati al di fuori del cluster Elasticsearch

Fuori dal cluster significa connettere strumenti esterni: Kibana, Logstash, Beats o altri client esterni.

Elastic sotto chiave: attiviamo le opzioni di sicurezza del cluster Elasticsearch per l'accesso interno ed esterno

Per configurare il supporto https (invece di http), aggiungiamo nuove righe a elasticsearch.yml:

xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.keystore.path: elastic-certificates.p12
xpack.security.http.ssl.truststore.path: elastic-certificates.p12

Poiché il certificato è protetto da una password, aggiungiamo questa nel keystore e nel truststore su ciascun nodo:

[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-keystore add xpack.security.http.ssl.keystore.secure_password
[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-keystore add xpack.security.http.ssl.truststore.secure_password

Dopo aver aggiunto le chiavi, i nodi Elasticsearch sono pronti per la connessione via https. Ora possono essere avviati.

Il passo successivo è creare una chiave per la connessione di Kibana e aggiungerla nella configurazione. Sulla base del certificato già presente nella directory condivisa, genereremo un certificato in formato PEM (PKCS#12 Kibana, Logstash e Beats non sono ancora supportati):

[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-certutil cert --ca-cert /shared_folder/ca/ca.crt --ca-key /shared_folder/ca/ca.key --pem

Rimane da estrarre le chiavi create nella cartella di configurazione di Kibana:

[elastic@node1 ~]$ unzip elasticsearch/certificate-bundle.zip -d kibana/config

Se hai le chiavi, resta solo da modificare la configurazione di Kibana affinché possa iniziare a utilizzarle. Nel file di configurazione kibana.yml cambiamo http in https e aggiungiamo le righe per le impostazioni della connessione SSL. Le ultime tre righe configurano l'interazione sicura tra il browser dell'utente e Kibana.

elasticsearch.hosts: ["https://${HOSTNAME}:9200"]
elasticsearch.ssl.certificateAuthorities: /shared_folder/ca/ca.crt
elasticsearch.ssl.verificationMode: certificate
server.ssl.enabled: true
server.ssl.key: /../kibana/config/instance/instance.key
server.ssl.certificate: /../kibana/config/instance/instance.crt

In questo modo, le impostazioni sono completate e l'accesso ai dati nel cluster Elasticsearch è crittografato.

Se hai domande sulle funzionalità di Elastic Stack con sottoscrizioni gratuite o a pagamento, o su compiti di monitoraggio o creazione di sistemi SIEM, invia una richiesta in modulo di feedback sul nostro sito.

Inoltre, i nostri articoli su Elastic Stack su Habr:

Esplorando il Machine Learning in Elastic Stack (noto anche come Elasticsearch, noto come ELK)

Dimensionamento di Elasticsearch

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster