Kατηγορίες SSL/TLS παραμετροποίησης στο Elasticsearch
Εισαγωγή
Η παραμετροποίηση του SSL/TLS πρωτοκόλλου δεν είναι απαραίτητα το πιο απλό πράγμα που έχει να κάνει ένας διαχειριστής που στήνει για πρώτη φορά ένα elasticsearch cluster. Με την αλλαγή την οποία κάναμε πρόσφατα, όπου η κύρια λειτουργικότητα ασφάλειας (και κατά συνέπεια η υποστήριξη για SSL/TLS ) είναι διαθέσιμη δωρεάν με την βασική άδεια λειτουργίας (basic license), παρατηρούμε ότι όλο και περισσότεροι νέοι χρήστες σπεύδουν να χρησιμοποιήσουν τα νέα αυτά χαρακτηριστικά, θα ήταν χρήσιμο να συζητήσουμε μερικά πράγματα στα πλαίσια του advent calendar. Το παρόν υλικό δεν προσπαθεί σε καμιά περίπτωση να αντικαταστήσει την εκτενή τεκμηρίωση που προσφέρουμε, για παράδειγμα εδω, εδώ και εδώ, αλλά να λειτουργήσει συμπληρωματικά, αναλύοντας κάποια κομμάτια τα οποία έχουμε παρατηρήσει ότι μπορεί να δυσκολεύουν μια μερίδα χρηστών.
Κατηγορίες SSL/TLS παραμετροποίησης
Μπορούμε να πούμε ότι τα ονόματα των παραμέτρων που χρησιμοποιούμε για την ρύθμιση του SSL/TLS έχουν 2 μέρη, το πρόθεμα και το επίθεμα. Για παράδειγμα, η παράμετρος xpack.security.http.ssl.key
έχει το πρόθεμα xpack.security.http.
που μας δείχνει που είναι εφαρμόσιμη η παράμετρος αυτή και το επίθεμα ssl.key
που μας δείχνει τι ακριβώς ρυθμίζει. Τα επιθέματα είναι κοινά, ανεξάρτητα από το σε ποιά ακριβώς κομμάτια της παραμετροποίησης του elasticsearch εφαρμόζονται. Το καθένα αντιστοιχεί σε συνήθως γνωστές έννοιες για το SSL/TLS, όπως ιδιωτικά κλειδιά (ssl.key
), ψηφιακά πιστοποιητικά (ssl.certificate
), κωδικός ιδιωτικού κλειδιού ( ssl.secure_key_passphrase
) κ.ο.κ, και επεξηγούνται λεπτομερώς στην αντίστοιχη σελίδα της τεκμηρίωσης του elasticsearch.
Στη συγκεκριμένη ανάρτηση, θα ασχοληθούμε αποκλειστικά με τα προθέματα των ρυθμίσεων. Σκοπός μας είναι να παρουσιάσουμε όλες τις κατηγορίες προθεμάτων, και να αναλύσουμε ποιο κομμάτι της παραμετροποίησης του elasticsearch αφορούν, καθώς και ποιο κομμάτι της λειτουργικότητας επηρεάζουν και πως.
xpack.security.http.*
Οι παράμετροι αυτές ρυθμίζουν την συμπεριφορά για το SSL/TLS στη REST διεπαφή του elasticsearch, αυτό που αναφέρεται στην τεκμηρίωση ως HTTP layer. Εδώ, για παράδειγμα ρυθμίζουμε το κλειδί και το ψηφιακό πιστοποιητικό που θα παρουσιάζει το elasticsearch στον περιηγητή(browser) ή πελάτη(client) σας όταν συνδέεται για να κάνει οποιαδήποτε αίτηση στην REST διεπαφή. Είναι σημαντικό να είναι παραμετροποιημένη σωστά αυτή η κατηγορία, καθώς εκτός απο τον περιηγητή των χρηστών, όλα τα υπόλοιπα κομμάτια του Elastic Stack, όπως το Kibana, το Logstash και όλα τα Beats, χρησιμοποιούν αυτή τη REST διεπαφή στο HTTP layer ώστε να επικοινωνήσουν με το elasticsearch. Μια λάθος παραμετροποίηση σε αυτές τις ρυθμίσεις μπορεί να καταστήσει την REST διεπαφή μη-προσβάσιμη και έτσι να μην μπορείτε πλέον να αποθηκεύσετε οποιαδήποτε δεδομένα στο elasticsearch.
xpack.security.transport.*
Οι παράμετροι αυτές ρυθμίζουν την συμπεριφορά για το SSL/TLS στο transport layer του elasticsearch, το οποίο χρησιμοποιούν τα nodes ενός elasticsearch cluster για να επικοινωνήσουν μεταξύ τους. Τα nodes είναι ρυθμισμένα έτσι ώστε να αυθεντικοποιούνται το ένα στο άλλο (TLS mutual authenticaion), έτσι εδώ ρυθμίζουμε και το ιδιωτικό κλειδί (ssl.key
) και το ψηφιακό πιστοποιητικό (ssl.certificate
) που παρουσιάζουν τα nodes όταν κάποιο άλλο node επιχειρεί να επικοινωνήσει μαζί τους, αλλά και το ιδιωτικό κλειδί και το ψηφιακό πιστοποιητικό που χρησιμοποιούν τα nodes όταν ξεκινούν την επικοινωνία τα ίδια με κάποιο άλλο node. Η παραμετροποίηση της κατηγορίας αυτής είναι πολύ σημαντική για δύο λόγους:
- Αν η παραμετροποίηση είναι λανθασμένη, τα nodes δεν θα μπορέσουν να επικοινωνήσουν μεταξύ τους και έτσι δε θα μπορέσουν ποτέ να σχηματίσουν ένα cluster.
- Αν η παραμετροποίηση είναι υπερβολικά επιεικής, για παράδειγμα αν τα nodes είναι ρυθμισμένα να εμπιστεύονται ψηφιακά πιστοποιητικά από πολλές αρχές πιστοποίησης ,ή να μην ελέγχουν ότι το όνομα του node που συνδέονται αντιστοιχεί με το όνομα που περιέχει το ψηφιακό πιστοποιητικό, υπάρχει ο κίνδυνος κακόβουλα nodes να συνδεθούν στο cluster, αποκτώντας έτσι πρόσβαση στα δεδομένα που είναι αποθηκευμένα στα υπάρχοντα indices.
xpack.http.*
Οι παράμετροι αυτές επηρεάζουν την συμπεριφορά για το SSL/TLS για τις εξερχόμενες συνδέσεις που κάνει το elasticsearch χρησιμοποιώντας την Apache HTTP Client Java βιβλιοθήκη. Οι εξερχόμενες συνδέσεις αυτές αφορούν συνήθως συνδέσεις προς webhook URL του Slack ή του PagerDuty ή συνδέσεις προς reporting URLs σε κάποιο instance του Kibana στα πλαίσια δημιουργιας μιάς αναφοράς για τη λειτουργικότητα του reporting. Οι default ρυθμίσεις είναι συνήθως επαρκείς καθώς χρησιμοποιούμε τις ρυθμίσεις του λειτουργικού συστήματος ή του JVM για το ποιές αρχές πιστοποίησης εμπιστευόμαστε, και τα webhook endpoints του Slack, PagerDuty κ.α. χρησιμοποιούν ψηφιακά πιστοποιητικά τα οποία είναι υπογεγραμμένα απο κάποια από αυτές. Κάποιες φορές όμως χρειάζεται να ρυθμίσουμε τις παραμέτρους εμπιστοσύνης για το SSL/TLS έτσι ώστε να μπορεί ένα Watcher action να συνδεθεί σε ένα webhook ενός εταιρικού service ή σε ένα Kibana instance που χρησιμοποιούν είτε self-signed ψηφιακά πιστοποιητικά, είτε πιστοποιητικά υπογεγραμμένα από κάποια εταιρική αρχή πιστοποίησης.
xpack.ssl.*
(Αφορά εκδόσεις μόνο πριν την 7.0)
Οι παράμετροι αυτές αποτελούν global defaults. Αν κάποια κατηγορία απο αυτές που αναφέραμε παραπάνω δεν έχει τη δική της παραμετροποίηση, τότε κληρονομεί τις ρυθμίσεις της κατηγορίας αυτής. Μπορεί να είναι βολικό και χρήσιμο για συγκεκριμένες περιπτώσεις, αλλά μπορεί να προκαλέσει λάθος παραμετροποιήσεις που να οδηγούν σε απρόβλεπτες συμπεριφορές, και γι' αυτό καλό είναι να χρησιμοποιούνται μόνο όταν καλύπτουν κάποια συγκεκριμένη ανάγκη. Από την έκδοση 7.0 και μετά δεν είναι καν διαθέσιμη αυτή η κατηγορία, και οποιαδήποτε από τις άλλες χρειαζόμαστε, πρέπει να παραμετροποιηθεί συγκεκριμένα και εξ ολοκλήρου.
xpack.security.authc.realms.saml.<realm_name>.*
Οι παράμετροι αυτές ρυθμίζουν την συμπεριφορά για το SSL/TLS όσον αφορά την λειτουργικότητα για αυθεντικοποίηση μέσω του πρωτοκόλλου SAML. Συγκεκριμένα, αφορούν τις εξερχόμενες συνδέσεις που κάνει το elasticsearch προς το URL που είναι ρυθμισμένο ώς idp.metadata.path
έτσι ώστε να διαβάσει τα metadata του παρόχου ταυτότητας που θα χρησιμοποιηθεί για την ταυτοποίηση. Οι default ρυθμίσεις είναι συνήθως αρκετές, αλλά εάν ο πάροχος ταυτότητας σας χρησιμοποιεί κάποιο πιστοποιητικό που είναι υπογεγραμμένο απο εταιρική αρχή πιστοποίησης, ίσως χρειαστεί να κάνετε τις απαραίτητες ρυθμίσεις εδώ έτσι ώστε το elasticsearch να μπορεί να εμπιστευτεί το πιστοποιητικό αυτό.
xpack.security.authc.realms.oidc.<realm_name>.*
Οι παράμετροι στην κατηγορία αυτή ρυθμίζουν την συμπεριφορά για το SSL/TLS που χρησιμοποιείται για την αυθεντικοποίηση μέσω του πρωτοκόλλου OpenID Connect. Όπως και στο SAML, αφορούν το ποιες αρχές πιστοποίησης εμπιστεύεται το elasticsearch όταν εξετάζει ψηφιακά πιστοποιητικά στις εξερχόμενες συνδέσεις που κάνει κατά τη διάρκεια της αυθεντικοποίησης του χρήστη και συγκεκριμένα:
- Στις συνδέσεις που κάνει στο Token Endpoint του παρόχου ταυτότητας για να ανταλλάξει τον κωδικό (code) με τα αντίστοιχα access token και ID Token κατά τη διάρκεια του Authorization Code Flow
- Στις συνδέσεις που κάνει στο Userinfo Endpoint του παρόχου ταυτότητας για να συλλέξει επιπλέον στοιχεία του χρήστη κατα τη διάρκεια είτε του Authorization Code Flow ή του Implicit Flow.
Όπως και παραπάνω, οι default ρυθμίσεις είναι συνήθως επαρκείς.
xpack.security.authc.realms.ldap.<realm_name>.*
Στην κατηγορία αυτή ρυθμίζουμε την συμπεριφορά του elasticsearch όσον αφορά το SSL/TLS όταν χρησιμοποιούμε έναν εξωτερικό LDAP διακομιστή για την αυθεντικοποίηση των χρηστών μας. Συγκεκριμένα, όταν ο LDAP διακομιστής είναι ρυθμισμένος για συνδέσεις μόνο μεσω LDAPS (LDAP over SSL) πρωτοκόλλου, στην κατηγορία αυτή μπορούμε να ρυθμίσουμε ποιες αρχές πιστοποίησης θα πρέπει να εμπιστεύεται το elasticsearch.
xpack.security.authc.realms.active_directory.<realm_name>.*
Στην κατηγορία αυτή ρυθμίζουμε την συμπεριφορά του elasticsearch όσον αφορά το SSL/TLS όταν χρησιμοποιούμε ένα εξωτερικό Αctive Directory Domain Controller για την αυθεντικοποίηση των χρηστών μας. Όταν ο Domain Controller είναι ρυθμισμένος για συνδέσεις μόνο μεσω LDAPS (LDAP over SSL) πρωτοκόλλου, στην κατηγορία αυτή μπορούμε να ρυθμίσουμε ποιες αρχές πιστοποίησης θα πρέπει να εμπιστεύεται το elasticsearch. Σε συγκεκριμένες (σπανιότερες) περιπτώσεις, ο Domain Controller μπορεί να είναι ρυθμισμένος ώστε να είναι αναγκαία και η αυθεντικοποίηση του client που συνδέεται μέσω LDAPS (TLS mutual authentication), οπότε εδώ μπορούμε να ρυθμίσουμε το ιδιωτικό κλειδί και το ψηφιακό πιστοποιητικό που θα χρησιμοποιήσει το elasticsearch για τις ανάγκες της ταυτοποίησης αυτής.
xpack.monitoring.exporters.{name}.*
Όταν χρησιμοποιείται η λειτουργικότητα του Xpack Monitoring, στην κατηγορία αυτή ρυθμίζουμε την συμπεριφορά του elasticsearch όσον αφορά τις SSL/TLS συνδέσεις που κάνει προς τον απομακρυσμένο monitoring cluster έτσι ώστε να αποθηκεύσει τα απαραίτητα δεδομένα. Για παράδειγμα, εάν το απομακρυσμένο cluster έχει παραμετροποιηθεί να χρησιμοποιεί (μέσω των αντίστοιχων ρυθμίσεων στην κατηγορία xpack.security.http.*
) ενα ψηφιακό πιστοποιητικό που είναι υπογεγραμμένο απο μια συγκεκριμένη αρχή πιστοποίησης, θα πρέπει να ρυθμίσουμε το τοπικό cluster να εμπιστεύεται την αρχή πιστοποίησης αυτή με την αντίστοιχη ρύθμιση στην κατηγορία.
reindex.*
Όταν χρησιμοποιείται η λειτουργικότητα του reindex απο απομακρυσμένο cluster, για παράδειγμα κατα τη διάρκεια της αναβάθμισης ενός cluster σε μια νέα έκδοση του elasticsearch, στην κατηγορία αυτή μπορούμε να ρυθμίσουμε την συμπεριφορά για το SSL/TLS όσον αφορά τις συνδέσεις στον απομακρυσμένο cluster. Πιο συγκεκριμένα, το τοπικό μας cluster είναι ο client στην σύνδεση αυτή, οπότε μπορούμε να κάνουμε τις απαραίτητες ρυθμίσεις έτσι ώστε να εμπιστεύεται την αρχή πιστοποίησης που έχει υπογράψει το πιστοποιητικό που χρησιμοποιεί το απομακρυσμένο cluster.
Επίλογος
Ελπίζουμε όλες οι διαφορετικές ρυθμίσεις που είναι διαθέσιμες για το SSL/TLS να είναι λίγο πιο ξεκάθαρες στο μυαλό σας μετά την ανάγνωση του παραπάνω κειμένου, καθώς και να έχετε μια καλύτερη ιδέα για το πότε θα πρέπει να παραμετροποιήσετε ποιες και γιατί. Για περισσότερες πληροφορίες και μια πιο λεπτομερή περιγραφή, η τεκμηρίωση μας είναι διαθέσιμη στους συνδέσμους που παραθέσαμε στην εισαγωγή. Αν παρόλα αυτά, έχετε ερωτήσεις ή αντιμετωπίσετε κάποιο πρόβλημα κατά τη ρύθμιση του cluster σας, έχουμε μια ενεργή κοινότητα χρηστών που μπορεί να σας βοηθήσει να το ξεπεράσετε!
Καλές Γιορτές!