Ένα AWS access key είναι δύο συμβολοσειρές που μαζί επιτρέπουν σε ένα πρόγραμμα να ενεργεί ως χρήστης IAM: το access key ID, που ταυτοποιεί το κλειδί, και το secret access key, που αποδεικνύει ότι το έχετε. Οι άνθρωποι τα αναζητούν με τρία ονόματα, access key και secret key, secret access key ή απλώς AWS secret key, και πρόκειται πάντα για το ίδιο ζεύγος. Το ζεύγος εμφανίζεται σε ρυθμίσεις του CLI, σε pipeline CI και πολύ συχνά σε κάποιο μήνυμα στο Slack.
Αυτός ο οδηγός εξηγεί τι είναι τα δύο μέρη, πώς τα δημιουργείτε και τα ρυθμίζετε, πώς κάνετε εναλλαγή κλειδιών (key rotation) χωρίς διακοπή λειτουργίας και τι κάνετε όταν διαρρεύσει ένα κλειδί. Απαντά επίσης στην ερώτηση που προκύπτει κάθε φορά που μπαίνει ένας νέος developer ή ξεκινά ένας εξωτερικός συνεργάτης: πώς παραδίδετε ένα secret key σε έναν άνθρωπο χωρίς να το βάλετε σε email.
Access key ID και secret access key
| Access key ID | Secret access key | |
|---|---|---|
| Μορφή | AKIAIOSFODNN7EXAMPLE (20 χαρακτήρες) | 40 χαρακτήρες, πεζά, κεφαλαία και σύμβολα |
| Ρόλος | Δείχνει ποιο κλειδί υπογράφει το αίτημα | Υπογράφει το αίτημα και αποδεικνύει ότι το κατέχετε |
| Μυστικό; | Όχι, χειριστείτε το σαν όνομα χρήστη | Ναι, χειριστείτε το σαν κωδικό πρόσβασης |
| Ορατό αργότερα; | Ναι, στην κονσόλα IAM | Ποτέ μετά τη δημιουργία |
Τα μακροπρόθεσμα κλειδιά ξεκινούν με AKIA. Τα προσωρινά
διαπιστευτήρια από το STS, που συνοδεύονται και από ένα session token,
ξεκινούν με ASIA και λήγουν από μόνα τους. Αν δείτε ένα κλειδί
ASIA σε αρχείο ρυθμίσεων, θα σταματήσει να λειτουργεί μέσα σε λίγες
ώρες, και αυτό είναι σκόπιμο.
Κανένα από τα δύο μέρη δεν δίνει δικαιώματα. Το κλειδί κάνει έλεγχο ταυτότητας ως χρήστης IAM, και οι πολιτικές που είναι συνδεδεμένες με τον χρήστη ορίζουν τι μπορεί να κάνει αυτή η ταυτότητα. Αν διαρρεύσει το κλειδί ενός χρήστη μόνο ανάγνωσης, έχετε πρόβλημα. Αν διαρρεύσει το κλειδί ενός διαχειριστή, έχετε περιστατικό ασφαλείας.
Πότε χρειάζεστε πραγματικά μακροπρόθεσμο κλειδί
Η ειλικρινής απάντηση: λιγότερο συχνά από όσο νομίζει ο κόσμος.
- Οι φόρτοι εργασίας στο AWS (EC2, Lambda, ECS, EKS) πρέπει να χρησιμοποιούν ρόλους IAM. Το SDK παίρνει αυτόματα βραχύβια διαπιστευτήρια και δεν υπάρχει τίποτα για εναλλαγή ή για διαρροή.
- Οι άνθρωποι πρέπει να συνδέονται μέσω IAM Identity Center ή
federated SSO και να παίρνουν προσωρινά διαπιστευτήρια με
aws sso login. - Τα συστήματα CI, όπως το GitHub Actions, μπορούν να αναλάβουν ρόλο μέσω OIDC χωρίς αποθηκευμένο κλειδί.
- Τα μακροπρόθεσμα κλειδιά μένουν για όσες περιπτώσεις δεν μπορούν να κάνουν τίποτα από τα παραπάνω: ένα εργαλείο σε laptop χωρίς υποστήριξη SSO, μια υπηρεσία τρίτου που δέχεται μόνο στατικά κλειδιά, μια παλιά εργασία που δεν έχετε μεταφέρει ακόμη.
Αν χρειάζεστε ένα, δημιουργήστε το σε ξεχωριστό χρήστη IAM με την πιο περιορισμένη πολιτική που κάνει τη δουλειά, και ποτέ στον λογαριασμό διαχειριστή ενός ανθρώπου.
Δημιουργία και ρύθμιση κλειδιού
Στην κονσόλα IAM ανοίξτε τον χρήστη, επιλέξτε «Security credentials» και μετά «Create access key». Διαλέξτε την περίπτωση χρήσης που ρωτά το AWS, διαβάστε την εναλλακτική που προτείνει και συνεχίστε. Το secret εμφανίζεται ακριβώς μία φορά. Αποθηκεύστε το αμέσως στο σύστημα διαχείρισης μυστικών ή στον διαχειριστή κωδικών πρόσβασης, ή κατεβάστε το CSV και διαγράψτε το μετά την εισαγωγή. Κάθε χρήστης IAM μπορεί να έχει το πολύ δύο κλειδιά ταυτόχρονα, και αυτό είναι που κάνει δυνατή την εναλλαγή.
Σε έναν υπολογιστή, ρυθμίστε ένα προφίλ με όνομα αντί για το προεπιλεγμένο:
aws configure --profile deploy-tool
# AWS Access Key ID [None]: AKIA...
# AWS Secret Access Key [None]: ...
# Default region name [None]: eu-west-1
Η εντολή γράφει τα ~/.aws/credentials και ~/.aws/config.
Περιορίστε το αρχείο στον χρήστη σας με chmod 600. Για containers
και CI, περάστε τα AWS_ACCESS_KEY_ID και AWS_SECRET_ACCESS_KEY
ως secrets από τον χώρο αποθήκευσης της πλατφόρμας, όχι ως απλές
μεταβλητές σε αρχείο YAML. Μην τα δίνετε ποτέ σε γραμμή εντολών,
όπου καταλήγουν στο ιστορικό του shell.
Εναλλαγή χωρίς να χαλάσει τίποτα
Η εναλλαγή γίνεται σε τέσσερα βήματα και είναι δυνατή χάρη στο όριο των δύο κλειδιών.
- Δημιουργήστε το δεύτερο κλειδί στον ίδιο χρήστη.
- Περάστε το νέο κλειδί παντού όπου χρησιμοποιείται το παλιό: ρυθμίσεις, secrets του CI, την εγγραφή στο σύστημα διαχείρισης μυστικών. Η κονσόλα IAM δείχνει πότε χρησιμοποιήθηκε τελευταία φορά κάθε κλειδί, οπότε βλέπετε αν σας ξέφυγε κάποιο.
- Απενεργοποιήστε το παλιό κλειδί. Περιμένετε μία ημέρα ή έναν κύκλο deploy. Αν κάτι χαλάσει, ενεργοποιήστε το ξανά, διορθώστε το σημείο που το χρησιμοποιεί και δοκιμάστε πάλι.
- Διαγράψτε το παλιό κλειδί μόλις πάψει να το χρησιμοποιεί οτιδήποτε.
Να το κάνετε σε τακτά διαστήματα για τα κλειδιά που πρέπει να υπάρχουν, και για όλα όταν συμβεί κάτι: μια αποχώρηση, μια αλλαγή προμηθευτή, ένα χαμένο laptop, μια πιθανή διαρροή. Τα AWS Config και IAM Access Analyzer μπορούν να επισημαίνουν κλειδιά παλαιότερα από όσο επιτρέπει η πολιτική σας.
Όταν ένα κλειδί εκτεθεί
Θεωρήστε παραβιασμένο κάθε κλειδί που εμφανίστηκε σε αποθετήριο, log, ticket ή συνομιλία, ακόμη κι αν διαγράφηκε ένα λεπτό αργότερα. Οι σαρωτές βρίσκουν τα μυστικά που ανέβηκαν σε αποθετήριο μέσα σε δευτερόλεπτα.
- Απενεργοποιήστε το κλειδί στο IAM τώρα. Μην περιμένετε να δημιουργήσετε πρώτα το νέο κλειδί, εκτός αν η διακοπή λειτουργίας θα ήταν χειρότερη από την έκθεση.
- Δημιουργήστε νέο κλειδί και περάστε το στα σημεία που χρησιμοποιούσαν το παλιό.
- Διαβάστε το CloudTrail για κάθε ενέργεια που έγινε με αυτό το access key ID από τη στιγμή της έκθεσης. Ψάξτε για νέους χρήστες IAM ή νέα κλειδιά, νέα instances, αλλαγμένες πολιτικές bucket και άγνωστα regions.
- Ελέγξτε τις χρεώσεις και το Cost Explorer για απότομες αυξήσεις που μοιάζουν με εξόρυξη κρυπτονομισμάτων.
- Αφαιρέστε το secret από τον κώδικα, τα logs και το ιστορικό
του git. Όταν το AWS εντοπίσει δημόσια διαρροή, μπορεί να
προσθέσει το ίδιο την πολιτική
AWSCompromisedKeyQuarantineστον χρήστη. Αφήστε την στη θέση της μέχρι να τελειώσει ο καθαρισμός. - Διαγράψτε το παλιό κλειδί, βρείτε πώς έφτασε εκεί και κλείστε αυτόν τον δρόμο.
Πώς στέλνετε ένα AWS secret key σε έναν άνθρωπο
Μερικές φορές το κλειδί πρέπει να φτάσει σε άνθρωπο: σε έναν εξωτερικό συνεργάτη που το χρειάζεται για ένα εργαλείο deploy, σε έναν developer που μπαίνει σε ένα έργο πριν στηθεί το SSO, σε μια ενσωμάτωση προμηθευτή που ζητά να το επικολλήσετε στον πίνακα ελέγχου της. Το email, το Slack και τα tickets κρατούν όλα αντίγραφα, και ένα secret 40 χαρακτήρων σε οποιοδήποτε από αυτά διαβάζεται για χρόνια.
Η ασφαλής διαδικασία παίρνει ένα λεπτό:
- Δημιουργήστε κλειδί για αυτό το άτομο σε ξεχωριστό χρήστη IAM, με την πολιτική που χρειάζεται η δουλειά του και τίποτα παραπάνω. Μη στέλνετε κλειδί που χρησιμοποιεί οτιδήποτε άλλο.
- Επικολλήστε μόνο το secret access key σε έναν σύνδεσμο μίας χρήσης. Κρυπτογραφείται στο πρόγραμμα περιήγησής σας πριν αποθηκευτεί, το αποθηκευμένο αντίγραφο καταστρέφεται μόλις ανοιχτεί ο σύνδεσμος για πρώτη φορά, και ο σύνδεσμος λήγει σε μία ώρα, μία ημέρα ή μία εβδομάδα αν δεν τον ανοίξει κανείς.
- Στείλτε τον σύνδεσμο με μία γραμμή εξήγησης. Στείλτε το access key ID, το region και το όνομα του προφίλ σε ξεχωριστό μήνυμα. Κανένα από αυτά δεν είναι μυστικό από μόνο του.
- Προσθέστε φράση πρόσβασης με λογαριασμό Pro για οτιδήποτε πέρα από πρόσβαση μόνο ανάγνωσης, και δώστε την με SMS ή τηλεφωνικά.
- Επιβεβαιώστε ότι τον άνοιξε. Αν ο σύνδεσμος δείχνει ότι έχει ήδη προβληθεί και ο παραλήπτης δεν τον άνοιξε, απενεργοποιήστε το κλειδί και ξεκινήστε από την αρχή.
- Απενεργοποιήστε το κλειδί όταν τελειώσει η συνεργασία, και διαγράψτε το μετά.
Ο οδηγός για τα κλειδιά API περιγράφει την ίδια διαδικασία για άλλους παρόχους, και ο οδηγός ασφαλής κοινή χρήση συνδέσμων για developers δείχνει πώς αυτοματοποιείτε την παράδοση με script κατά το onboarding.
