Elastic Locked Up: Aktiverer Elasticsearch Cluster-sikkerhedsmuligheder for indvendig og udvendig adgang

Elastic Locked Up: Aktiverer Elasticsearch Cluster-sikkerhedsmuligheder for indvendig og udvendig adgang

Elastic Stack er et velkendt værktøj på SIEM-systemmarkedet (faktisk ikke kun dem). Det kan indsamle en masse forskellige størrelser data, både følsomme og ikke særlig følsomme. Det er ikke helt korrekt, hvis adgangen til selve Elastic Stack-elementerne ikke er beskyttet. Som standard fungerer alle Elastic-boksede elementer (Elasticsearch, Logstash, Kibana og Beats-samlere) på åbne protokoller. Og i selve Kibana er godkendelse deaktiveret. Alle disse interaktioner kan sikres, og i denne artikel vil vi fortælle dig, hvordan du gør det. For nemheds skyld blev historien opdelt i 3 semantiske blokke:

  • Rollemodel for dataadgang
  • Datasikkerhed i en Elasticsearch-klynge
  • Datasikkerhed uden for en Elasticsearch-klynge

Detaljer under snittet.

Rollemodel for dataadgang

Hvis du installerer Elasticsearch og tuner det på ingen måde, vil adgang til alle indekser være åben for alle. Nå, eller dem der kan bruge krølle. For at undgå dette har Elasticsearch en rollemodel, der er tilgængelig, startende med et abonnement på basisniveau (som er gratis). Skematisk ser det sådan ud:

Elastic Locked Up: Aktiverer Elasticsearch Cluster-sikkerhedsmuligheder for indvendig og udvendig adgang

Hvad er der på billedet

  • Brugere er alle, der kan logge ind ved hjælp af legitimationsoplysninger.
  • En rolle er et sæt rettigheder.
  • Rettigheder er et sæt privilegier.
  • Privilegier er tilladelser til at skrive, læse, slette osv. (Fuld liste over privilegier)
  • Ressourcer er indekser, dokumenter, felter, brugere og andre lagerenheder (rollemodellen for nogle ressourcer er kun tilgængelig i betalte abonnementer).

Elasticsearch har som standard boksede brugeresom er knyttet til kasseroller. Når du har aktiveret sikkerhedsindstillinger, kan du begynde at bruge dem med det samme.

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

xpack.security.enabled: true

Når du har ændret konfigurationsfilen, skal du starte eller genstarte Elasticsearch for at ændringerne træder i kraft. Det næste trin er at tildele adgangskoder til boksede brugere. Lad os gøre dette interaktivt med 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 tjekker:

[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 slå dig selv på skulderen - indstillingerne på Elasticsearch-siden er udført. Nu er det turen til at sætte Kibana op. Hvis du kører det nu, vil der falde fejl, så det er vigtigt at oprette et nøglelager. Dette gøres i to kommandoer (bruger Kibana og adgangskoden indtastet i trinnet med at oprette 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 bede om et brugernavn og en adgangskode. I et Basic-abonnement er en rollemodel baseret på interne brugere tilgængelig. Startende med Gold kan du tilslutte eksterne godkendelsessystemer - LDAP, PKI, Active Directory og Single sign-on systemer.

Elastic Locked Up: Aktiverer Elasticsearch Cluster-sikkerhedsmuligheder for indvendig og udvendig adgang

Adgangsrettigheder til objekter inde i Elasticsearch kan også begrænses. Sandt nok, for at gøre det samme for dokumenter eller felter, skal du have et betalt abonnement (denne luksus starter med Platinum-niveauet). Disse indstillinger er tilgængelige i Kibana-grænsefladen eller via Sikkerheds-API. Du kan tjekke gennem den allerede velkendte Dev Tools-menu:

Opret en rolle

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

Brugeroprettelse

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

Datasikkerhed i en Elasticsearch-klynge

Når Elasticsearch kører i en klynge (hvilket er almindeligt), bliver sikkerhedsindstillingerne i klyngen vigtige. Til sikker kommunikation mellem noder bruger Elasticsearch TLS-protokollen. For at opsætte sikker kommunikation mellem dem, skal du have et certifikat. Vi genererer et certifikat og en privat nøgle i PEM-format:

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

Efter at have udført kommandoen ovenfor, i mappen /../elasticsearch arkivet vises elastic-stack-ca.zip. Inde i den finder du et certifikat og en privat nøgle med udvidelser crt и nøgle henholdsvis. Det er ønskeligt at lægge dem ud på en delt ressource, som der skal være adgang til fra alle klyngens noder.

Hver node har nu brug for sine egne certifikater og private nøgler baseret på dem i den delte mappe. Når kommandoen udføres, bliver du bedt om at angive en adgangskode. Yderligere muligheder -ip og -dns kan tilføjes for fuldt ud at verificere kommunikerende 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 af kommandoudførelsen vil vi modtage et certifikat og en privat nøgle i formatet PKCS # 12, beskyttet af en adgangskode. Det er tilbage at flytte den genererede fil p12 til konfigurationsmappen:

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

Tilføj en adgangskode til certifikatet i formatet p12 i 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 det allerede kendte elasticsearch.yml det er tilbage at tilføje linjer med data 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 noder og udfører krølle. Hvis alt blev gjort korrekt, returneres 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 en anden sikkerhedsmulighed - IP-adressefiltrering (tilgængelig i abonnementer fra Gold-niveau). Giver dig mulighed for at oprette hvide lister over IP-adresser, hvorfra noder har tilladelse til at få adgang.

Datasikkerhed uden for en Elasticsearch-klynge

Uden for klyngen betyder det at forbinde eksterne instrumenter: Kibana, Logstash, Beats eller andre eksterne klienter.

Elastic Locked Up: Aktiverer Elasticsearch Cluster-sikkerhedsmuligheder for indvendig og udvendig adgang

For at konfigurere understøttelse af https (i stedet for http), skal du tilføje nye linjer til 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 certifikatet er beskyttet med adgangskode, lad os føje 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 tilføjelse af nøglerne er Elasticsearch-noderne klar til at oprette forbindelse via https. Nu kan de lanceres.

Det næste trin er at oprette en Kibana-forbindelsesnøgle og tilføje den til konfigurationen. Baseret på certifikatet, som allerede er placeret i den delte mappe, genererer vi et certifikat i PEM-format (PKCS # 12 Kibana, Logstash og Beats understøtter endnu ikke):

[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 pakke de genererede nøgler ud i Kibana-konfigurationsmappen:

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

Tasterne er der, så det er tilbage at ændre Kibana-konfigurationen, så den begynder at bruge dem. I kibana.yml-konfigurationsfilen skal du ændre http til https og tilføje linjer med SSL-forbindelsesindstillinger. De sidste tre linjer opretter en sikker interaktion 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 foretaget, og adgangen til data i Elasticsearch-klyngen er krypteret.

Hvis du har spørgsmål om Elastic Stack-funktionerne på gratis eller betalte abonnementer, opgaver til overvågning eller oprettelse af et SIEM-system, så efterlad en anmodning i tilbage melding fra på vores hjemmeside.

Flere af vores artikler om Elastic Stack på Habré:

Forstå maskinlæring i den elastiske stak (alias Elasticsearch, alias ELK)

Størrelse Elasticsearch

Kilde: www.habr.com

Tilføj en kommentar