Qulf va kalit ostida elastik: ichkaridan va tashqaridan kirish uchun Elasticsearch klasterining xavfsizlik imkoniyatlarini yoqish

Qulf va kalit ostida elastik: ichkaridan va tashqaridan kirish uchun Elasticsearch klasterining xavfsizlik imkoniyatlarini yoqish

Elastic Stack - bu SIEM tizimlari bozorida taniqli vosita (aslida nafaqat ular). U juda ko'p turli o'lchamdagi ma'lumotlarni to'plashi mumkin, ham nozik, ham juda sezgir bo'lmagan. Elastik stack elementlariga kirishning o'zi himoyalanmagan bo'lsa, bu mutlaqo to'g'ri emas. Odatiy bo'lib, barcha Elastik elementlar (Elasticsearch, Logstash, Kibana va Beats kollektorlari) ochiq protokollarda ishlaydi. Va Kibananing o'zida autentifikatsiya o'chirilgan. Ushbu o'zaro ta'sirlarning barchasi xavfsiz bo'lishi mumkin va ushbu maqolada buni qanday qilishni sizga aytamiz. Qulaylik uchun biz hikoyani 3 ta semantik blokga ajratdik:

  • Rolga asoslangan ma'lumotlarga kirish modeli
  • Elasticsearch klasterida ma'lumotlar xavfsizligi
  • Elasticsearch klasteridan tashqarida ma'lumotlarni himoya qilish

Kesish ostidagi tafsilotlar.

Rolga asoslangan ma'lumotlarga kirish modeli

Agar siz Elasticsearch-ni o'rnatsangiz va uni hech qanday tarzda sozlamasangiz, barcha indekslarga kirish hamma uchun ochiq bo'ladi. Xo'sh, yoki curldan foydalanishi mumkin bo'lganlar. Bunga yo'l qo'ymaslik uchun Elasticsearch asosiy obunadan (bu bepul) boshlab mavjud bo'lgan namunaga ega. Sxematik tarzda u shunday ko'rinadi:

Qulf va kalit ostida elastik: ichkaridan va tashqaridan kirish uchun Elasticsearch klasterining xavfsizlik imkoniyatlarini yoqish

Rasmda nima bor

  • Foydalanuvchilar hisob ma'lumotlari yordamida tizimga kirishi mumkin bo'lgan har bir kishidir.
  • Rol - bu huquqlar to'plami.
  • Huquqlar - bu imtiyozlar to'plami.
  • Imtiyozlar - yozish, o'qish, o'chirish va h.k. uchun ruxsatlar. (Imtiyozlarning to'liq ro'yxati)
  • Resurslar indekslar, hujjatlar, maydonlar, foydalanuvchilar va boshqa saqlash ob'ektlari (ba'zi manbalar uchun namuna faqat pullik obunalarda mavjud).

Odatiy bo'lib Elasticsearch mavjud quti foydalanuvchilari, ular biriktirilgan quti rollari. Xavfsizlik sozlamalarini yoqsangiz, ulardan darhol foydalanishni boshlashingiz mumkin.

Elasticsearch sozlamalarida xavfsizlikni yoqish uchun uni konfiguratsiya fayliga qo'shishingiz kerak (sukut bo'yicha bu elasticsearch/config/elasticsearch.yml) yangi qator:

xpack.security.enabled: true

Konfiguratsiya faylini o'zgartirgandan so'ng, o'zgarishlar kuchga kirishi uchun Elasticsearch-ni ishga tushiring yoki qayta ishga tushiring. Keyingi qadam - foydalanuvchilarga parollar belgilash. Buni quyidagi buyruq yordamida interaktiv tarzda bajaramiz:

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

Biz tekshiramiz:

[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

O'zingizni orqa tomondan silashingiz mumkin - Elasticsearch tomonidagi sozlamalar tugallandi. Endi Kibana-ni sozlash vaqti keldi. Agar siz uni hozir ishga tushirsangiz, xatolar paydo bo'ladi, shuning uchun kalit do'konini yaratish muhimdir. Bu ikkita buyruqda amalga oshiriladi (user kibana va Elasticsearch-da parol yaratish bosqichida kiritilgan parol):

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

Agar hamma narsa to'g'ri bo'lsa, Kibana login va parolni so'ray boshlaydi. Asosiy obuna ichki foydalanuvchilarga asoslangan namunani o'z ichiga oladi. Gold bilan boshlab, siz tashqi autentifikatsiya tizimlarini - LDAP, PKI, Active Directory va yagona tizimga kirish tizimlarini ulashingiz mumkin.

Qulf va kalit ostida elastik: ichkaridan va tashqaridan kirish uchun Elasticsearch klasterining xavfsizlik imkoniyatlarini yoqish

Elasticsearch ichidagi ob'ektlarga kirish huquqlari ham cheklanishi mumkin. Biroq, hujjatlar yoki maydonlar uchun xuddi shunday qilish uchun sizga pullik obuna kerak bo'ladi (bu hashamat Platinum darajasidan boshlanadi). Ushbu sozlamalar Kibana interfeysida yoki orqali mavjud Xavfsizlik API. Siz allaqachon tanish bo'lgan Dev Tools menyusi orqali tekshirishingiz mumkin:

Rol yaratish

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

Foydalanuvchi yaratish

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

Elasticsearch klasterida ma'lumotlar xavfsizligi

Elasticsearch klasterda ishlaganda (bu keng tarqalgan), klaster ichidagi xavfsizlik sozlamalari muhim bo'ladi. Tugunlar orasidagi xavfsiz aloqa uchun Elasticsearch TLS protokolidan foydalanadi. Ular o'rtasida xavfsiz o'zaro aloqani o'rnatish uchun sizga sertifikat kerak. PEM formatida sertifikat va shaxsiy kalit yaratamiz:

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

Yuqoridagi buyruqni bajargandan so'ng, katalogda /../elasticsearch arxiv paydo bo'ladi elastic-stack-ca.zip. Uning ichida siz sertifikat va kengaytmali shaxsiy kalitni topasiz crt ΠΈ kalit mos ravishda. Ularni klasterdagi barcha tugunlardan foydalanish mumkin bo'lgan umumiy resursga qo'yish tavsiya etiladi.

Endi har bir tugunga umumiy katalogdagilarga asoslangan shaxsiy sertifikatlar va shaxsiy kalitlar kerak. Buyruqni bajarayotganda sizdan parol o'rnatish so'raladi. O'zaro ta'sir qiluvchi tugunlarni to'liq tekshirish uchun qo'shimcha -ip va -dns opsiyalarini qo'shishingiz mumkin.

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

Buyruqni bajarish natijasida biz parol bilan himoyalangan PKCS#12 formatidagi sertifikat va shaxsiy kalitni olamiz. Faqat yaratilgan faylni ko'chirish qoladi p12 konfiguratsiya katalogiga:

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

Formatda sertifikatga parol qo'shing p12 har bir tugundagi kalit do'konida va ishonchli do'konda:

[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

Allaqachon ma'lum elasticsearch.yml Faqat sertifikat ma'lumotlari bilan qatorlarni qo'shish qoladi:

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

Biz barcha Elasticsearch tugunlarini ishga tushiramiz va bajaramiz kΔ±vrΔ±m. Agar hamma narsa to'g'ri bajarilgan bo'lsa, bir nechta tugunli javob qaytariladi:

[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

Yana bir xavfsizlik varianti mavjud - IP-manzilni filtrlash (Oltin darajadagi obunalarda mavjud). Tugunlarga kirishga ruxsat berilgan IP manzillarining oq ro'yxatlarini yaratishga imkon beradi.

Elasticsearch klasteridan tashqarida ma'lumotlarni himoya qilish

Klasterdan tashqari tashqi vositalarni ulash demakdir: Kibana, Logstash, Beats yoki boshqa tashqi mijozlar.

Qulf va kalit ostida elastik: ichkaridan va tashqaridan kirish uchun Elasticsearch klasterining xavfsizlik imkoniyatlarini yoqish

https qo'llab-quvvatlashni sozlash uchun (http o'rniga) elasticsearch.yml saytiga yangi qatorlarni qo'shing:

xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.keystore.path: elastic-certificates.p12
xpack.security.http.ssl.truststore.path: elastic-certificates.p12

Chunki Sertifikat parol bilan himoyalangan, uni har bir tugundagi kalit do'koniga va ishonchli do'konga qo'shing:

[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

Kalitlarni qo'shgandan so'ng, Elasticsearch tugunlari https orqali ulanishga tayyor. Endi ular ishga tushirilishi mumkin.

Keyingi qadam Kibana-ni ulash uchun kalit yaratish va uni konfiguratsiyaga qo'shishdir. Umumiy katalogda allaqachon joylashgan sertifikat asosida biz PEM formatida sertifikat yaratamiz (PKCS#12 Kibana, Logstash va Beats hali qo'llab-quvvatlamaydi):

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

Faqatgina yaratilgan kalitlarni Kibana konfiguratsiyasi bilan jildga ochish qoladi:

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

Kalitlar mavjud, shuning uchun faqat Kibana konfiguratsiyasini o'zgartirish qoladi, shunda u ulardan foydalanishni boshlaydi. Kibana.yml konfiguratsiya faylida http-ni https-ga o'zgartiring va SSL ulanish sozlamalari bilan qatorlarni qo'shing. Oxirgi uchta satr foydalanuvchi brauzeri va Kibana o'rtasidagi xavfsiz aloqani sozlaydi.

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

Shunday qilib, sozlamalar tugallandi va Elasticsearch klasteridagi ma'lumotlarga kirish shifrlangan.

Bepul yoki pullik obunalarda Elastic Stack imkoniyatlari, monitoring vazifalari yoki SIEM tizimini yaratish haqida savollaringiz bo'lsa, quyidagi manzilga so'rov qoldiring. fikr-mulohaza shakli bizning veb-saytimizda.

HabrΓ©-dagi Elastik stack haqidagi boshqa maqolalarimiz:

Elastik stackda mashinani o'rganishni tushunish (aka Elasticsearch, aka ELK)

Elasticsearch o'lchamlari

Manba: www.habr.com

a Izoh qo'shish