Elastico sotto chiave: abilitazione delle opzioni di sicurezza del cluster Elasticsearch per l'accesso dall'interno e dall'esterno

Elastico sotto chiave: abilitazione delle opzioni di sicurezza del cluster Elasticsearch per l'accesso dall'interno e dall'esterno

Elastic Stack è uno strumento molto noto nel mercato dei sistemi SIEM (per la verità, non solo). Può raccogliere molti dati di dimensioni diverse, sia sensibili che non molto sensibili. Non è del tutto corretto se l’accesso agli stessi elementi Elastic Stack non è protetto. Per impostazione predefinita, tutti gli elementi Elastic pronti all'uso (raccoglitori Elasticsearch, Logstash, Kibana e Beats) vengono eseguiti su protocolli aperti. E nella stessa Kibana l'autenticazione è disabilitata. Tutte queste interazioni possono essere protette e in questo articolo ti diremo come farlo. Per comodità abbiamo diviso la narrazione in 3 blocchi semantici:

  • Modello di accesso ai dati basato sui ruoli
  • Sicurezza dei dati all'interno di un cluster Elasticsearch
  • Protezione dei dati all'esterno di un cluster Elasticsearch

Dettagli sotto il taglio.

Modello di accesso ai dati basato sui ruoli

Se installi Elasticsearch e non lo ottimizzi in alcun modo, l'accesso a tutti gli indici sarà aperto a tutti. Bene, o quelli che possono usare il ricciolo. Per evitare ciò, Elasticsearch dispone di un modello di ruolo disponibile a partire da un abbonamento Basic (che è gratuito). Schematicamente assomiglia a questo:

Elastico sotto chiave: abilitazione delle opzioni di sicurezza del cluster Elasticsearch per l'accesso dall'interno e dall'esterno

Cosa c'è nella foto

  • Gli utenti sono tutti coloro che possono accedere utilizzando le proprie credenziali.
  • Un ruolo è un insieme di diritti.
  • I diritti sono un insieme di privilegi.
  • I privilegi sono autorizzazioni di scrittura, lettura, eliminazione, ecc. (Elenco completo dei privilegi)
  • Le risorse sono indici, documenti, campi, utenti e altre entità di archiviazione (il modello di ruolo per alcune risorse è disponibile solo con abbonamenti a pagamento).

Per impostazione predefinita Elasticsearch ha utenti della scatola, al quale sono allegati ruoli della scatola. Una volta abilitate le impostazioni di sicurezza, puoi iniziare a utilizzarle immediatamente.

Per abilitare la sicurezza nelle impostazioni di Elasticsearch, è necessario aggiungerlo al file di configurazione (per impostazione predefinita è elasticsearch/config/elasticsearch.yml) nuova linea:

xpack.security.enabled: true

Dopo aver modificato il file di configurazione, avvia o riavvia Elasticsearch affinché le modifiche abbiano effetto. Il passaggio successivo è l'assegnazione delle password agli utenti della casella. Facciamolo in modo interattivo utilizzando il comando seguente:

[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-setup-passwords interactive
Initiating the setup of passwords for reserved users elastic,apm_system,kibana,logstash_system,beats_system,remote_monitoring_user.
You will be prompted to enter passwords as the process progresses.
Please confirm that you would like to continue [y/N]y


Enter password for [elastic]:
Reenter password for [elastic]:
Enter password for [apm_system]:
Reenter password for [apm_system]:
Enter password for [kibana]:
Reenter password for [kibana]:
Enter password for [logstash_system]:
Reenter password for [logstash_system]:
Enter password for [beats_system]:
Reenter password for [beats_system]:
Enter password for [remote_monitoring_user]:
Reenter password for [remote_monitoring_user]:
Changed password for user [apm_system]
Changed password for user [kibana]
Changed password for user [logstash_system]
Changed password for user [beats_system]
Changed password for user [remote_monitoring_user]
Changed password for user [elastic]

Controlliamo:

[elastic@node1 ~]$ curl -u elastic 'node1:9200/_cat/nodes?pretty'
Enter host password for user '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 completate. Ora è il momento di configurare Kibana. Se lo esegui ora, verranno visualizzati degli errori, quindi è importante creare un archivio chiavi. Questo viene fatto in due comandi (user kibana e la password inserita nella fase di creazione della 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 chiedere login e password. L'abbonamento Basic include un modello di ruolo basato sugli utenti interni. A partire da Gold, puoi connettere sistemi di autenticazione esterni: LDAP, PKI, Active Directory e sistemi Single Sign-On.

Elastico sotto chiave: abilitazione delle opzioni di sicurezza del cluster Elasticsearch per l'accesso dall'interno e dall'esterno

Anche i diritti di accesso agli oggetti all'interno di Elasticsearch possono essere limitati. Tuttavia, per fare lo stesso con documenti o campi, avrai bisogno di un abbonamento a pagamento (questo lusso inizia con il livello Platinum). Queste impostazioni sono disponibili nell'interfaccia Kibana o tramite API di sicurezza. Puoi controllare attraverso il già familiare menu Dev Tools:

Creare 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" : "[email protected]",
  "metadata" : {
    "hometown" : "Saint-Petersburg"
  }
}

Sicurezza dei dati all'interno di un cluster Elasticsearch

Quando Elasticsearch viene eseguito in un cluster (cosa comune), le impostazioni di sicurezza all'interno del cluster diventano importanti. Per la comunicazione sicura tra i nodi, Elasticsearch utilizza il protocollo TLS. Per impostare un'interazione sicura tra loro, è necessario un certificato. Generiamo un certificato e una chiave privata in formato PEM:

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

Dopo aver eseguito il comando precedente, nella directory /../elasticsearch apparirà l'archivio elastic-stack-ca.zip. Al suo interno troverai un certificato e una chiave privata con estensioni crt и chiave rispettivamente. È consigliabile metterli su una risorsa condivisa, che dovrebbe essere accessibile da tutti i nodi del cluster.

Ogni nodo ora necessita dei propri certificati e delle chiavi private basate su quelle nella directory condivisa. Durante l'esecuzione del comando ti verrà chiesto di impostare una password. Puoi aggiungere opzioni aggiuntive -ip e -dns per la verifica completa dei nodi interagenti.

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

A seguito dell'esecuzione del comando riceveremo un certificato e una chiave privata in formato PKCS#12, protetti da password. Non resta che spostare il file generato p12 alla directory di configurazione:

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

Aggiungi una password al certificato nel formato p12 nel keystore e nel truststore su ciascun 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

Già noto elasticsearch.yml Non resta che aggiungere 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

Lanciamo tutti i nodi Elasticsearch ed eseguiamo arricciare. Se tutto è stato eseguito correttamente, verrà restituita una risposta con più 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

Esiste un'altra opzione di sicurezza: il filtraggio degli indirizzi IP (disponibile negli abbonamenti dal livello Gold). Consente di creare liste bianche di indirizzi IP da cui è consentito accedere ai nodi.

Protezione dei dati all'esterno di un cluster Elasticsearch

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

Elastico sotto chiave: abilitazione delle opzioni di sicurezza del cluster Elasticsearch per l'accesso dall'interno e dall'esterno

Per configurare il supporto per https (invece di http), aggiungi 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

Perché Il certificato è protetto da password, aggiungilo al keystore e al 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 connettersi tramite https. Ora possono essere lanciati.

Il passo successivo è creare una chiave per connettere Kibana e aggiungerla alla configurazione. In base al certificato che si trova già 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 --pem

Non resta che decomprimere le chiavi create nella cartella con la configurazione di Kibana:

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

Le chiavi ci sono, quindi non resta che modificare la configurazione di Kibana in modo che inizi a usarle. Nel file di configurazione kibana.yml, cambia http in https e aggiungi righe con le impostazioni di connessione SSL. Le ultime tre righe configurano la comunicazione 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

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

Se hai domande sulle funzionalità di Elastic Stack su abbonamenti gratuiti o a pagamento, attività di monitoraggio o creazione di un sistema SIEM, lascia una richiesta a modulo di feedback sul nostro sito

Altri nostri articoli su Elastic Stack su Habré:

Comprensione del machine learning nello stack elastico (noto anche come Elasticsearch, alias ELK)

Dimensionamento elasticsearch

Fonte: habr.com

Aggiungi un commento