Elastic op slot: inschakelen van beveiligingsopties voor de Elasticsearch-cluster voor interne en externe toegang

Elastic op slot: inschakelen van beveiligingsopties voor de Elasticsearch-cluster voor interne en externe toegang

Elastic Stack is een bekend hulpmiddel op de markt van SIEM-systemen (eigenlijk niet alleen dat). Het kan veel verschillende soorten gegevens verzamelen, zowel gevoelige als niet-gevoelige. Het is niet helemaal correct als de toegang tot de elementen van Elastic Stack niet wordt beveiligd. Standaard werken alle standaardcomponenten van Elastic (Elasticsearch, Logstash, Kibana en Beats-collectors) via open protocollen. Bovendien is de authenticatie in Kibana uitgeschakeld. Al deze interacties kunnen worden beveiligd en in dit artikel leggen we uit hoe je dit kunt doen. Voor de overzichtelijkheid hebben we het verhaal opgedeeld in 3 betekenisvolle blokken:

  • Toegangsrolmodel voor gegevens
  • Gegevensbeveiliging binnen de Elasticsearch-cluster
  • Gegevensbeveiliging buiten de Elasticsearch-cluster

Meer details hieronder.

Toegangsrolmodel voor gegevens

Als je Elasticsearch installeert zonder enige tweaking, is de toegang tot alle indexen open voor iedereen die dat wil. Of voor degenen die curl kunnen gebruiken. Om dit te voorkomen, is er in Elasticsearch een rolmodel dat beschikbaar is vanaf het Basic-abonnement (dat gratis is). Het ziet er globaal als volgt uit:

Elastic op slot: inschakelen van beveiligingsopties voor de Elasticsearch-cluster voor interne en externe toegang

Wat er op de afbeelding staat

  • Gebruikers zijn iedereen die kan inloggen met gebruik van inloggegevens.
  • Rol is een set van rechten.
  • Rechten zijn een set van privileges.
  • Privileges zijn toestemmingen voor schrijf-, lees-, verwijder- enz. (Volledige lijst van privileges)
  • Hulpmiddelen zijn indexen, documenten, velden, gebruikers en andere entiteiten van de opslag (rolmodel voor sommige hulpmiddelen is alleen beschikbaar in betaalde abonnementen).

In Elasticsearch zijn er standaard standaardgebruikers, waaraan standaardrollenzijn gekoppeld. Na het inschakelen van de beveiligingsinstellingen kunnen deze onmiddellijk worden gebruikt.

Om beveiliging in de instellingen van Elasticsearch te activeren, moet je een nieuwe regel toevoegen in het configuratiebestand (standaard is dat elasticsearch/config/elasticsearch.yml) nieuw:

xpack.security.enabled: true

Na het wijzigen van het configuratiebestand starten we Elasticsearch opnieuw op zodat de wijzigingen van kracht worden. De volgende stap is het toekennen van wachtwoorden aan de standaardgebruikers. Laten we dit interactief doen met behulp van de onderstaande opdracht:

[elastic@node1 ~]$ .\/elasticsearch\/bin\/elasticsearch-setup-passwords interactive
Initiëren van de setup van wachtwoorden voor gereserveerde gebruikers elastic,apm_system,kibana,logstash_system,beats_system,remote_monitoring_user.
Je wordt gevraagd om wachtwoorden in te voeren naarmate het proces vordert.
Bevestig alstublieft dat je wilt doorgaan [y\/N]y


Voer wachtwoord in voor [elastic]:
Herhaal wachtwoord voor [elastic]:
Voer wachtwoord in voor [apm_system]:
Herhaal wachtwoord voor [apm_system]:
Voer wachtwoord in voor [kibana]:
Herhaal wachtwoord voor [kibana]:
Voer wachtwoord in voor [logstash_system]:
Herhaal wachtwoord voor [logstash_system]:
Voer wachtwoord in voor [beats_system]:
Herhaal wachtwoord voor [beats_system]:
Voer wachtwoord in voor [remote_monitoring_user]:
Herhaal wachtwoord voor [remote_monitoring_user]:
Wachtwoord veranderd voor gebruiker [apm_system]
Wachtwoord veranderd voor gebruiker [kibana]
Wachtwoord veranderd voor gebruiker [logstash_system]
Wachtwoord veranderd voor gebruiker [beats_system]
Wachtwoord veranderd voor gebruiker [remote_monitoring_user]
Wachtwoord veranderd voor gebruiker [elastic]

We controleren:

[elastic@node1 ~]$ curl -u elastic 'node1:9200\/_cat\/_nodes?pretty'
Voer hostwachtwoord in voor gebruiker 'elastic':
192.168.0.2 23 46 14 0.28 0.32 0.18 dim * node1

Je kunt jezelf op de schouder kloppen — de instellingen aan de kant van Elasticsearch zijn uitgevoerd. Nu is het tijd om Kibana in te stellen. Als je het nu start, komen er fouten, dus het is belangrijk om een sleutelopslag te creëren. Dit doe je met twee commando's (gebruiker kibana en wachtwoord, ingevoerd bij het maken van wachtwoorden in Elasticsearch):

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

Als alles correct is — zal Kibana om inloggegevens vragen. In het Basic-abonnement is een rolmodel op basis van interne gebruikers beschikbaar. Vanaf Gold kunnen externe authenticatiesystemen worden aangesloten — LDAP, PKI, Active Directory en Single sign-on systemen.

Elastic op slot: inschakelen van beveiligingsopties voor de Elasticsearch-cluster voor interne en externe toegang

Toegang tot objecten binnen Elasticsearch kan ook worden beperkt. Maar om hetzelfde te doen voor documenten of velden is een betaald abonnement vereist (dit luxe begint vanaf het Platinum-niveau). Deze instellingen zijn beschikbaar in de Kibana-interface of via Security API. Je kunt het controleren via het al bekende Dev Tools-menu:

Rol aanmaken

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

Gebruiker aanmaken

POST \/_security\/_user\/pushkin
{
  "password" : "nataliaonelove",
  "roles" : [ "ruslan_i_ludmila_role", "kibana_user" ],
  "full_name" : "Alexander Pushkin",
  "email" : "pushkin@lyceum.edu",
  "metadata" : {
    "hometown" : "Sint-Petersburg"
  }
}

Gegevensbeveiliging binnen de Elasticsearch-cluster

Wanneer Elasticsearch in een cluster draait (wat gebruikelijk is), worden de beveiligingsinstellingen binnen het cluster belangrijk. Voor veilige interactie tussen knooppunten gebruikt Elasticsearch het TLS-protocol. Om veilige interactie tussen hen in te stellen, is een certificaat nodig. We genereren een certificaat en privésleutel in PEM-formaat:

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

Na het uitvoeren van de bovenstaande opdracht, verschijnt er een map /../elasticsearch met een archief elastic-stack-ca.zip. Binnenin bevinden zich een certificaat en een privésleutel met extensies crt en key respectievelijk. Het is aan te raden deze op een gedeelde resource te plaatsen, die toegankelijk moet zijn vanuit alle knooppunten van het cluster.

Voor elk knooppunt zijn nu eigen certificaten en privésleutels nodig op basis van die in de gedeelde map. Bij het uitvoeren van de opdracht wordt gevraagd een wachtwoord op te geven. Extra opties zoals —ip en —dns kunnen worden toegevoegd voor volledige verificatie van de interactie tussen knooppunten.

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

Na het uitvoeren van de opdracht krijgen we een certificaat en een privésleutel in PKCS#12-formaat, beveiligd met een wachtwoord. Het enige wat nog rest is het verplaatsen van het gegenereerde bestand p12 naar de configuratiemap:

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

We voegen het wachtwoord voor het certificaat toe in p12 de keystore en truststore op elk knooppunt:

[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

In het al bekende elasticsearch.yml blijft het enige dat we moeten doen, de regels met de gegevens van het certificaat toe te voegen:

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

We starten alle Elasticsearch-knooppunten en voeren curluit. Als alles correct is uitgevoerd, ontvangt u een antwoord met verschillende knooppunten:

[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

Er is nog een extra beveiligingsoptie - IP-adresfiltering (beschikbaar in abonnementen vanaf het Gold-niveau). Hiermee kunt u witte lijsten maken van IP-adressen die toegang hebben tot de knooppunten.

Gegevensbeveiliging buiten de Elasticsearch-cluster

Buiten het cluster betekent het aansluiten van externe tools: Kibana, Logstash, Beats of andere externe clients.

Elastic op slot: inschakelen van beveiligingsopties voor de Elasticsearch-cluster voor interne en externe toegang

Om https-ondersteuning in te schakelen (in plaats van http), voegen we nieuwe regels toe aan 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

Aangezien het certificaat is beveiligd met een wachtwoord, voegen we dit toe aan de keystore en truststore op elk knooppunt:

[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

Na het toevoegen van de sleutels zijn de Elasticsearch-nodes klaar om via https te verbinden. Ze kunnen nu worden gestart.

De volgende stap is het aanmaken van een sleutel voor de verbinding met Kibana en deze toe te voegen aan de configuratie. Op basis van het certificaat dat al in de gedeelde directory is geplaatst, zullen we een certificaat in PEM-formaat genereren (PKCS#12, Kibana, Logstash en Beats ondersteunen dit momenteel niet):

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

We moeten nu de aangemaakte sleutels uitpakken in de configuratiemap van Kibana:

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

Sleutels zijn aanwezig, dus de configuratie van Kibana moet worden aangepast zodat deze ze gaat gebruiken. In het configuratiebestand kibana.yml veranderen we http naar https en voegen we de rijen met SSL-configuratie-instellingen toe. De laatste drie rijen configureren de veilige interactie tussen de browser van de gebruiker en 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

Zo zijn de instellingen voltooid en is de toegang tot de gegevens in de Elasticsearch-cluster versleuteld.

Als u vragen heeft over de mogelijkheden van Elastic Stack in gratis of betaalde abonnementen, vragen over monitoring of de creatie van een SIEM-systeem, laat dan een aanvraag achter in feedbackformulier op onze website.

Hier zijn nog meer artikelen van ons over Elastic Stack op Habr:

Laten we de mogelijkheden van Machine Learning in de Elastic Stack (ook wel Elasticsearch, ook bekend als ELK) verkennen.

Sizing van Elasticsearch

Bron: habr.com

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster