Ελάχιστα δικαιώματα στο AWS: μόνο ό,τι χρειάζεται κάθε πρόγραμμα
Ελάχιστα δικαιώματα σημαίνει ότι κάθε άνθρωπος και κάθε πρόγραμμα στον λογαριασμό AWS μιας επιχείρησης μπορεί να κάνει μόνο όσα χρειάζεται η δουλειά του, και τίποτε άλλο. Έτσι, αν κλαπεί ένας κωδικός ή γίνει ένα λάθος, η ζημιά μένει μικρή. Η AWS το γράφει ως βασική σύσταση στις καλές πρακτικές του AWS IAM, της υπηρεσίας που ορίζει ποιος κάνει τι.
Το άρθρο είναι για τον επιχειρηματία που έχει την εφαρμογή ή το site του στο AWS και θέλει να καταλάβει τι να ζητήσει από όποιον το στήνει. Θα δεις τι σημαίνει η ιδέα με ένα απλό παράδειγμα, πώς εφαρμόζεται με ρόλους IAM, πώς βρίσκεις τα δικαιώματα που περισσεύουν και ποια λάθη να αποφύγεις.
Με μια ματιά: ελάχιστα δικαιώματα
- Ελάχιστα δικαιώματα σημαίνει ότι κάθε χρήστης και κάθε πρόγραμμα μπορεί να κάνει μόνο όσα χρειάζεται η δουλειά του.
- Η AWS συστήνει στις καλές πρακτικές του AWS IAM να δίνονται μόνο τα δικαιώματα που χρειάζεται κάθε εργασία.
- Οι ρόλοι IAM δίνουν προσωρινά διαπιστευτήρια αντί για μόνιμους κωδικούς μέσα στον κώδικα.
- Το IAM Access Analyzer εντοπίζει πόρους ανοιχτούς προς τα έξω και προτείνει κανόνες με βάση την πραγματική δραστηριότητα.
- Τα δικαιώματα που δεν χρησιμοποιούνται αφαιρούνται με τακτικό έλεγχο.
Τι σημαίνει «ελάχιστα δικαιώματα» στην πράξη;
Σημαίνει ότι δίνεις σε κάθε χρήστη και κάθε πρόγραμμα ένα κλειδί που ανοίγει μόνο τις πόρτες που χρειάζεται. Ο λογιστής βλέπει τα τιμολόγια αλλά δεν σβήνει τον server. Το πρόγραμμα που στέλνει email διαβάζει τη λίστα παραληπτών αλλά δεν αγγίζει τις πληρωμές. Ό,τι δεν χρειάζεται για τη δουλειά, απλώς δεν επιτρέπεται.
Το NIST, ο αμερικανικός δημόσιος φορέας για τα πρότυπα, ορίζει την ιδέα με τον ίδιο τρόπο: κάθε οντότητα παίρνει τους ελάχιστους πόρους και τις άδειες που χρειάζεται για τη λειτουργία της. Δεν είναι κάτι καινούργιο ούτε κάτι που αφορά μόνο το cloud. Είναι η ίδια λογική με τα κλειδιά ενός γραφείου, απλώς εφαρμοσμένη σε προγράμματα.
Η διαφορά στο cloud είναι ότι τα «κλειδιά» είναι πολλά και αόρατα. Κάθε server, κάθε λειτουργία και κάθε υπάλληλος έχει ένα σύνολο αδειών γραμμένο σε κανόνες. Αν κανείς δεν τους κοιτάξει, μεγαλώνουν με τον καιρό, γιατί είναι πιο εύκολο να προσθέσεις μια άδεια παρά να σκεφτείς ποια ακριβώς χρειάζεται.
Γιατί τα πολλά δικαιώματα είναι κίνδυνος για μια επιχείρηση;
Γιατί η ζημιά από ένα πρόβλημα είναι όσο μεγάλα είναι τα δικαιώματα του κλειδιού που χάθηκε. Αν κλαπεί ο κωδικός ενός προγράμματος που μπορεί να κάνει τα πάντα, ο επιτιθέμενος μπορεί κι αυτός να κάνει τα πάντα. Αν το πρόγραμμα διάβαζε μόνο έναν φάκελο, χάνεται μόνο αυτός ο φάκελος.
Το ίδιο ισχύει και για τα λάθη χωρίς κακή πρόθεση. Ένας συνεργάτης που θέλει να καθαρίσει παλιά αρχεία μπορεί κατά λάθος να σβήσει τη βάση δεδομένων, αν τα δικαιώματά του το επιτρέπουν. Με ελάχιστα δικαιώματα, η εντολή απλώς απορρίπτεται και το λάθος μένει ακίνδυνο.
Για μια μικρή επιχείρηση αυτό μετράει περισσότερο απ' ό,τι για μια μεγάλη. Συνήθως δεν υπάρχει ομάδα ασφαλείας που παρακολουθεί τον λογαριασμό μέρα και νύχτα. Άρα το πιο φτηνό μέτρο είναι να μην υπάρχει από την αρχή η δυνατότητα για μεγάλη ζημιά. Η ασφάλεια στο cloud ξεκινά από εκεί, πριν από κάθε εργαλείο που κοστίζει.
Είναι η ίδια λογική με το σύστημα που αναγνωρίζει και διώχνει όποιον δοκιμάζει όλες τις κλειδαριές: λιγότερες ανοιχτές πόρτες, λιγότερα σημεία για επίθεση.
Πώς εφαρμόζονται τα ελάχιστα δικαιώματα στο AWS;
Στο AWS τα δικαιώματα ορίζονται στο AWS IAM με κανόνες που λέγονται policies. Κάθε κανόνας γράφει ποιες ενέργειες επιτρέπονται, σε ποιους πόρους και με ποιες προϋποθέσεις. Τα προγράμματα δεν παίρνουν μόνιμους κωδικούς αλλά ρόλους IAM, που δίνουν προσωρινά διαπιστευτήρια μόνο για όσο χρειάζονται.
Ένα απλό παράδειγμα: η φόρμα επικοινωνίας ενός site αποθηκεύει τα μηνύματα σε έναν πίνακα. Ο ρόλος IAM της φόρμας επιτρέπει μόνο την προσθήκη γραμμής σε αυτόν τον πίνακα. Δεν μπορεί να διαβάσει τα παλιά μηνύματα, ούτε να σβήσει τον πίνακα, ούτε να αγγίξει κάποιον άλλο πόρο του λογαριασμού.
Η AWS προτείνει επίσης προσωρινά διαπιστευτήρια και για τους ανθρώπους, πολλαπλό έλεγχο ταυτότητας (MFA) και όρους μέσα στους κανόνες, για παράδειγμα ότι μια ενέργεια επιτρέπεται μόνο μέσα από συγκεκριμένη υπηρεσία. Όλα αυτά περιγράφονται στις καλές πρακτικές ασφάλειας του AWS IAM.
Σε μια πλατφόρμα με πολλούς πελάτες η ίδια σκέψη πάει ένα βήμα πιο πέρα: τα δεδομένα κάθε πελάτη μένουν χωριστά, ώστε ένα πρόβλημα στον έναν να μη φτάνει στους άλλους. Το εξηγώ στο άρθρο για την ξεχωριστή βάση για κάθε πελάτη.
Πώς βάζεις ελάχιστα δικαιώματα βήμα βήμα;
Ξεκινάς από τη δουλειά, όχι από τα δικαιώματα. Γράφεις τι πρέπει να κάνει κάθε άνθρωπος και κάθε πρόγραμμα, δίνεις μόνο αυτά, δοκιμάζεις και μετά κόβεις ό,τι δεν χρησιμοποιείται. Η διαδικασία δεν τελειώνει ποτέ οριστικά: επαναλαμβάνεται κάθε φορά που αλλάζει η εφαρμογή ή η ομάδα.
Τα βήματα, με τη σειρά:
- Κλείδωσε τον κύριο λογαριασμό. Ο λογαριασμός root δεν χρησιμοποιείται για την καθημερινή δουλειά· έχει MFA και μένει στην άκρη.
- Κάνε λίστα με τις δουλειές. Για κάθε άνθρωπο και πρόγραμμα, γράψε σε απλή γλώσσα τι κάνει: «ανεβάζει φωτογραφίες», «στέλνει τιμολόγια», «διαβάζει παραγγελίες».
- Δώσε έναν ρόλο ανά δουλειά. Κάθε πρόγραμμα παίρνει δικό του ρόλο IAM. Δύο προγράμματα δεν μοιράζονται τον ίδιο ρόλο, ώστε το πρόβλημα στο ένα να μη φτάνει στο άλλο.
- Γράψε κανόνες για συγκεκριμένους πόρους. Όχι «όλοι οι φάκελοι», αλλά «αυτός ο φάκελος». Όχι «όλες οι ενέργειες», αλλά «ανάγνωση» ή «εγγραφή».
- Δοκίμασε πριν βγεις στην παραγωγή. Αν κάτι λείπει, το πρόγραμμα αποτυγχάνει με σαφές μήνυμα άρνησης. Τότε προσθέτεις μόνο αυτό που λείπει.
- Έλεγξε τακτικά τι χρησιμοποιείται. Με το IAM Access Analyzer και τις πληροφορίες τελευταίας πρόσβασης βλέπεις ποια δικαιώματα δεν χρησιμοποιήθηκαν και τα αφαιρείς.
Το σημαντικό είναι η σειρά. Αν ξεκινήσεις από το «δώσε τα πάντα και βλέπουμε», δύσκολα θα γυρίσεις πίσω, γιατί κανείς δεν θυμάται τι χρειάζεται στ' αλήθεια. Αν ξεκινήσεις από τη λίστα με τις δουλειές, κάθε άδεια έχει έναν λόγο ύπαρξης που μπορείς να εξηγήσεις.
Πώς ξέρεις ποια δικαιώματα περισσεύουν;
Το AWS δείχνει πότε χρησιμοποιήθηκε τελευταία φορά κάθε υπηρεσία από έναν χρήστη ή ρόλο. Επιπλέον, το IAM Access Analyzer εντοπίζει πόρους ανοιχτούς προς τα έξω και μπορεί να προτείνει κανόνα με βάση την πραγματική δραστηριότητα που έχει καταγραφεί. Ό,τι δεν χρησιμοποιείται για καιρό είναι υποψήφιο για αφαίρεση.
Φαντάσου ένα πρόγραμμα που έχει δικαίωμα να διαβάζει και να γράφει σε πολλές υπηρεσίες, αλλά εδώ και μήνες αγγίζει μόνο λίγες από αυτές. Οι υπόλοιπες άδειες δεν βοηθούν κανέναν· απλώς μεγαλώνουν τη ζημιά αν κάτι πάει στραβά. Τις αφαιρείς, ελέγχεις ότι όλα δουλεύουν, και ο λογαριασμός γίνεται πιο ασφαλής χωρίς καμία αλλαγή στον κώδικα.
Το ίδιο εργαλείο ελέγχει και τους κανόνες που γράφεις, πριν τους εφαρμόσεις, και σε προειδοποιεί για συνηθισμένα λάθη. Και ο έλεγχος δεν γίνεται μία φορά: οι καλές πρακτικές του AWS IAM προτείνουν να ελέγχεις τακτικά και να αφαιρείς χρήστες, ρόλους, δικαιώματα και κωδικούς που δεν χρησιμοποιούνται. Μια επαναλαμβανόμενη υπενθύμιση στο ημερολόγιο αρκεί για να μην ξαναμεγαλώσουν τα δικαιώματα αθόρυβα.
Ποια λάθη πρέπει να αποφύγεις με τα δικαιώματα;
Το πρώτο λάθος είναι η ευκολία: ένας κανόνας με αστερίσκο που επιτρέπει «όλες τις ενέργειες σε όλους τους πόρους», επειδή κάτι δεν δούλευε και έπρεπε να βγει γρήγορα. Ακολουθούν οι μόνιμοι κωδικοί μέσα στον κώδικα και οι κοινόχρηστοι λογαριασμοί που χρησιμοποιούν πολλοί άνθρωποι μαζί.
Καθένα από αυτά λύνει ένα πρόβλημα σήμερα και ανοίγει ένα μεγαλύτερο αύριο:
- Αστερίσκος παντού. Ένας κανόνας «τα πάντα σε όλα» κάνει τα ελάχιστα δικαιώματα μέγιστα. Αν χρειάζεται πραγματικά για λίγο, μπαίνει με ημερομηνία αφαίρεσης.
- Κωδικοί μέσα στον κώδικα. Ένα κλειδί πρόσβασης γραμμένο στον κώδικα μπορεί να βρεθεί σε αντίγραφο ασφαλείας, σε email ή σε δημόσιο αποθετήριο. Οι ρόλοι IAM δίνουν προσωρινά διαπιστευτήρια, οπότε το πρόβλημα δεν υπάρχει.
- Ένας λογαριασμός για όλους. Όταν πολλοί μπαίνουν με τον ίδιο κωδικό, δεν ξέρεις ποιος έκανε τι και δεν μπορείς να κόψεις την πρόσβαση ενός μόνο ανθρώπου.
- Παλιοί χρήστες που μένουν. Ο συνεργάτης που έφυγε πριν από καιρό έχει ακόμα πρόσβαση, αν κανείς δεν τη σβήσει.
Κανένα από αυτά δεν θέλει ακριβό εργαλείο. Θέλει μια απόφαση ότι κάθε άδεια έχει λόγο ύπαρξης και κάποιον που το ελέγχει. Αν έχεις ερώτηση για το πώς είναι στημένα τα δικαιώματα στο δικό σου AWS, γράψε μου από τη φόρμα επικοινωνίας.
Συχνές ερωτήσεις: ελάχιστα δικαιώματα
Ναι, και μάλιστα περισσότερο από μια μεγάλη. Μια μικρή επιχείρηση σπάνια έχει ομάδα που παρακολουθεί τον λογαριασμό συνεχώς. Τα ελάχιστα δικαιώματα περιορίζουν τη ζημιά από ένα κλεμμένο κλειδί ή ένα λάθος χωρίς επιπλέον προσωπικό, γιατί η επικίνδυνη ενέργεια απλώς δεν επιτρέπεται από την αρχή.
Μπορεί, αν κόψεις κάτι που χρειάζεται, γι' αυτό η αλλαγή γίνεται πρώτα σε δοκιμαστικό περιβάλλον. Αν λείπει μια άδεια, το AWS επιστρέφει σαφές μήνυμα άρνησης και ξέρεις ακριβώς τι να προσθέσεις. Με τις πληροφορίες τελευταίας πρόσβασης κόβεις μόνο ό,τι δεν έχει χρησιμοποιηθεί, οπότε ο κίνδυνος μένει μικρός.
Ο ρόλος IAM είναι ένα σύνολο δικαιωμάτων που ένα πρόγραμμα ή ένας άνθρωπος «φοράει» για λίγο. Δίνει προσωρινά διαπιστευτήρια που λήγουν μόνα τους, ενώ ένας μόνιμος κωδικός ισχύει μέχρι να τον σβήσει κάποιος. Αν διαρρεύσει ένα προσωρινό διαπιστευτήριο, παύει να ισχύει σύντομα και η ζημιά μένει περιορισμένη.
Κάθε φορά που αλλάζει κάτι σημαντικό: νέα λειτουργία, νέος συνεργάτης ή κάποιος που φεύγει. Εκτός από αυτό, βάλε έναν τακτικό έλεγχο στο ημερολόγιο. Η AWS προτείνει να ελέγχεις τακτικά και να αφαιρείς χρήστες, ρόλους και δικαιώματα που δεν χρησιμοποιούνται, χωρίς να ορίζει μία συχνότητα για όλους.
Πηγές: ελάχιστα δικαιώματα
Τελευταία ενημέρωση: