قفل مرن: تمكين خيارات أمان مجموعة البحث المرن للوصول الداخلي والخارجي

قفل مرن: تمكين خيارات أمان مجموعة البحث المرن للوصول الداخلي والخارجي

Elastic Stack هي أداة معروفة في سوق أنظمة SIEM (في الواقع ، ليس فقط هم). يمكنه جمع الكثير من البيانات ذات الأحجام المختلفة ، الحساسة وغير الحساسة للغاية. ليس صحيحًا تمامًا إذا لم يكن الوصول إلى عناصر Elastic Stack نفسها محميًا. بشكل افتراضي ، تعمل جميع العناصر المطاطية (Elasticsearch و Logstash و Kibana و Beats) على بروتوكولات مفتوحة. وفي Kibana نفسها ، يتم تعطيل المصادقة. يمكن تأمين كل هذه التفاعلات ، وسنخبرك في هذه المقالة بكيفية القيام بذلك. للراحة ، تم تقسيم القصة إلى 3 كتل دلالية:

  • نموذج يحتذى به في الوصول إلى البيانات
  • أمن البيانات داخل مجموعة Elasticsearch
  • أمان البيانات خارج مجموعة Elasticsearch

التفاصيل تحت الخفض.

نموذج يحتذى به في الوصول إلى البيانات

إذا قمت بتثبيت Elasticsearch وقمت بضبطه بأي شكل من الأشكال ، فسيكون الوصول إلى جميع الفهارس مفتوحًا للجميع. حسنًا ، أو أولئك الذين يمكنهم استخدام الضفيرة. لتجنب ذلك ، لدى Elasticsearch نموذج يحتذى به متاح بدءًا من اشتراك المستوى الأساسي (وهو مجاني). يبدو من الناحية التخطيطية كما يلي:

قفل مرن: تمكين خيارات أمان مجموعة البحث المرن للوصول الداخلي والخارجي

ما هو في الصورة

  • المستخدمون هم جميعًا الذين يمكنهم تسجيل الدخول باستخدام بيانات الاعتماد.
  • الدور هو مجموعة من الحقوق.
  • الحقوق هي مجموعة من الامتيازات.
  • الامتيازات هي أذونات الكتابة والقراءة والحذف وما إلى ذلك. (القائمة الكاملة للامتيازات)
  • الموارد هي الفهارس والمستندات والحقول والمستخدمون وكيانات التخزين الأخرى (نموذج الدور لبعض الموارد متاح فقط في الاشتراكات المدفوعة).

يكون Elasticsearch افتراضيًا المستخدمين في محاصرالتي تعلق عليها أدوار الصندوق. بعد تمكين إعدادات الأمان ، يمكنك البدء في استخدامها على الفور.

لتمكين الأمان في إعدادات Elasticsearch ، تحتاج إلى إضافته إلى ملف التكوين (افتراضيًا هو elasticsearch / config / elasticsearch.yml) خط جديد:

xpack.security.enabled: true

بعد تغيير ملف التكوين ، ابدأ Elasticsearch أو أعد تشغيله لتصبح التغييرات سارية المفعول. الخطوة التالية هي تعيين كلمات مرور للمستخدمين المحاصرين. لنفعل ذلك بشكل تفاعلي باستخدام الأمر أدناه:

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

نتحقق من:

[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

يمكنك أن تصفع نفسك على كتفك - تم الانتهاء من الإعدادات الموجودة على جانب Elasticsearch. حان الآن دور إعداد Kibana. إذا قمت بتشغيله الآن ، فسوف تسقط الأخطاء ، لذلك من المهم إنشاء ملف تخزين المفاتيح. يتم ذلك في أمرين (user كيبانا وكلمة المرور التي تم إدخالها في خطوة إنشاء كلمات المرور في Elasticsearch):

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

إذا كان كل شيء صحيحًا ، سيبدأ Kibana في طلب اسم مستخدم وكلمة مرور. في الاشتراك الأساسي ، يتوفر نموذج يحتذى به يعتمد على المستخدمين الداخليين. بدءًا من Gold ، يمكنك توصيل أنظمة المصادقة الخارجية - LDAP و PKI و Active Directory وأنظمة تسجيل الدخول الأحادي.

قفل مرن: تمكين خيارات أمان مجموعة البحث المرن للوصول الداخلي والخارجي

يمكن أيضًا تقييد حقوق الوصول إلى الكائنات الموجودة داخل Elasticsearch. صحيح ، لفعل الشيء نفسه للمستندات أو الحقول ، ستحتاج إلى اشتراك مدفوع (تبدأ هذه الرفاهية بالمستوى البلاتيني). هذه الإعدادات متاحة في واجهة Kibana أو عبر واجهة برمجة تطبيقات الأمان. يمكنك التحقق من قائمة أدوات التطوير المألوفة بالفعل:

أنشئ دورًا

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

إنشاء المستخدم

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

عند تشغيل Elasticsearch في مجموعة (وهو أمر شائع) ، تصبح إعدادات الأمان داخل المجموعة مهمة. للتواصل الآمن بين العقد ، يستخدم Elasticsearch بروتوكول TLS. لإعداد اتصال آمن بينهما ، تحتاج إلى شهادة. نقوم بإنشاء شهادة ومفتاح خاص بتنسيق PEM:

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

بعد تنفيذ الأمر أعلاه ، في الدليل /../elasticsearch سيظهر الأرشيف الكومة المرنة ca.zip. ستجد بداخله شهادة ومفتاح خاص به امتدادات إنبوب أشعة القطب السالب и مفتاح على التوالى. من المستحسن وضعها على مورد مشترك ، حيث يجب أن يكون هناك وصول من جميع عقد الكتلة.

تحتاج كل عقدة الآن إلى شهاداتها ومفاتيحها الخاصة بناءً على تلك الموجودة في الدليل المشترك. عند تنفيذ الأمر ، سيُطلب منك تعيين كلمة مرور. يمكن إضافة خيارات إضافية -ip و -dns للتحقق الكامل من عقد الاتصال.

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

نتيجة لتنفيذ الأمر ، سوف نتلقى شهادة ومفتاح خاص بتنسيق PKCS # 12 ، محميين بكلمة مرور. يبقى لنقل الملف الذي تم إنشاؤه p12 إلى دليل التكوين:

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

أضف كلمة مرور للشهادة بالتنسيق p12 في keystore و truststore على كل عقدة:

[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

في المعروف بالفعل elasticsearch.yml يبقى لإضافة سطور ببيانات حول الشهادة:

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

نبدأ جميع عقد Elasticsearch وننفذها حليقة. إذا تم إجراء كل شيء بشكل صحيح ، فسيتم إرجاع استجابة بعدة عقد:

[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

هناك خيار أمان آخر - تصفية عنوان IP (متوفر في الاشتراكات من المستوى الذهبي). يسمح لك بإنشاء قوائم بيضاء لعناوين IP التي يُسمح للعقد بالوصول إليها.

أمان البيانات خارج مجموعة Elasticsearch

خارج المجموعة يعني توصيل الأدوات الخارجية: Kibana أو Logstash أو Beats أو عملاء خارجيين آخرين.

قفل مرن: تمكين خيارات أمان مجموعة البحث المرن للوصول الداخلي والخارجي

لتكوين دعم https (بدلاً من http) ، أضف سطورًا جديدة إلى 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

لأن الشهادة محمية بكلمة مرور ، دعنا نضيفها إلى keystore و truststore في كل عقدة:

[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

بعد إضافة المفاتيح ، تصبح عقد Elasticsearch جاهزة للاتصال عبر https. الآن يمكن إطلاقها.

الخطوة التالية هي إنشاء مفتاح اتصال Kibana وإضافته إلى التكوين. استنادًا إلى الشهادة الموجودة بالفعل في الدليل المشترك ، سننشئ شهادة بتنسيق PEM (لا يدعم PKCS # 12 Kibana و Logstash و Beats حتى الآن):

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

يبقى فك ضغط المفاتيح التي تم إنشاؤها في مجلد تكوين Kibana:

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

المفاتيح موجودة ، لذلك يبقى تغيير تكوين Kibana بحيث يبدأ في استخدامها. في ملف تكوين kibana.yml ، قم بتغيير http إلى https وإضافة خطوط بإعدادات اتصال SSL. أقامت الأسطر الثلاثة الأخيرة تفاعلًا آمنًا بين متصفح المستخدم و 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

وبالتالي ، يتم إجراء الإعدادات ويتم تشفير الوصول إلى البيانات في مجموعة Elasticsearch.

إذا كانت لديك أسئلة حول ميزات Elastic Stack في الاشتراكات المجانية أو المدفوعة ، أو مهام المراقبة أو إنشاء نظام SIEM ، فاترك طلبًا في نموذج الملاحظات على موقعنا

المزيد من مقالاتنا حول Elastic Stack على Habré:

فهم التعلم الآلي في Elastic Stack (المعروف أيضًا باسم Elasticsearch ، المعروف أيضًا باسم ELK)

تحجيم Elasticsearch

المصدر: www.habr.com

إضافة تعليق