
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:

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. ()
- 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 , der er knyttet til . 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: trueEfter æ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.passwordHvis 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.

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 . 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 --pemEfter 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.keyEfter 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/configVi 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_passwordI 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.p12Vi 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 - node1Der 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.

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.p12Da 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_passwordEfter 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 --pemDet er tilbage at udpakke de oprettede nøgler til Kibana-konfigurationsmappen:
[elastic@node1 ~]$ unzip elasticsearch\/certificate-bundle.zip -d kibana\/configNø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.crtSå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 på vores hjemmeside.
Mere om vores artikler om Elastic Stack på Habr:
Kilde: habr.com
