Elastic sa ilalim ng lock at key: pagpapagana ng mga opsyon sa seguridad ng cluster ng Elasticsearch para sa pag-access mula sa loob at labas

Elastic sa ilalim ng lock at key: pagpapagana ng mga opsyon sa seguridad ng cluster ng Elasticsearch para sa pag-access mula sa loob at labas

Ang Elastic Stack ay isang kilalang tool sa merkado ng mga sistema ng SIEM (sa totoo lang, hindi lang sila). Maaari itong mangolekta ng maraming iba't ibang laki ng data, parehong sensitibo at hindi masyadong sensitibo. Hindi ito ganap na tama kung ang pag-access sa mga elemento ng Elastic Stack mismo ay hindi protektado. Bilang default, lahat ng Elastic out-of-the-box na elemento (Elasticsearch, Logstash, Kibana, at Beats collectors) ay tumatakbo sa mga bukas na protocol. At sa Kibana mismo, hindi pinagana ang pagpapatunay. Ang lahat ng mga pakikipag-ugnayang ito ay maaaring ma-secure at sa artikulong ito ay sasabihin namin sa iyo kung paano ito gagawin. Para sa kaginhawahan, hinati namin ang salaysay sa 3 semantic block:

  • Modelo ng pag-access ng data na nakabatay sa papel
  • Seguridad ng data sa loob ng isang Elasticsearch cluster
  • Pag-secure ng data sa labas ng isang Elasticsearch cluster

Mga detalye sa ilalim ng hiwa.

Modelo ng pag-access ng data na nakabatay sa papel

Kung mag-i-install ka ng Elasticsearch at hindi ito i-tune sa anumang paraan, ang access sa lahat ng mga index ay bukas sa lahat. Well, o ang mga maaaring gumamit ng curl. Upang maiwasan ito, ang Elasticsearch ay may isang modelo ng papel na magagamit simula sa isang Pangunahing subscription (na libre). Sa eskematiko, mukhang ganito:

Elastic sa ilalim ng lock at key: pagpapagana ng mga opsyon sa seguridad ng cluster ng Elasticsearch para sa pag-access mula sa loob at labas

Ano ang nasa larawan

  • Ang mga gumagamit ay lahat ng maaaring mag-log in gamit ang kanilang mga kredensyal.
  • Ang tungkulin ay isang hanay ng mga karapatan.
  • Ang mga karapatan ay isang hanay ng mga pribilehiyo.
  • Ang mga pribilehiyo ay mga pahintulot na magsulat, magbasa, magtanggal, atbp. (Buong listahan ng mga pribilehiyo)
  • Ang mga mapagkukunan ay mga index, dokumento, field, user, at iba pang mga entity ng storage (ang role model para sa ilang mapagkukunan ay available lang sa mga bayad na subscription).

Bilang default, mayroon ang Elasticsearch mga gumagamit ng kahon, kung saan sila ay nakakabit mga tungkulin sa kahon. Sa sandaling pinagana mo ang mga setting ng seguridad, maaari mong simulan kaagad ang paggamit ng mga ito.

Upang paganahin ang seguridad sa mga setting ng Elasticsearch, kailangan mong idagdag ito sa configuration file (bilang default ito ay elasticsearch/config/elasticsearch.yml) bagong linya:

xpack.security.enabled: true

Pagkatapos baguhin ang configuration file, ilunsad o i-restart ang Elasticsearch para magkabisa ang mga pagbabago. Ang susunod na hakbang ay ang pagtatalaga ng mga password sa mga gumagamit ng kahon. Gawin natin ito nang interactive gamit ang command sa ibaba:

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

Namin suriin:

[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

Maaari mong tapikin ang iyong sarili sa likod - ang mga setting sa gilid ng Elasticsearch ay nakumpleto. Ngayon ay oras na upang i-configure ang Kibana. Kung patakbuhin mo ito ngayon, lilitaw ang mga error, kaya mahalagang gumawa ng key store. Ginagawa ito sa dalawang utos (user kibana at ang password na ipinasok sa hakbang sa paggawa ng password sa Elasticsearch):

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

Kung tama ang lahat, magsisimulang humingi si Kibana ng login at password. Kasama sa Basic na subscription ang isang huwaran batay sa mga internal na user. Simula sa Gold, maaari mong ikonekta ang mga external na authentication system - LDAP, PKI, Active Directory at Single sign-on system.

Elastic sa ilalim ng lock at key: pagpapagana ng mga opsyon sa seguridad ng cluster ng Elasticsearch para sa pag-access mula sa loob at labas

Ang mga karapatan sa pag-access sa mga bagay sa loob ng Elasticsearch ay maaari ding limitado. Gayunpaman, upang gawin ang parehong para sa mga dokumento o field, kakailanganin mo ng isang bayad na subscription (ang luxury na ito ay nagsisimula sa antas ng Platinum). Available ang mga setting na ito sa interface ng Kibana o sa pamamagitan ng Security API. Maaari mong suriin sa pamamagitan ng pamilyar na menu ng Dev Tools:

Paglikha ng isang tungkulin

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

Paglikha ng isang gumagamit

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

Seguridad ng data sa loob ng isang Elasticsearch cluster

Kapag tumatakbo ang Elasticsearch sa isang cluster (na karaniwan), nagiging mahalaga ang mga setting ng seguridad sa loob ng cluster. Para sa ligtas na komunikasyon sa pagitan ng mga node, ginagamit ng Elasticsearch ang TLS protocol. Para mag-set up ng secure na pakikipag-ugnayan sa pagitan nila, kailangan mo ng certificate. Bumubuo kami ng certificate at pribadong key sa PEM format:

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

Pagkatapos isagawa ang utos sa itaas, sa direktoryo /../elasticsearch lalabas ang archive elastic-stack-ca.zip. Sa loob nito ay makikita mo ang isang sertipiko at isang pribadong key na may mga extension crt ΠΈ susi ayon sa pagkakabanggit. Maipapayo na ilagay ang mga ito sa isang nakabahaging mapagkukunan, na dapat ma-access mula sa lahat ng mga node sa cluster.

Ang bawat node ay nangangailangan na ngayon ng sarili nitong mga certificate at pribadong key batay sa mga nasa shared directory. Kapag isinasagawa ang utos, hihilingin sa iyo na magtakda ng isang password. Maaari kang magdagdag ng mga karagdagang opsyon -ip at -dns para sa kumpletong pag-verify ng mga nakikipag-ugnayan na node.

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

Bilang resulta ng pagpapatupad ng command, makakatanggap kami ng certificate at pribadong key sa PKCS#12 format, na protektado ng password. Ang natitira na lang ay ilipat ang nabuong file p12 sa direktoryo ng pagsasaayos:

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

Magdagdag ng password sa certificate sa format p12 sa keystore at truststore sa bawat 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

kilala na elasticsearch.yml Ang natitira na lang ay magdagdag ng mga linya na may data ng sertipiko:

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

Inilunsad namin ang lahat ng mga Elasticsearch node at isinasagawa kulutan. Kung nagawa nang tama ang lahat, ibabalik ang isang tugon na may ilang mga node:

[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

May isa pang pagpipilian sa seguridad - pag-filter ng IP address (magagamit sa mga subscription mula sa antas ng Gold). Binibigyang-daan kang lumikha ng mga puting listahan ng mga IP address kung saan ka pinapayagang mag-access ng mga node.

Pag-secure ng data sa labas ng isang Elasticsearch cluster

Sa labas ng cluster ay nangangahulugan ng pagkonekta sa mga panlabas na tool: Kibana, Logstash, Beats o iba pang mga panlabas na kliyente.

Elastic sa ilalim ng lock at key: pagpapagana ng mga opsyon sa seguridad ng cluster ng Elasticsearch para sa pag-access mula sa loob at labas

Upang i-configure ang suporta para sa https (sa halip na http), magdagdag ng mga bagong linya sa 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

kasi Pinoprotektahan ng password ang certificate, idagdag ito sa keystore at truststore sa bawat 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

Pagkatapos idagdag ang mga susi, ang mga Elasticsearch node ay handa nang kumonekta sa pamamagitan ng https. Ngayon ay maaari na silang ilunsad.

Ang susunod na hakbang ay lumikha ng isang susi upang ikonekta ang Kibana at idagdag ito sa pagsasaayos. Batay sa certificate na nasa shared directory na, bubuo kami ng certificate sa PEM format (PKCS#12 Kibana, Logstash at Beats ay hindi pa sumusuporta):

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

Ang natitira na lang ay i-unpack ang mga nilikhang key sa folder na may configuration ng Kibana:

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

Ang mga susi ay naroroon, kaya ang natitira na lang ay baguhin ang pagsasaayos ng Kibana upang simulan nitong gamitin ang mga ito. Sa kibana.yml configuration file, baguhin ang http sa https at magdagdag ng mga linya na may mga setting ng koneksyon sa SSL. Kino-configure ng huling tatlong linya ang secure na komunikasyon sa pagitan ng browser ng user at 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

Kaya, ang mga setting ay nakumpleto at ang pag-access sa data sa Elasticsearch cluster ay naka-encrypt.

Kung mayroon kang mga tanong tungkol sa mga kakayahan ng Elastic Stack sa libre o bayad na mga subscription, pagsubaybay sa mga gawain o paglikha ng isang SIEM system, mag-iwan ng kahilingan sa form ng feedback sa aming website.

Higit pa sa aming mga artikulo tungkol sa Elastic Stack on HabrΓ©:

Pag-unawa sa Machine Learning sa Elastic Stack (aka Elasticsearch, aka ELK)

Pagsusukat ng Elasticsearch

Pinagmulan: www.habr.com

Magdagdag ng komento