Elastisk under lås och nyckel: möjliggör Elasticsearch-klustersäkerhetsalternativ för åtkomst från insidan och utsidan

Elastisk under lås och nyckel: möjliggör Elasticsearch-klustersäkerhetsalternativ för åtkomst från insidan och utsidan

Elastic Stack är ett välkänt verktyg på SIEM-systemmarknaden (faktiskt inte bara dem). Den kan samla in en mängd olika stora data, både känsliga och inte särskilt känsliga. Det är inte helt korrekt om åtkomsten till själva Elastic Stack-elementen inte är skyddad. Som standard körs alla Elastic out-of-the-box-element (Elasticsearch, Logstash, Kibana och Beats-samlare) på öppna protokoll. Och i själva Kibana är autentisering inaktiverad. Alla dessa interaktioner kan säkras och i den här artikeln kommer vi att berätta hur du gör detta. För enkelhetens skull delade vi berättelsen i tre semantiska block:

  • Rollbaserad dataåtkomstmodell
  • Datasäkerhet inom ett Elasticsearch-kluster
  • Säkra data utanför ett Elasticsearch-kluster

Detaljer under snittet.

Rollbaserad dataåtkomstmodell

Om du installerar Elasticsearch och inte ställer in det på något sätt, kommer åtkomst till alla index att vara öppen för alla. Tja, eller de som kan använda curl. För att undvika detta har Elasticsearch en förebild som är tillgänglig från och med ett Basic-abonnemang (som är gratis). Schematiskt ser det ut ungefär så här:

Elastisk under lås och nyckel: möjliggör Elasticsearch-klustersäkerhetsalternativ för åtkomst från insidan och utsidan

Vad finns på bilden

  • Användare är alla som kan logga in med sina referenser.
  • En roll är en uppsättning rättigheter.
  • Rättigheter är en uppsättning privilegier.
  • Privilegier är behörigheter att skriva, läsa, radera osv. (Fullständig lista över privilegier)
  • Resurser är index, dokument, fält, användare och andra lagringsenheter (förebilden för vissa resurser är endast tillgänglig med betalda prenumerationer).

Som standard har Elasticsearch boxanvändare, till vilken de är fästa box roller. När du har aktiverat säkerhetsinställningarna kan du börja använda dem direkt.

För att aktivera säkerhet i Elasticsearch-inställningarna måste du lägga till den i konfigurationsfilen (som standard är detta elasticsearch/config/elasticsearch.yml) ny linje:

xpack.security.enabled: true

Efter att ha ändrat konfigurationsfilen, starta eller starta om Elasticsearch för att ändringarna ska träda i kraft. Nästa steg är att tilldela lösenord till boxanvändare. Låt oss göra detta interaktivt med kommandot nedan:

[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]

Vi kontrollerar:

[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

Du kan klappa dig själv på axeln - inställningarna på Elasticsearch-sidan är klara. Nu är det dags att konfigurera Kibana. Om du kör det nu kommer fel att dyka upp, så det är viktigt att skapa ett nyckellager. Detta görs med två kommandon (användare Kibana och lösenordet som angavs vid steget att skapa lösenord i Elasticsearch):

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

Om allt stämmer kommer Kibana att börja be om inloggning och lösenord. I Basic-abonnemanget ingår en förebild baserad på interna användare. Från och med Gold kan du ansluta externa autentiseringssystem - LDAP, PKI, Active Directory och Single sign-on-system.

Elastisk under lås och nyckel: möjliggör Elasticsearch-klustersäkerhetsalternativ för åtkomst från insidan och utsidan

Åtkomsträttigheter till objekt i Elasticsearch kan också begränsas. Men för att göra samma sak för dokument eller fält, behöver du en betald prenumeration (denna lyx börjar med platinanivån). Dessa inställningar är tillgängliga i Kibanas gränssnitt eller via Säkerhets-API. Du kan kolla igenom den redan välbekanta Dev Tools-menyn:

Att skapa en roll

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

Skapa en användare

POST /_security/user/pushkin
{
  "password" : "nataliaonelove",
  "roles" : [ "ruslan_i_ludmila_role", "kibana_user" ],
  "full_name" : "Alexander Pushkin",
  "email" : "[email protected]",
  "metadata" : {
    "hometown" : "Saint-Petersburg"
  }
}

Datasäkerhet inom ett Elasticsearch-kluster

När Elasticsearch körs i ett kluster (vilket är vanligt) blir säkerhetsinställningarna inom klustret viktiga. För säker kommunikation mellan noder använder Elasticsearch TLS-protokollet. För att skapa säker interaktion mellan dem behöver du ett certifikat. Vi genererar ett certifikat och en privat nyckel i PEM-format:

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

Efter att ha utfört kommandot ovan, i katalogen /../elasticsearch arkivet visas elastic-stack-ca.zip. Inuti den hittar du ett certifikat och en privat nyckel med tillägg crt и nyckel respektive. Det är lämpligt att lägga dem på en delad resurs, som bör vara tillgänglig från alla noder i klustret.

Varje nod behöver nu sina egna certifikat och privata nycklar baserat på de i den delade katalogen. När du utför kommandot kommer du att bli ombedd att ange ett lösenord. Du kan lägga till ytterligare alternativ -ip och -dns för fullständig verifiering av interagerande noder.

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

Som ett resultat av att köra kommandot kommer vi att få ett certifikat och en privat nyckel i PKCS#12-format, skyddade av ett lösenord. Allt som återstår är att flytta den genererade filen p12 till konfigurationskatalogen:

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

Lägg till ett lösenord till certifikatet i formatet p12 i keystore och truststore på varje nod:

[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

Vet redan elasticsearch.yml Allt som återstår är att lägga till rader med certifikatdata:

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

Vi startar alla Elasticsearch-noder och kör curl. Om allt gjordes korrekt kommer ett svar med flera noder att returneras:

[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

Det finns ett annat säkerhetsalternativ - IP-adressfiltrering (tillgänglig i abonnemang från Guldnivån). Låter dig skapa vita listor över IP-adresser från vilka du får åtkomst till noder.

Säkra data utanför ett Elasticsearch-kluster

Utanför klustret innebär det att ansluta externa verktyg: Kibana, Logstash, Beats eller andra externa klienter.

Elastisk under lås och nyckel: möjliggör Elasticsearch-klustersäkerhetsalternativ för åtkomst från insidan och utsidan

För att konfigurera stöd för https (istället för http), lägg till nya rader i 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

Därför att Certifikatet är lösenordsskyddat, lägg till det i nyckelarkivet och truststore på varje nod:

[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

Efter att ha lagt till nycklarna är Elasticsearch-noder redo att ansluta via https. Nu kan de lanseras.

Nästa steg är att skapa en nyckel för att ansluta Kibana och lägga till den i konfigurationen. Baserat på certifikatet som redan finns i den delade katalogen kommer vi att generera ett certifikat i PEM-format (PKCS#12 Kibana, Logstash och Beats stöder ännu inte):

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

Allt som återstår är att packa upp de skapade nycklarna i mappen med Kibana-konfigurationen:

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

Nycklarna finns där, så det enda som återstår är att ändra Kibana-konfigurationen så att den börjar använda dem. I konfigurationsfilen kibana.yml, ändra http till https och lägg till rader med SSL-anslutningsinställningar. De sista tre raderna konfigurerar säker kommunikation mellan användarens webbläsare och 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

Därmed är inställningarna slutförda och åtkomsten till data i Elasticsearch-klustret är krypterad.

Om du har frågor om funktionerna hos Elastic Stack på gratis eller betalda prenumerationer, övervakningsuppgifter eller skapande av ett SIEM-system, lämna en förfrågan till återkopplingsformulär på vår webbplats.

Fler av våra artiklar om Elastic Stack på Habré:

Förstå maskininlärning i Elastic Stack (aka Elasticsearch, aka ELK)

Elasticsearch storlek

Källa: will.com

Lägg en kommentar