
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ì:

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. ()
- 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 , a cui sono assegnati . 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: trueDopo 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.passwordSe 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.

È 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 . 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 --pemDopo 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.keyAl 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/configAggiungiamo 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_passwordNel 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.p12Avviamo 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 - node1C'è 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.

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.p12Poiché 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_passwordDopo 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 --pemRimane da estrarre le chiavi create nella cartella di configurazione di Kibana:
[elastic@node1 ~]$ unzip elasticsearch/certificate-bundle.zip -d kibana/configSe 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.crtIn 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 sul nostro sito.
Inoltre, i nostri articoli su Elastic Stack su Habr:
Fonte: habr.com
