Elastisk under lås og nøkkel: muliggjør sikkerhetsalternativer for Elasticsearch-klynge for tilgang fra innsiden og utsiden

Elastisk under lås og nøkkel: muliggjør sikkerhetsalternativer for Elasticsearch-klynge for tilgang fra innsiden og utsiden

Elastic Stack er et velkjent verktøy i SIEM-systemmarkedet (faktisk ikke bare dem). Den kan samle inn mye data i forskjellig størrelse, både sensitive og lite sensitive. Det er ikke helt riktig hvis tilgangen til selve Elastic Stack-elementene ikke er beskyttet. Som standard kjører alle Elastic out-of-the-box-elementer (Elasticsearch, Logstash, Kibana og Beats-samlere) på åpne protokoller. Og i selve Kibana er autentisering deaktivert. Alle disse interaksjonene kan sikres, og i denne artikkelen vil vi fortelle deg hvordan du gjør dette. For enkelhets skyld delte vi fortellingen inn i 3 semantiske blokker:

  • Rollebasert datatilgangsmodell
  • Datasikkerhet i en Elasticsearch-klynge
  • Sikring av data utenfor en Elasticsearch-klynge

Detaljer under kuttet.

Rollebasert datatilgangsmodell

Hvis du installerer Elasticsearch og ikke justerer det på noen måte, vil tilgang til alle indekser være åpen for alle. Vel, eller de som kan bruke krøll. For å unngå dette har Elasticsearch en rollemodell som er tilgjengelig fra og med et Basic-abonnement (som er gratis). Skjematisk ser det omtrent slik ut:

Elastisk under lås og nøkkel: muliggjør sikkerhetsalternativer for Elasticsearch-klynge for tilgang fra innsiden og utsiden

Hva er på bildet

  • Brukere er alle som kan logge på ved å bruke sin legitimasjon.
  • En rolle er et sett med rettigheter.
  • Rettigheter er et sett med privilegier.
  • Privilegier er tillatelser til å skrive, lese, slette osv. (Full liste over privilegier)
  • Ressurser er indekser, dokumenter, felt, brukere og andre lagringsenheter (rollemodellen for noen ressurser er kun tilgjengelig med betalte abonnementer).

Som standard har Elasticsearch boksbrukere, som de er knyttet til boks roller. Når du har aktivert sikkerhetsinnstillinger, kan du begynne å bruke dem umiddelbart.

For å aktivere sikkerhet i Elasticsearch-innstillingene, må du legge den til i konfigurasjonsfilen (som standard er dette elasticsearch/config/elasticsearch.yml) ny linje:

xpack.security.enabled: true

Etter å ha endret konfigurasjonsfilen, start eller start Elasticsearch på nytt for at endringene skal tre i kraft. Det neste trinnet er å tilordne passord til boksbrukere. La oss gjøre dette interaktivt ved å bruke kommandoen nedenfor:

[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 sjekker:

[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 klappe deg selv på skulderen - innstillingene på Elasticsearch-siden er fullført. Nå er det på tide å konfigurere Kibana. Hvis du kjører det nå, vil det dukke opp feil, så det er viktig å opprette et nøkkellager. Dette gjøres i to kommandoer (bruker kibana og passordet som ble angitt i trinnet for opprettelse av passord i Elasticsearch):

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

Hvis alt er riktig, vil Kibana begynne å be om pålogging og passord. Basic-abonnementet inkluderer en rollemodell basert på interne brukere. Fra og med Gold kan du koble til eksterne autentiseringssystemer – LDAP, PKI, Active Directory og Single sign-on-systemer.

Elastisk under lås og nøkkel: muliggjør sikkerhetsalternativer for Elasticsearch-klynge for tilgang fra innsiden og utsiden

Tilgangsrettigheter til objekter inne i Elasticsearch kan også begrenses. Men for å gjøre det samme for dokumenter eller felt, trenger du et betalt abonnement (denne luksusen starter med Platinum-nivået). Disse innstillingene er tilgjengelige i Kibana-grensesnittet eller via Sikkerhets-API. Du kan sjekke gjennom den allerede kjente Dev Tools-menyen:

Å skape en rolle

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

Opprette en bruker

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

Datasikkerhet i en Elasticsearch-klynge

Når Elasticsearch kjører i en klynge (som er vanlig), blir sikkerhetsinnstillingene i klyngen viktige. For sikker kommunikasjon mellom noder bruker Elasticsearch TLS-protokollen. For å sette opp sikker interaksjon mellom dem, trenger du et sertifikat. Vi genererer et sertifikat og en privat nøkkel i PEM-format:

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

Etter å ha utført kommandoen ovenfor, i katalogen /../elasticsearch arkivet vises elastisk-stabel-ca.zip. Inne i den finner du et sertifikat og en privat nøkkel med utvidelser crt и nøkkel hhv. Det er tilrådelig å sette dem på en delt ressurs, som skal være tilgjengelig fra alle noder i klyngen.

Hver node trenger nå sine egne sertifikater og private nøkler basert på de i den delte katalogen. Når du utfører kommandoen, vil du bli bedt om å angi et passord. Du kan legge til flere alternativer -ip og -dns for fullstendig verifisering av samhandlende noder.

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

Som et resultat av å utføre kommandoen, vil vi motta et sertifikat og en privat nøkkel i PKCS#12-format, beskyttet av et passord. Alt som gjenstår er å flytte den genererte filen p12 til konfigurasjonskatalogen:

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

Legg til et passord til sertifikatet i formatet p12 i nøkkellager og truststore på hver node:

[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

Allerede kjent elasticsearch.yml Alt som gjenstår er å legge til linjer med sertifikatdata:

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 starter alle Elasticsearch-noder og kjører curl. Hvis alt ble gjort riktig, vil et svar med flere noder bli returnert:

[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 er et annet sikkerhetsalternativ - IP-adressefiltrering (tilgjengelig i abonnementer fra Gold-nivå). Lar deg lage hvite lister over IP-adresser som du har tilgang til noder fra.

Sikring av data utenfor en Elasticsearch-klynge

Utenfor klyngen betyr å koble til eksterne verktøy: Kibana, Logstash, Beats eller andre eksterne klienter.

Elastisk under lås og nøkkel: muliggjør sikkerhetsalternativer for Elasticsearch-klynge for tilgang fra innsiden og utsiden

For å konfigurere støtte for https (i stedet for http), legg til nye linjer 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

Fordi Sertifikatet er passordbeskyttet, legg det til i nøkkellageret og truststore på hver node:

[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

Etter å ha lagt til nøklene, er Elasticsearch-noder klare til å koble til via https. Nå kan de lanseres.

Det neste trinnet er å lage en nøkkel for å koble til Kibana og legge den til i konfigurasjonen. Basert på sertifikatet som allerede er plassert i den delte katalogen, vil vi generere et sertifikat i PEM-format (PKCS#12 Kibana, Logstash og Beats støtter ennå ikke):

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

Alt som gjenstår er å pakke ut de opprettede nøklene inn i mappen med Kibana-konfigurasjonen:

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

Nøklene er der, så det gjenstår bare å endre Kibana-konfigurasjonen slik at den begynner å bruke dem. I kibana.yml-konfigurasjonsfilen endrer du http til https og legger til linjer med SSL-tilkoblingsinnstillinger. De tre siste linjene konfigurerer sikker kommunikasjon mellom brukerens nettleser og 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

Dermed er innstillingene fullført og tilgang til data i Elasticsearch-klyngen er kryptert.

Hvis du har spørsmål om mulighetene til Elastic Stack på gratis eller betalte abonnementer, overvåkingsoppgaver eller opprettelse av et SIEM-system, legg igjen en forespørsel til tilbakemeldings-skjema på nettstedet vårt.

Flere av våre artikler om Elastic Stack på Habré:

Forstå maskinlæring i den elastiske stabelen (aka Elasticsearch, aka ELK)

Elasticsearch dimensjonering

Kilde: www.habr.com

Legg til en kommentar