Elastic under lock and key: ενεργοποίηση επιλογών ασφαλείας συμπλέγματος Elasticsearch για πρόσβαση από μέσα και έξω

Elastic under lock and key: ενεργοποίηση επιλογών ασφαλείας συμπλέγματος Elasticsearch για πρόσβαση από μέσα και έξω

Το Elastic Stack είναι ένα πολύ γνωστό εργαλείο στην αγορά συστημάτων SIEM (για την ακρίβεια, όχι μόνο αυτά). Μπορεί να συλλέξει πολλά δεδομένα διαφορετικού μεγέθους, τόσο ευαίσθητα όσο και όχι πολύ ευαίσθητα. Δεν είναι απολύτως σωστό εάν δεν προστατεύεται η πρόσβαση στα ίδια τα στοιχεία Elastic Stack. Από προεπιλογή, όλα τα Elastic out-of-the-box στοιχεία (συλλέκτες Elasticsearch, Logstash, Kibana και Beats) εκτελούνται σε ανοιχτά πρωτόκολλα. Και στην ίδια την Kibana, ο έλεγχος ταυτότητας είναι απενεργοποιημένος. Όλες αυτές οι αλληλεπιδράσεις μπορούν να ασφαλιστούν και σε αυτό το άρθρο θα σας πούμε πώς να το κάνετε αυτό. Για ευκολία, η ιστορία χωρίστηκε σε 3 σημασιολογικά τμήματα:

  • Πρότυπο πρόσβασης σε δεδομένα
  • Ασφάλεια δεδομένων μέσα σε ένα σύμπλεγμα Elasticsearch
  • Ασφάλεια δεδομένων εκτός ενός συμπλέγματος Elasticsearch

Λεπτομέρειες κάτω από το κόψιμο.

Πρότυπο πρόσβασης σε δεδομένα

Εάν εγκαταστήσετε το Elasticsearch και δεν το συντονίσετε με κανέναν τρόπο, η πρόσβαση σε όλα τα ευρετήρια θα είναι ανοιχτή σε όλους. Λοιπόν, ή αυτοί που μπορούν να χρησιμοποιήσουν μπούκλα. Για να αποφευχθεί αυτό, το Elasticsearch έχει ένα πρότυπο που είναι διαθέσιμο ξεκινώντας από μια συνδρομή Basic (η οποία είναι δωρεάν). Σχηματικά μοιάζει κάπως έτσι:

Elastic under lock and key: ενεργοποίηση επιλογών ασφαλείας συμπλέγματος 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. Εάν το εκτελέσετε τώρα, θα εμφανιστούν σφάλματα, επομένως είναι σημαντικό να δημιουργήσετε ένα κατάστημα κλειδιών. Αυτό γίνεται με δύο εντολές (χρήστης κιμπάνα και τον κωδικό πρόσβασης που εισήχθη στο βήμα δημιουργίας κωδικού πρόσβασης στο Elasticsearch):

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

Εάν όλα είναι σωστά, η Kibana θα αρχίσει να ζητά login και κωδικό πρόσβασης. Η συνδρομή Basic περιλαμβάνει ένα πρότυπο που βασίζεται σε εσωτερικούς χρήστες. Ξεκινώντας με το Gold, μπορείτε να συνδέσετε εξωτερικά συστήματα ελέγχου ταυτότητας - συστήματα LDAP, PKI, Active Directory και Single sign-on.

Elastic under lock and key: ενεργοποίηση επιλογών ασφαλείας συμπλέγματος Elasticsearch για πρόσβαση από μέσα και έξω

Τα δικαιώματα πρόσβασης σε αντικείμενα εντός του Elasticsearch μπορούν επίσης να περιοριστούν. Είναι αλήθεια ότι για να κάνετε το ίδιο για έγγραφα ή πεδία, θα χρειαστείτε μια συνδρομή επί πληρωμή (αυτή η πολυτέλεια ξεκινά με το επίπεδο Platinum). Αυτές οι ρυθμίσεις είναι διαθέσιμες στη διεπαφή Kibana ή μέσω API ασφαλείας. Μπορείτε να ελέγξετε μέσω του ήδη γνωστού μενού Dev Tools:

Δημιουργήστε έναν ρόλο

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 θα εμφανιστεί το αρχείο elastic-stack-ca.zip. Μέσα σε αυτό θα βρείτε ένα πιστοποιητικό και ένα ιδιωτικό κλειδί με επεκτάσεις crt и κλειδί αντίστοιχα. Συνιστάται να τα τοποθετήσετε σε έναν κοινόχρηστο πόρο, στον οποίο θα πρέπει να έχετε πρόσβαση από όλους τους κόμβους του συμπλέγματος.

Κάθε κόμβος χρειάζεται πλέον τα δικά του πιστοποιητικά και ιδιωτικά κλειδιά με βάση αυτά στον κοινόχρηστο κατάλογο. Κατά την εκτέλεση της εντολής, θα σας ζητηθεί να ορίσετε έναν κωδικό πρόσβασης. Μπορείτε να προσθέσετε επιπλέον επιλογές -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 (διατίθεται σε συνδρομές από το επίπεδο Gold). Σας επιτρέπει να δημιουργείτε λευκές λίστες διευθύνσεων IP από τις οποίες επιτρέπεται η πρόσβαση σε κόμβους.

Ασφάλεια δεδομένων εκτός ενός συμπλέγματος Elasticsearch

Εκτός του συμπλέγματος σημαίνει σύνδεση εξωτερικών οργάνων: Kibana, Logstash, Beats ή άλλους εξωτερικούς πελάτες.

Elastic under lock and key: ενεργοποίηση επιλογών ασφαλείας συμπλέγματος Elasticsearch για πρόσβαση από μέσα και έξω

Για να διαμορφώσετε την υποστήριξη για 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

Επειδή Το πιστοποιητικό προστατεύεται με κωδικό πρόσβασης, προσθέστε το στον χώρο αποθήκευσης κλειδιών και στην αποθήκευση αξιοπιστίας σε κάθε κόμβο:

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

Sizing Elasticsearch

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο