Elastic under lås: aktiverer sikkerhedsindstillinger for Elasticsearch-klyngen til adgang inde fra og ude fra

Elastic under lås: aktiverer sikkerhedsindstillinger for Elasticsearch-klyngen til adgang inde fra og ude fra

Elastic Stack — et velkendt værktøj på markedet for SIEM-systemer (faktisk ikke kun dem). Det kan indsamle mange forskellige typer data, både følsomme og mindre følsomme. Det er ikke helt korrekt, hvis adgangen til selve elementerne i Elastic Stack ikke er beskyttet. Som standard fungerer alle de boxede elementer i Elastic (Elasticsearch, Logstash, Kibana og Beats-samlere) via åbne protokoller. Og i selve Kibana er autentificering deaktiveret. Alle disse interaktioner kan sikre, og i denne artikel vil vi forklare, hvordan man gør det. For nemheds skyld har vi delt fortællingen op i 3 meningsfulde blokke:

  • Adgangsroller til data
  • Datasikkerhed inden for Elasticsearch-klyngen
  • Datasikkerhed uden for Elasticsearch-klyngen

Detaljer nedenfor.

Adgangsroller til data

Hvis man bare installerer Elasticsearch og overhovedet ikke finjusterer det, vil adgangen til alle indekser være åben for alle interesserede. Eller dem, der kan bruge curl. For at undgå dette har Elasticsearch en rollemodel, der er tilgængelig fra Basic-abonnementsniveauet (det er gratis). Den ser cirka sådan ud:

Elastic under lås: aktiverer sikkerhedsindstillinger for Elasticsearch-klyngen til adgang inde fra og ude fra

Hvad der er på billedet

  • Brugere — det er alle, der kan logge ind med brugeroplysninger.
  • Rolle — det er et sæt rettigheder.
  • Rettigheder — det er et sæt privilegier.
  • Privilegier — det er tilladelser til skrivning, læsning, sletning osv. (Komplet liste over privilegier)
  • Ressourcer — det er indekser, dokumenter, felter, brugere og andre objekter i lagringen (rollemodellen for nogle ressourcer er kun tilgængelig i betalte abonnementer).

I Elasticsearch er der som standard boxede brugere, der er knyttet til boxede roller. Efter aktivering af sikkerhedsindstillingerne kan de straks begynde at blive brugt.

For at aktivere sikkerhed i Elasticsearch-indstillingerne skal man tilføje en ny linje til konfigurationsfilen (som standard er dette elasticsearch/config/elasticsearch.yml)

xpack.security.enabled: true

Efter ændring af konfigurationsfilen skal man starte eller genstarte Elasticsearch for at ændringerne træder i kraft. Næste skridt er tildeling af adgangskoder til boxede brugere. Vi vil gøre dette interaktivt ved hjælp af kommandoen nedenfor:

[elastic@node1 ~]$ .\/elasticsearch\/bin\/elasticsearch-setup-passwords interactive
Initierer opsætning af adgangskoder for de reserverede brugere elastic, apm_system, kibana, logstash_system, beats_system, remote_monitoring_user.
Du vil blive bedt om at indtaste adgangskoder, mens processen skrider frem.
Bekræft venligst, at du ønsker at fortsætte [y\/N]y


Indtast adgangskode for [elastic]:
Reindtast adgangskode for [elastic]:
Indtast adgangskode for [apm_system]:
Reindtast adgangskode for [apm_system]:
Indtast adgangskode for [kibana]:
Reindtast adgangskode for [kibana]:
Indtast adgangskode for [logstash_system]:
Reindtast adgangskode for [logstash_system]:
Indtast adgangskode for [beats_system]:
Reindtast adgangskode for [beats_system]:
Indtast adgangskode for [remote_monitoring_user]:
Reindtast adgangskode for [remote_monitoring_user]:
Adgangskoden for bruger [apm_system] er ændret
Adgangskoden for bruger [kibana] er ændret
Adgangskoden for bruger [logstash_system] er ændret
Adgangskoden for bruger [beats_system] er ændret
Adgangskoden for bruger [remote_monitoring_user] er ændret
Adgangskoden for bruger [elastic] er ændret

Vi tjekker:

[elastic@node1 ~]$ curl -u elastic 'node1:9200\/_cat\/_nodes?pretty'
Indtast værtsadgangskode for bruger 'elastic':
192.168.0.2 23 46 14 0.28 0.32 0.18 dim * node1

Du kan klappe dig selv på skulderen — konfigurationen på Elasticsearch-siden er gennemført. Nu er det tid til at konfigurere Kibana. Hvis du starter den nu, vil der komme fejl, så det er vigtigt at oprette en nøglelager. Det gøres med to kommandoer (bruger kibana og adgangskode, indtastet i skridtet for oprettelse af adgangskoder i Elasticsearch):

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

Hvis alt er korrekt — vil Kibana begynde at anmode om login og adgangskode. I Basic-abonnementet er der en rollemodel baseret på interne brugere. Fra Gold-niveauet kan eksterne autentificeringssystemer som LDAP, PKI, Active Directory og Single sign-on-systemer tilsluttes.

Elastic under lås: aktiverer sikkerhedsindstillinger for Elasticsearch-klyngen til adgang inde fra og ude fra

Adgangsrettighederne til objekter inden i Elasticsearch kan også begrænses. Dog kræves der et betalt abonnement for at gøre det samme for dokumenter eller felter (denne luksus starter fra Platinum-niveauet). Disse indstillinger er tilgængelige i Kibana-grænsefladen eller via Security API. Du kan kontrollere det via det velkendte Dev Tools-menu:

Oprettelse af rolle

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

Oprettelse af bruger

POST \/_security\/user\/pushkin
{
  "password" : "nataliaonelove",
  "roles" : [ "ruslan_i_ludmila_role", "kibana_user" ],
  "full_name" : "Alexander Pushkin",
  "email" : "pushkin@lyceum.edu",
  "metadata" : {
    "hometown" : "Sankt Petersborg"
  }
}

Datasikkerhed inden for Elasticsearch-klyngen

Når Elasticsearch kører i et klynge (hvilket er almindeligt), bliver sikkerhedsindstillinger inden i klyngen vigtige. For sikker interaktion mellem noder bruger Elasticsearch TLS-protokollen. For at konfigurere sikker interaktion mellem dem kræves et certifikat. Generer certifikat og privat nøgle i PEM-format:

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

Efter udførelsen af den ovenstående kommando vil der i mappen /../elasticsearch være en arkivfil elastic-stack-ca.zip. Indeni finder du certifikatet og den private nøgle med udvidelserne crt og nøgle henholdsvis. Det er bedst at uploade dem til en delt ressource, som skal være tilgængelig fra alle noder i klyngen.

For hver node er der nu behov for sine egne certifikater og private nøgler baseret på dem, der ligger i den delte mappe. Ved udførelsen af kommandoen vil du blive bedt om at angive en adgangskode. Du kan tilføje yderligere muligheder —ip og —dns for fuld verifikation af de interagerende noder.

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

Efter udførelsen af kommandoen vil vi få et certifikat og en privat nøgle i PKCS#12-format, beskyttet med en adgangskode. Det er nu tid til at flytte den genererede fil p12 til konfigurationsmappen:

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

Vi tilføjer adgangskoden til certifikatet i p12 keystore 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

I den allerede kendte elasticsearch.yml er det nu tid til at tilføje linjerne med information om certifikatet:

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-noderne og udfører curl. Hvis alt blev udført korrekt, vil der komme et svar med flere noder:

[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

Der er også en sikkerhedsoption — filtrering af IP-adresser (tilgængelig i abonnementer fra Gold niveau). Dette giver mulighed for at oprette whitelist af IP-adresser, som har tilladelse til at tilgå noderne.

Datasikkerhed uden for Elasticsearch-klyngen

Uden for klyngen betyder tilslutning af eksterne værktøjer: Kibana, Logstash, Beats eller andre eksterne klienter.

Elastic under lås: aktiverer sikkerhedsindstillinger for Elasticsearch-klyngen til adgang inde fra og ude fra

For at konfigurere understøttelse af https (i stedet for http) tilføjer vi 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

Da certifikatet er beskyttet med en adgangskode, tilføjer vi det til keystore 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

Efter at have tilføjet nøglerne er Elasticsearch-noderne klar til at blive forbundet via https. De kan nu startes.

Det næste skridt er at oprette en nøgle til at forbinde Kibana og tilføje den til konfigurationen. Baseret på certifikatet, der allerede er placeret i den delte mappe, vil vi generere certifikatet i PEM-format (PKCS#12, da Kibana, Logstash og Beats endnu ikke understøtter):

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

Det er tilbage at udpakke de oprettede nøgler til Kibana-konfigurationsmappen:

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

Nøglerne er der, så det er nu tid til at ændre Kibana-konfigurationen, så den begynder at bruge dem. I konfigurationsfilen kibana.yml ændres http til https, og vi tilføjer linjer med SSL-forbindelsesindstillinger. De sidste tre linjer konfigurerer sikker kommunikation mellem brugerens browser 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

Således er indstillingerne udført, og adgangen til dataene i Elasticsearch-klyngen er krypteret.

Hvis du har spørgsmål om mulighederne for Elastic Stack på gratis eller betalte abonnementer, eller opgaver relateret til overvågning eller oprettelse af SIEM-systemer, så efterlad en anmodning i kontaktformularen på vores hjemmeside.

Mere om vores artikler om Elastic Stack på Habr:

Lad os se nærmere på Maskinlæring i Elastic Stack (også kendt som Elasticsearch, også ELK)

Sizing Elasticsearch

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster