Elastysk ûnder slot en kaai: ynskeakelje Elasticsearch-klusterbefeiligingsopsjes foar tagong fan binnen en bûten

Elastysk ûnder slot en kaai: ynskeakelje Elasticsearch-klusterbefeiligingsopsjes foar tagong fan binnen en bûten

Elastic Stack is in bekend ark yn 'e SIEM-systeemmerk (eigentlik net allinich). It kin in protte gegevens fan ferskillende grutte sammelje, sawol gefoelich as net heul gefoelich. It is net hielendal korrekt as tagong ta de Elastic Stack eleminten sels is net beskerme. Standert rinne alle Elastic out-of-the-box eleminten (Elasticsearch, Logstash, Kibana, en Beats samlers) op iepen protokollen. En yn Kibana sels is autentikaasje útskeakele. Al dizze ynteraksjes kinne wurde befeilige en yn dit artikel sille wy jo fertelle hoe't jo dit dwaan. Foar gemak hawwe wy it ferhaal ferdield yn 3 semantyske blokken:

  • Rol-basearre gegevens tagong model
  • Gegevensfeiligens binnen in Elasticsearch-kluster
  • Gegevens befeiligje bûten in Elasticsearch-kluster

Details ûnder de besuniging.

Rol-basearre gegevens tagong model

As jo ​​Elasticsearch ynstallearje en it op gjin inkelde manier ôfstimme, sil tagong ta alle yndeksen foar elkenien iepen wêze. No, of dyjingen dy't krul kinne brûke. Om dit te foarkommen, hat Elasticsearch in rolmodel dat beskikber is te begjinnen mei in Basic-abonnemint (dat is fergees). Skematysk sjocht it der sa út:

Elastysk ûnder slot en kaai: ynskeakelje Elasticsearch-klusterbefeiligingsopsjes foar tagong fan binnen en bûten

Wat stiet op de foto

  • Brûkers binne elkenien dy't ynlogge kinne mei har referinsjes.
  • In rol is in set fan rjochten.
  • Rjochten binne in set fan privileezjes.
  • Privileezjes binne tagongsrjochten om te skriuwen, te lêzen, te wiskjen, ensfh. (Folsleine list fan privileezjes)
  • Boarnen binne yndeksen, dokuminten, fjilden, brûkers en oare opslach-entiteiten (it rolmodel foar guon boarnen is allinich beskikber mei betelle abonneminten).

Standert hat Elasticsearch box brûkers, dêr't se oan ferbûn binne box rollen. Sadree't jo befeiligingsynstellingen ynskeakelje, kinne jo se fuortendaliks begjinne te brûken.

Om feiligens yn te skeakeljen yn Elasticsearch-ynstellingen, moatte jo it tafoegje oan it konfiguraasjetriem (standert is dit elasticsearch/config/elasticsearch.yml) nije rigel:

xpack.security.enabled: true

Nei it feroarjen fan it konfiguraasjetriem, starte of opnij Elasticsearch foar de wizigingen om effekt te nimmen. De folgjende stap is it tawizen fan wachtwurden oan doaze brûkers. Litte wy dit ynteraktyf dwaan mei it kommando hjirûnder:

[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]

Wy kontrolearje:

[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

Jo kinne josels op 'e rêch klopje - de ynstellingen oan' e Elasticsearch-kant binne foltôge. No is it tiid om Kibana te konfigurearjen. As jo ​​it no útfiere, sille flaters ferskine, dus it is wichtich om in kaaiwinkel te meitsjen. Dit wurdt dien yn twa kommando's (brûker kibana en it wachtwurd ynfierd by de stap foar oanmeitsjen fan wachtwurd yn Elasticsearch):

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

As alles goed is, sil Kibana begjinne te freegjen om in oanmelding en wachtwurd. It Basic-abonnemint omfettet in rolmodel basearre op ynterne brûkers. Begjinnend mei Goud kinne jo eksterne autentikaasjesystemen ferbine - LDAP, PKI, Active Directory en Single sign-on systemen.

Elastysk ûnder slot en kaai: ynskeakelje Elasticsearch-klusterbefeiligingsopsjes foar tagong fan binnen en bûten

Tagongsrjochten foar objekten binnen Elasticsearch kinne ek beheind wurde. Om lykwols itselde te dwaan foar dokuminten as fjilden, sille jo in betelle abonnemint nedich hawwe (dizze lúkse begjint mei it Platina-nivo). Dizze ynstellings binne beskikber yn de Kibana ynterface of fia Feiligens API. Jo kinne kontrolearje fia it al bekende menu Dev Tools:

It meitsjen fan in rol

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

It meitsjen fan in brûker

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

Gegevensfeiligens binnen in Elasticsearch-kluster

As Elasticsearch yn in kluster rint (wat gewoan is), wurde feiligensynstellingen binnen it kluster wichtich. Foar feilige kommunikaasje tusken knopen brûkt Elasticsearch it TLS-protokol. Om feilige ynteraksje tusken har yn te stellen, hawwe jo in sertifikaat nedich. Wy generearje in sertifikaat en privee kaai yn PEM-formaat:

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

Nei it útfieren fan it kommando hjirboppe, yn 'e map /../elasticsearch argyf sil ferskine elastic-stack-ca.zip. Dêryn fine jo in sertifikaat en in privee kaai mei tafoegings crt и key respektivelik. It is oan te rieden om se op in dielde boarne te setten, dy't tagonklik wêze moat fan alle knooppunten yn it kluster.

Elke node hat no syn eigen sertifikaten en privee kaaien nedich basearre op dy yn 'e dielde map. By it útfieren fan it kommando wurde jo frege om in wachtwurd yn te stellen. Jo kinne ekstra opsjes tafoegje -ip en -dns foar folsleine ferifikaasje fan ynteraktive knopen.

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

As gefolch fan it útfieren fan it kommando, wy krije in sertifikaat en in privee kaai yn PKCS # 12 opmaak, beskerme troch in wachtwurd. Alles wat oerbliuwt is it oanmakke bestân te ferpleatsen p12 nei de konfiguraasjemap:

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

Foegje in wachtwurd ta oan it sertifikaat yn it formaat p12 yn keystore en truststore op elke 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

Al bekend elasticsearch.yml Alles wat oerbliuwt is rigels ta te foegjen mei sertifikaatgegevens:

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

Wy starte alle Elasticsearch-knooppunten en útfiere curl. As alles goed dien is, sil in antwurd mei ferskate knopen weromjûn wurde:

[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

D'r is in oare feiligensopsje - IP-adresfiltering (beskikber yn abonneminten fan Gold-nivo). Hjirmei kinne jo wite listen meitsje fan IP-adressen wêrfan jo tagong krije ta knooppunten.

Gegevens befeiligje bûten in Elasticsearch-kluster

Bûten it kluster betsjut it ferbinen fan eksterne ark: Kibana, Logstash, Beats of oare eksterne kliïnten.

Elastysk ûnder slot en kaai: ynskeakelje Elasticsearch-klusterbefeiligingsopsjes foar tagong fan binnen en bûten

Om stipe foar https (ynstee fan http) te konfigurearjen, foegje nije rigels ta oan 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

Omdat It sertifikaat is mei wachtwurd beskerme, foegje it ta oan de keystore en truststore op elke 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

Nei it tafoegjen fan de kaaien binne Elasticsearch-knooppunten klear om te ferbinen fia https. No kinne se lansearre wurde.

De folgjende stap is om in kaai te meitsjen om Kibana te ferbinen en it ta te foegjen oan 'e konfiguraasje. Op grûn fan it sertifikaat dat al yn 'e dielde map leit, sille wy in sertifikaat generearje yn PEM-formaat (PKCS#12 Kibana, Logstash en Beats stypje noch net):

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

Alles wat oerbliuwt is de oanmakke kaaien útpakke yn 'e map mei de Kibana-konfiguraasje:

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

De kaaien binne der, dus alles wat oerbliuwt is de Kibana-konfiguraasje te feroarjen sadat it se begjint te brûken. Yn de kibana.yml konfiguraasje triem, feroarje http nei https en heakje rigels mei SSL ferbining ynstellings. De lêste trije rigels konfigurearje feilige kommunikaasje tusken de browser fan de brûker 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

Sa binne de ynstellingen foltôge en tagong ta gegevens yn it Elasticsearch-kluster is fersifere.

As jo ​​​​fragen hawwe oer de mooglikheden fan Elastic Stack oer fergese of betelle abonneminten, tafersjochtaken of it meitsjen fan in SIEM-systeem, lit dan in fersyk nei feedback formulier op ús webside.

Mear fan ús artikels oer Elastic Stack op Habré:

Machine Learning begripe yn 'e elastyske stapel (aka Elasticsearch, aka ELK)

Elasticsearch sizing

Boarne: www.habr.com

Add a comment