Ιδιωτικό RDS από EC2: ίδιο VPC, peering ή κάτι άλλο;
Επιλέξτε τη διαδρομή πριν από την ομάδα ασφαλείας: ίδιο VPC, peering, κοινόχρηστο VPC ή ιδιωτική διασύνδεση.
Ο φορητός υπολογιστής του προγραμματιστή φτάνει στην ιδιωτική παρουσία RDS μέσω του VPN του προσωπικού, αλλά η εφαρμογή στο EC2 δεν μπορεί να συνδεθεί καθόλου. Αυτό δεν είναι χαλασμένη ανάπτυξη. Ο φορητός έχει ένα τούνελ που η παρουσία EC2 δεν κληρονομεί ποτέ, και το «ιδιωτικό» στο RDS σημαίνει ότι η βάση δεδομένων δεν έχει δημόσιο τελικό σημείο, όχι ότι οι ανθρώπινοι χρήστες VPN είναι οι μόνοι επιτρεπόμενοι καλούντες. Η εφαρμογή χρειάζεται τη δική της εξουσιοδοτημένη διαδρομή, τη δική της σχέση με την ομάδα ασφαλείας και τη δική της ταυτότητα στη βάση δεδομένων, και η σειρά με την οποία επιλέγετε αυτά τα τρία εξοικονομεί το μεγαλύτερο μέρος της αποσφαλμάτωσης. Αποφασίστε πρώτα τη διαδρομή, μετά τα δικαιώματα και μετά επαληθεύστε από το αναπτυγμένο περιβάλλον και όχι από το γραφείο σας.
Το VPN του φορητού δεν είναι η διαδρομή της εφαρμογής
Ό,τι κι αν κάνει το VPN του προσωπικού για τους ανθρώπους, δεν κάνει τίποτα για μια παρουσία, εκτός αν αυτή η παρουσία αποτελεί ρητά μέρος της ίδιας διαδρομής δικτύου. Μια παρουσία EC2 σε ιδιωτικό υποδίκτυο φτάνει στο RDS μέσω δρομολόγησης VPC, ομάδων ασφαλείας και ACL δικτύου. Δεν κληρονομεί το τούνελ ενός ανθρώπου, τη συνεδρία ενός ανθρώπου ή τα διαπιστευτήρια ενός ανθρώπου, και δεν θα έπρεπε: η σύνδεση εφαρμογών χωρίς επίβλεψη και η απομακρυσμένη πρόσβαση του προσωπικού πρέπει να λειτουργούν ανεξάρτητα.
Αυτή η ανεξαρτησία είναι πλεονέκτημα. Όταν το VPN πέσει, η εφαρμογή συνεχίζει να λειτουργεί. Όταν η εφαρμογή συμπεριφέρεται άσχημα, κανείς δεν χάνει την απομακρυσμένη πρόσβασή του. Τα σχέδια που συγχωνεύουν τα δύο σε μία διαδρομή συνήθως ανακαλύπτονται κατά τη διάρκεια ενός περιστατικού, την χειρότερη δυνατή στιγμή.
Απόφαση 1: ίδιο VPC, άμεση διαδρομή
Όταν η εφαρμογή και η βάση δεδομένων βρίσκονται στο ίδιο VPC με άμεση δρομολόγηση και χωρίς ενδιάμεση συσκευή επιθεώρησης, η διαδρομή είναι απλή και η αναφορά ομάδας ασφαλείας είναι το ισχυρότερο διαθέσιμο εργαλείο. Δώστε στην εφαρμογή τη δική της ομάδα και μετά επιτρέψτε τη θύρα της βάσης δεδομένων από αυτή την ομάδα αντί από ένα εύρος διευθύνσεων:
aws ec2 authorize-security-group-ingress --group-id sg-0db123 --protocol tcp --port 5432 --source-group sg-0app456
aws rds describe-db-instances --db-instance-identifier prod-db --query 'DBInstances[0].{Endpoint:Endpoint.Address,Port:Endpoint.Port,Public:PubliclyAccessible,Groups:VpcSecurityGroups}'
Η θύρα είναι ενδεικτική και πρέπει να ταιριάζει με τη μηχανή. Μια αναφορά ομάδας εξουσιοδοτεί κίνηση από τις παρουσίες της εφαρμογής· δεν αντιγράφει τους κανόνες τους και δεν δημιουργεί σύνδεση στη βάση δεδομένων. Δύο ξεχωριστά προβλήματα, δύο ξεχωριστές λύσεις.
Στη συνέχεια ελέγξτε το υπόλοιπο της διαδρομής αντί να σταματήσετε στον κανόνα που μόλις προσθέσατε. Η πολιτική εξόδου της εφαρμογής, το πλήρες σύνολο των ομάδων που είναι συνδεδεμένες στη βάση δεδομένων, οι πίνακες δρομολόγησης του υποδικτύου και τυχόν ACL δικτύου πρέπει όλα να συμφωνούν. Οι κανόνες των ομάδων ασφαλείας είναι με κατάσταση, ενώ μια προσαρμοσμένη ACL δικτύου πρέπει να επιτρέπει το αίτημα και την κίνηση επιστροφής σε ξεχωριστούς κανόνες, συμπεριλαμβανομένων των εφήμερων θυρών. Ένας στενός νέος κανόνας για τη βάση δεδομένων επίσης δεν ακυρώνει μια παλαιότερη ευρεία άδεια που ήταν ήδη συνδεδεμένη.
Απόφαση 2: άλλο VPC ή άλλος λογαριασμός
Αν η εφαρμογή βρίσκεται σε άλλο VPC, οι ιδιοκτήτες του δικτύου επιλέγουν μια υποστηριζόμενη ιδιωτική διασύνδεση: peering, σχεδιασμό transit ή ρύθμιση κοινόχρηστου VPC. Τότε πρέπει να υπάρχουν και οι δύο κατευθύνσεις δρομολόγησης, η επίλυση ονομάτων πρέπει να λειτουργεί για το τελικό σημείο του RDS, και η πηγή που αξιολογεί η πολιτική της βάσης δεδομένων πρέπει να ταιριάζει με αυτό που φτάνει πραγματικά. Τα ταιριαστά ονόματα λογαριασμών ή μια κοινή σχέση χρέωσης δεν παρέχουν τίποτα από αυτά.
Η αναφορά ομάδας ασφαλείας είναι το μέρος που ποικίλλει. Λειτουργεί σε αρκετά σχέδια ιδιωτικής διασύνδεσης, αλλά σταματά να λειτουργεί τη στιγμή που μια ενδιάμεση συσκευή ξαναγράψει την πηγή ή τερματίσει τη σύνδεση, γιατί τότε η βάση δεδομένων βλέπει την ενδιάμεση συσκευή και όχι την ομάδα της εφαρμογής σας. Τα σενάρια VPC του RDS διαχωρίζουν την πρόσβαση εντός του ίδιου VPC από τις άλλες ρυθμίσεις, και αξίζει να ελέγξετε τη συγκεκριμένη τοπολογία σας ως προς αυτά πριν υποθέσετε ότι ένα στυλ κανόνα μεταφέρεται.
Μην λύσετε μια διαδρομή που λείπει κάνοντας τη βάση δεδομένων δημόσια προσβάσιμη. Αυτή είναι μια διαφορετική απόφαση έκθεσης με διαφορετικό ιδιοκτήτη, και συνήθως την προτείνει όποιος είναι πιο μακριά από τη συνέπεια.
Απόφαση 3: ποια ταυτότητα δέχεται η βάση δεδομένων
Η πρόσβαση δικτύου και ο έλεγχος ταυτότητας της βάσης δεδομένων είναι ξεχωριστά επίπεδα, και η σύγχυσή τους παράγει τα πιο παραπλανητικά σφάλματα. Ο ρόλος της παρουσίας είναι μια ταυτότητα AWS για κλήση API του AWS. Δεν είναι χρήστης βάσης δεδομένων. Ο έλεγχος ταυτότητας βάσης δεδομένων μέσω IAM είναι υποστηριζόμενη λειτουργία όπου το επιτρέπουν η μηχανή και η διαμόρφωση, και παραμένει αντιστοίχιση σε χρήστη βάσης δεδομένων και όχι αντικατάστασή του.
Χρησιμοποιήστε το όνομα του τελικού σημείου RDS στη διαμόρφωση της εφαρμογής αντί για μια διεύθυνση που πιάστηκε από μία αναζήτηση. Η εναλλαγή Multi-AZ αλλάζει τη διεύθυνση πίσω από αυτό το όνομα, και μια εφαρμογή καρφιτσωμένη σε IP θα αποτύχει ακριβώς τη στιγμή που χρειάζεται. Κρατήστε ενεργή την επαλήθευση TLS της μηχανής αντί να την απενεργοποιήσετε για να εξαφανιστεί ένα σφάλμα, γιατί μια αποτυχία επαλήθευσης σας λέει κάτι για το τελικό σημείο που φτάσατε.
Στη συνέχεια χορηγήστε στον λογαριασμό της βάσης δεδομένων το ελάχιστο που χρειάζεται η εφαρμογή, στο σχήμα που πραγματικά χρησιμοποιεί. Αυτή η εργασία είναι βαρετή, είναι ελέγξιμη και είναι το μέρος για το οποίο θα ρωτήσει μια ανασκόπηση περιστατικού.
Επαληθεύστε από το αναπτυγμένο περιβάλλον
Δοκιμάστε από την παρουσία ή από μια εργασία που εκτελείται με την ίδια ομάδα, υποδίκτυο και ρόλο. Τέσσερις αποτυχίες φαίνονται παρόμοιες από φορητό και διακρίνονται εύκολα από εκεί: ένα όνομα που δεν επιλύεται, μια σύνδεση που λήγει, μια αποτυχία επικύρωσης TLS και μια απορριφθείσα σύνδεση στη βάση δεδομένων. Κάθε μία δείχνει σε διαφορετικό όριο, και το να αλλάξετε την έκθεση της βάσης δεδομένων πριν μάθετε ποια έχετε είναι εικασία.
psql "host=prod-db.abc123.eu-west-1.rds.amazonaws.com port=5432 dbname=app sslmode=verify-full" -c 'select 1'
Αν η σύνδεση πετύχει από την παρουσία και αποτύχει από το γραφείο σας, η διαδρομή της εφαρμογής είναι εντάξει και η δική σας πρόσβαση είναι αυτό που πρέπει να διορθωθεί. Αν αποτύχει και από τα δύο, ξεκινήστε με τους ελέγχους ομάδας και διαδρομής παραπάνω και όχι με τα διαπιστευτήρια. Αυτή η μία σύγκριση αποτρέπει το μεγαλύτερο μέρος της αναστάτωσης που δημιουργούν αυτά τα δελτία.