Το ερώτημα σπάνια είναι αν πρέπει να κρυπτογραφηθεί κάτι ανάμεσα σε δύο μηχανήματα cloud· είναι ποια διεπαφή κρυπτογραφείτε και ποιος ελέγχει την ταυτότητα ποιανού. Ξεκινώ αυτές τις συζητήσεις από την υπηρεσία και όχι από το διάγραμμα δικτύου, γιατί η υπηρεσία ξέρει ήδη τι χρειάζεται. Τρία όρια καλύπτουν τις περισσότερες περιπτώσεις: το δικό της TLS της εφαρμογής, μία προωθημένη θύρα TCP μέσω SSH και ένα δρομολογημένο overlay που δίνει διεύθυνση σε κάθε συμμετέχοντα. Δεν κατατάσσονται κατά ισχύ, αλλά κατά το πόσο του προβλήματος καλύπτουν.

Ξεκινήστε από την υπηρεσία, όχι από το δίκτυο

Προχωρήστε από τη διεργασία προς τα έξω. Τι πρωτόκολλο μιλά, ποιο όνομα θα επαληθεύσει ο πελάτης και ποιος επιτρέπεται να ανοίξει σύνδεση; Αυτές οι τρεις απαντήσεις εξαλείφουν επιλογές ταχύτερα από οποιονδήποτε πίνακα σύγκρισης, και η ίδια η διαμόρφωση της υπηρεσίας τις δίνει συνήθως σε λίγα λεπτά.

Πάρτε ένα μικρό εσωτερικό API που ήδη σερβίρει HTTPS στη θύρα 8443 με πιστοποιητικό για το api.internal.example. Το ss -ltnp στον κεντρικό υπολογιστή δείχνει σε τι δεσμεύεται, και το openssl s_client -connect 127.0.0.1:8443 -verify_hostname api.internal.example δείχνει αν το πιστοποιητικό επικυρώνει για το όνομα που θα χρησιμοποιήσει πραγματικά ο πελάτης. Αν και τα δύο είναι υγιή, η υπηρεσία μπορεί να προστατεύσει τη δική της ροή και μένει μόνο η προσβασιμότητα. Αυτό είναι πολύ μικρότερο πρόβλημα από το να χτίσετε δίκτυο.

Βήμα 1: προστατεύει η υπηρεσία τον εαυτό της;

Αυτή είναι η επιλογή όταν ταιριάζει, και ταιριάζει συχνότερα απ' όσο υποθέτουν οι ομάδες. Η κρυπτογράφηση της υπηρεσίας καλύπτει ολόκληρη τη διαδρομή μεταξύ πελάτη και διακομιστή, μαζί με κάθε άλμα ενδιάμεσα, κάτι που κανένα τούνελ γύρω από τη μέση δεν βελτιώνει. Ρυθμίστε το αναμενόμενο όνομα και την εμπιστοσύνη ρητά, αντί να βασίζεστε σε ό,τι τυχαίνει να περιέχει το προεπιλεγμένο κατάστημα του πελάτη.

Η κρυπτογράφηση και η προσβασιμότητα παραμένουν ξεχωριστοί έλεγχοι, και η συγχώνευσή τους είναι όπου αυτή η επιλογή αποτυγχάνει. Μια υπηρεσία TLS σε απεριόριστο δημόσιο ακροατή εξακολουθεί να δέχεται προσπάθειες σύνδεσης από οποιονδήποτε, άρα ο ακροατής και οι κανόνες δικτύου πρέπει να οριστούν ανεξάρτητα από το ότι το ωφέλιμο φορτίο προστατεύεται. Έπειτα ελέγξτε τις εξαρτήσεις, γιατί ένα API πάνω από TLS δεν λέει τίποτα για το τελικό σημείο ανακάλυψης, τη θύρα διαχείρισης ή το κανάλι μαζικής μεταφοράς δίπλα του. Καθένα χρειάζεται τη δική του απάντηση, και ένα απροστάτευτο αδελφάκι αρκεί για να γίνει όλο το όριο μυθοπλασία.

Βήμα 2: είναι μία θύρα TCP η όλη απαίτηση;

Όταν η απαίτηση είναι πραγματικά μία θύρα TCP, η προώθηση είναι το μικρότερο που λειτουργεί. Μια τοπική προώθηση SSH μεταφέρει αυτή τη θύρα μέσα από μια ήδη υπάρχουσα πιστοποιημένη σύνδεση.

Η μορφή είναι ssh -N -L 8443:127.0.0.1:8443 [email protected], και η λεπτομέρεια που μετρά είναι η διεύθυνση προορισμού: το 127.0.0.1 επιλύεται στην απομακρυσμένη πλευρά, οπότε η σύνδεση προς την υπηρεσία ανοίγει από το bastion και όχι από τον φορητό σας. Δέστε τον τοπικό ακροατή στενά ως -L 127.0.0.1:8443:... ώστε να μη δημοσιεύσετε κατά λάθος την υπηρεσία στο τοπικό σας δίκτυο. Στην πλευρά του διακομιστή, περιορίστε τι επιτρέπεται να προωθεί ο λογαριασμός αντί να εμπιστεύεστε τη συμπεριφορά του πελάτη. Τα PermitOpen, AllowTcpForwarding local και ένα προεπιλεγμένο GatewayPorts no είναι οι τρεις ρυθμίσεις που μετατρέπουν ένα γενικό ρελέ σε συγκεκριμένο κανάλι.

Το συμβόλαιο είναι στενό και προς τις δύο κατευθύνσεις. Το SSH προστατεύει το δικό του κανάλι, και ένα περαιτέρω άλμα από το bastion σε άλλη εφαρμογή χρειάζεται δική του προστασία. Μια υπηρεσία που ακούει μόνο στο loopback του bastion έχει πολύ διαφορετική έκθεση από μία που φτάνει μέσω άλλου δικτύου, και η προώθηση δεν το αλλάζει. Κρατήστε τον έλεγχο ταυτότητας και τους ελέγχους TLS της εφαρμογής, αντί να θεωρείτε το τούνελ υποκατάστατό τους.

Αυτό λειτουργεί καλά για μία σύνδεση με έναν ιδιοκτήτη. Σε κλίμακα γίνεται σύστημα: τοπικές συγκρούσεις θυρών, εποπτεία, περιστροφή κλειδιών και το ερώτημα ποιος επανεκκινεί την προώθηση μετά από επανεκκίνηση.

Βήμα 3: είναι η δρομολόγηση η πραγματική απαίτηση;

Αυτή η λίστα είναι το ειλικρινές κόστος της μικρότερης επιλογής, και γι' αυτό οι ομάδες τελικά αντικαθιστούν μια χούφτα ξεχασμένες εντολές υποβάθρου με κάτι διαχειριζόμενο. Η αντικατάσταση δεν είναι αυτόματα VPN. Αν η απαίτηση παραμένει μία θύρα TCP, μια εποπτευόμενη προώθηση με τεκμηριωμένο ιδιοκτήτη είναι φθηνότερη στη λειτουργία από ένα overlay και αποτυγχάνει με τρόπους που βλέπετε. Μετρήστε την επιχειρησιακή ιδιοκτησία πριν μετρήσετε την κομψότητα.

Η δρομολόγηση γίνεται η σωστή απάντηση όταν η δρομολόγηση είναι η απαίτηση. Αρκετές εφαρμογές που χρειάζονται συνηθισμένη συνδεσιμότητα IP, πρωτόκολλα που μια προώθηση TCP δεν μπορεί να μεταφέρει ή υπηρεσίες που μετακινούνται μεταξύ κεντρικών υπολογιστών δείχνουν όλες προς την ίδια κατεύθυνση.

Ένα overlay δίνει στους συμμετέχοντες διεύθυνση και διαδρομή, και τότε αρχίζει η πραγματική δουλειά: μη επικαλυπτόμενες περιοχές, ιδιοκτησία διαδρομών, DNS, εγγραφή, ανάκληση και τι συμβαίνει όταν ένας ομότιμος εξαφανίζεται. Τίποτα από αυτά δεν έρχεται με τη διεύθυνση. Ένας ομότιμος που έγινε δεκτός στο overlay δεν είναι επίσης αυτόματα εξουσιοδοτημένος για κάθε λειτουργία στον προορισμό, άρα ο έλεγχος ταυτότητας σε επίπεδο υπηρεσίας παραμένει.

Τι κατέχετε μετά

Δύο πράγματα ανήκουν στο αρχείο που αφήνετε. Το πρώτο είναι η ταυτότητα που αναμένεται να επαληθεύσει ο πελάτης, γιατί καθένα από αυτά τα όρια υποβαθμίζεται ήσυχα μόλις χαλαρώσει ένας έλεγχος ονόματος για να δουλέψει κάτι. Το δεύτερο είναι το βήμα αφαίρεσης: ποιο κλειδί, ποιος κανόνας ή ποια διαδρομή εξαφανίζεται όταν τελειώνει η πρόσβαση, και ποιος το εκτελεί.

Η περιήγηση τελειώνει εκεί που άρχισε, στην υπηρεσία. Επιλέξτε το όριο που καλύπτει την πραγματική κίνηση και επαληθεύει τους ομοτίμους που θέλατε να επαληθεύσετε, και μετά γράψτε πώς η πρόσβαση ενημερώνεται, παρακολουθείται και αφαιρείται. Η αναφορά του OpenSSH είναι το μέρος για να επιβεβαιώσετε τις επιλογές προώθησης πριν υποσχεθείτε ένα στενό συμβόλαιο. Αν δεν μπορείτε να περιγράψετε το βήμα αφαίρεσης σε μία πρόταση, το όριο είναι μεγαλύτερο από το πρόβλημα.

Σχετικά άρθρα