
Elastic Stack è uno strumento ben noto nel mercato dei sistemi SIEM (in effetti, non solo per loro). Può raccogliere una grande varietà di dati, sia sensibili che meno. Non è del tutto corretto se l'accesso agli stessi elementi Elastic Stack non è protetto. Di default, tutti gli elementi di base Elastic (Elasticsearch, Logstash, Kibana e i collezionisti Beats) operano su protocolli aperti. E in Kibana l'autenticazione è disabilitata. Tutte queste interazioni possono essere protette e in questo articolo spiegheremo come farlo. Per comodità, abbiamo diviso il racconto in 3 blocchi tematici:
- 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 senza alcuna ottimizzazione, l'accesso a tutti gli indici sarà aperto a chiunque lo desideri. O per lo meno a coloro che sanno utilizzare curl. Per evitare ciò, Elasticsearch offre un modello di accesso basato sui ruoli, disponibile a partire dall'abbonamento di livello Basic (che è gratuito). Appare schematicamente in questo modo:

Cosa si vede nell'immagine
- Gli utenti sono tutti quelli che possono autenticarsi utilizzando le proprie credenziali.
- Il ruolo è un insieme di diritti.
- I diritti sono un insieme di privilegi.
- I privilegi sono permessi per scrivere, leggere, eliminare, ecc. ()
- Le risorse sono indici, documenti, campi, utenti e altri soggetti del repository (il modello di accesso per alcune risorse è disponibile solo con abbonamenti a pagamento).
In Elasticsearch, di default, ci sono , ai quali sono associati . Dopo aver abilitato 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: trueDopo aver modificato il file di configurazione, avviamo o riavviamo Elasticsearch affinché le modifiche abbiano effetto. Il passo successivo è assegnare le password agli utenti di base. Faremo questo interattivamente con il comando sottostante:
[elastic@node1 ~]$ .\/elasticsearch\/bin\/elasticsearch-setup-passwords interactive
Inizio della configurazione delle password per gli utenti riservati elastic, apm_system, kibana, logstash_system, beats_system, remote_monitoring_user.
Ti verrà chiesto di inserire le password man mano che il processo avanza.
Confermi di voler continuare [y\/N]y
Inserisci la password per [elastic]:
Reinserisci la password per [elastic]:
Inserisci la password per [apm_system]:
Reinserisci la password per [apm_system]:
Inserisci la password per [kibana]:
Reinserisci la password per [kibana]:
Inserisci la password per [logstash_system]:
Reinserisci la password per [logstash_system]:
Inserisci la password per [beats_system]:
Reinserisci la password per [beats_system]:
Inserisci la password per [remote_monitoring_user]:
Reinserisci 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]
Controlliamo:
[elastic@node1 ~]$ curl -u elastic 'node1:9200\/\_cat\/nodes?pretty'
Inserisci 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: la configurazione lato Elasticsearch è completata. Ora è il turno di impostare Kibana. Se la avvii ora, appariranno errori, quindi è importante creare un keystore. Questo si fa in due comandi (utente kibana e la password inserita nel passaggio di creazione delle password in Elasticsearch):
[elastic@node1 ~]$ .\/kibana\/bin\/kibana-keystore add elasticsearch.username
[elastic@node1 ~]$ .\/kibana\/bin\/kibana-keystore add elasticsearch.passwordSe tutto è corretto, Kibana inizierà a chiedere il login e la password. Con un abbonamento di livello Basic è disponibile un modello di ruolo basato su utenti interni. A partire da Gold è possibile integrare sistemi di autenticazione esterni - LDAP, PKI, Active Directory e sistemi di Single sign-on.

È possibile limitare anche i diritti di accesso agli oggetti all'interno di Elasticsearch. Tuttavia, per fare lo stesso per documenti o campi, sarà necessario un abbonamento a pagamento (questa opzione inizia dal livello Platinum). Queste impostazioni sono disponibili nell'interfaccia di Kibana o tramite . Puoi verificare tramite il menu Dev Tools che già conosci:
Creazione ruolo
PUT \_security\/role\/ruslan_i_ludmila_role
{
"cluster": [],
"indices": [
{
"names": [ "ruslan_i_ludmila" ],
"privileges": ["read", "view_index_metadata"]
}
]
}Creazione dell'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 è in funzione in un cluster (e questo è comune), diventano importanti le impostazioni di sicurezza all'interno del cluster. Per un'interazione sicura tra i nodi, Elasticsearch utilizza il protocollo TLS. Per configurare un'interazione sicura tra di loro, è necessario un certificato. Generiamo un certificato e una chiave privata in formato PEM:
[elastic@node1 ~]$ .\/elasticsearch\/bin\/elasticsearch-certutil ca --pemDopo l'esecuzione del comando sopra, nella directory /../elasticsearch apparirà un archivio elastic-stack-ca.zip. Al suo interno troverai un certificato e una chiave privata con le estensioni crt e key rispettivamente. È consigliabile caricarli su una risorsa condivisa, a cui tutte le nodi del cluster devono avere accesso.
Ora ogni nodo necessita dei propri certificati e chiavi private basati su quelli presenti nella directory condivisa. Durante l'esecuzione del comando verrà richiesta una password. Si possono aggiungere opzioni aggiuntive —ip e —dns per la completa verifica delle nodi in interazione.
[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-certutil cert --ca-cert /shared_folder/ca/ca.crt --ca-key /shared_folder/ca/ca.keyA seguito dell'esecuzione del comando otterremo un certificato e una chiave privata in formato PKCS#12, protetti da una password. Resta solo da spostare il file generato p12 nella directory di configurazione:
[elastic@node1 ~]$ mv elasticsearch/elastic-certificates.p12 elasticsearch/configAggiungiamo la password al certificato in formato p12 nel keystore e nel truststore di 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_passwordNell'ormai noto elasticsearch.yml rimane da aggiungere le righe con i dati sul 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.p12Avviamo tutti i nodi Elasticsearch e si esegue 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 - node1C'è un'altra opzione di sicurezza — filtraggio degli indirizzi IP (disponibile in abbonamenti a partire dal livello Gold). Consente di creare liste bianche di indirizzi IP autorizzati a connettersi ai nodi.
Sicurezza dei dati al di fuori del cluster Elasticsearch
Fuori dal cluster significa collegare strumenti esterni: Kibana, Logstash, Beats o altri clienti esterni.

Per configurare il supporto https (invece di http), aggiungiamo nel elasticsearch.yml nuove righe:
xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.keystore.path: elastic-certificates.p12
xpack.security.http.ssl.truststore.path: elastic-certificates.p12Poiché il certificato è protetto da una password, aggiungiamola nel keystore e nel truststore di ogni 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_passwordDopo aver aggiunto le chiavi, i nodi Elasticsearch sono pronti per la connessione tramite https. Ora possono essere avviati.
Il passo successivo è creare una chiave per la connessione a Kibana e aggiungerla alla configurazione. Basandoci sul certificato già collocato nella directory condivisa, genereremo un certificato in formato PEM (PKCS#12 Kibana, Logstash e Beats non supportano ancora):
[elastic@node1 ~]$ .\/elasticsearch\/bin\/elasticsearch-certutil cert --ca-cert \/shared_folder\/ca\/ca.crt --ca-key \/shared_folder\/ca\/ca.key --pemRimane solo da estrarre le chiavi create nella cartella di configurazione di Kibana:
[elastic@node1 ~]$ unzip elasticsearch\/certificate-bundle.zip -d kibana\/configLe chiavi sono pronte, ora dobbiamo modificare la configurazione di Kibana affinché cominci a utilizzarle. Nel file di configurazione kibana.yml cambiamo http in https e aggiungiamo le righe con 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.crtIn questo modo, le impostazioni sono state effettuate e l'accesso ai dati nel cluster Elasticsearch è crittografato.
Se avete domande sulle capacità di Elastic Stack con abbonamenti gratuiti o a pagamento, per questioni di monitoraggio o per la creazione di un sistema SIEM, lasciate una richiesta in il nostro sito web.
Altri nostri articoli su Elastic Stack su Habr:
Fonte: habr.com
