Ασφάλεια

    AWS access key και secret key: πώς τα δημιουργείτε, τα χρησιμοποιείτε, τα αλλάζετε και τα στέλνετε με ασφάλεια

    Access key ID και secret access key του AWS: γιατί το secret εμφανίζεται μία φορά, πώς κάνετε εναλλαγή, τι κάνετε σε διαρροή, πώς το στέλνετε με ασφάλεια.

    LinkPilot Team · Οι άνθρωποι που φτιάχνουν και λειτουργούν το LinkPilot στην TetraCore, LLC · Σχετικά με το LinkPilot

    Ένα 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 IDSecret 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.

    Εναλλαγή χωρίς να χαλάσει τίποτα

    Η εναλλαγή γίνεται σε τέσσερα βήματα και είναι δυνατή χάρη στο όριο των δύο κλειδιών.

    1. Δημιουργήστε το δεύτερο κλειδί στον ίδιο χρήστη.
    2. Περάστε το νέο κλειδί παντού όπου χρησιμοποιείται το παλιό: ρυθμίσεις, secrets του CI, την εγγραφή στο σύστημα διαχείρισης μυστικών. Η κονσόλα IAM δείχνει πότε χρησιμοποιήθηκε τελευταία φορά κάθε κλειδί, οπότε βλέπετε αν σας ξέφυγε κάποιο.
    3. Απενεργοποιήστε το παλιό κλειδί. Περιμένετε μία ημέρα ή έναν κύκλο deploy. Αν κάτι χαλάσει, ενεργοποιήστε το ξανά, διορθώστε το σημείο που το χρησιμοποιεί και δοκιμάστε πάλι.
    4. Διαγράψτε το παλιό κλειδί μόλις πάψει να το χρησιμοποιεί οτιδήποτε.

    Να το κάνετε σε τακτά διαστήματα για τα κλειδιά που πρέπει να υπάρχουν, και για όλα όταν συμβεί κάτι: μια αποχώρηση, μια αλλαγή προμηθευτή, ένα χαμένο laptop, μια πιθανή διαρροή. Τα AWS Config και IAM Access Analyzer μπορούν να επισημαίνουν κλειδιά παλαιότερα από όσο επιτρέπει η πολιτική σας.

    Όταν ένα κλειδί εκτεθεί

    Θεωρήστε παραβιασμένο κάθε κλειδί που εμφανίστηκε σε αποθετήριο, log, ticket ή συνομιλία, ακόμη κι αν διαγράφηκε ένα λεπτό αργότερα. Οι σαρωτές βρίσκουν τα μυστικά που ανέβηκαν σε αποθετήριο μέσα σε δευτερόλεπτα.

    1. Απενεργοποιήστε το κλειδί στο IAM τώρα. Μην περιμένετε να δημιουργήσετε πρώτα το νέο κλειδί, εκτός αν η διακοπή λειτουργίας θα ήταν χειρότερη από την έκθεση.
    2. Δημιουργήστε νέο κλειδί και περάστε το στα σημεία που χρησιμοποιούσαν το παλιό.
    3. Διαβάστε το CloudTrail για κάθε ενέργεια που έγινε με αυτό το access key ID από τη στιγμή της έκθεσης. Ψάξτε για νέους χρήστες IAM ή νέα κλειδιά, νέα instances, αλλαγμένες πολιτικές bucket και άγνωστα regions.
    4. Ελέγξτε τις χρεώσεις και το Cost Explorer για απότομες αυξήσεις που μοιάζουν με εξόρυξη κρυπτονομισμάτων.
    5. Αφαιρέστε το secret από τον κώδικα, τα logs και το ιστορικό του git. Όταν το AWS εντοπίσει δημόσια διαρροή, μπορεί να προσθέσει το ίδιο την πολιτική AWSCompromisedKeyQuarantine στον χρήστη. Αφήστε την στη θέση της μέχρι να τελειώσει ο καθαρισμός.
    6. Διαγράψτε το παλιό κλειδί, βρείτε πώς έφτασε εκεί και κλείστε αυτόν τον δρόμο.

    Πώς στέλνετε ένα AWS secret key σε έναν άνθρωπο

    Μερικές φορές το κλειδί πρέπει να φτάσει σε άνθρωπο: σε έναν εξωτερικό συνεργάτη που το χρειάζεται για ένα εργαλείο deploy, σε έναν developer που μπαίνει σε ένα έργο πριν στηθεί το SSO, σε μια ενσωμάτωση προμηθευτή που ζητά να το επικολλήσετε στον πίνακα ελέγχου της. Το email, το Slack και τα tickets κρατούν όλα αντίγραφα, και ένα secret 40 χαρακτήρων σε οποιοδήποτε από αυτά διαβάζεται για χρόνια.

    Η ασφαλής διαδικασία παίρνει ένα λεπτό:

    1. Δημιουργήστε κλειδί για αυτό το άτομο σε ξεχωριστό χρήστη IAM, με την πολιτική που χρειάζεται η δουλειά του και τίποτα παραπάνω. Μη στέλνετε κλειδί που χρησιμοποιεί οτιδήποτε άλλο.
    2. Επικολλήστε μόνο το secret access key σε έναν σύνδεσμο μίας χρήσης. Κρυπτογραφείται στο πρόγραμμα περιήγησής σας πριν αποθηκευτεί, το αποθηκευμένο αντίγραφο καταστρέφεται μόλις ανοιχτεί ο σύνδεσμος για πρώτη φορά, και ο σύνδεσμος λήγει σε μία ώρα, μία ημέρα ή μία εβδομάδα αν δεν τον ανοίξει κανείς.
    3. Στείλτε τον σύνδεσμο με μία γραμμή εξήγησης. Στείλτε το access key ID, το region και το όνομα του προφίλ σε ξεχωριστό μήνυμα. Κανένα από αυτά δεν είναι μυστικό από μόνο του.
    4. Προσθέστε φράση πρόσβασης με λογαριασμό Pro για οτιδήποτε πέρα από πρόσβαση μόνο ανάγνωσης, και δώστε την με SMS ή τηλεφωνικά.
    5. Επιβεβαιώστε ότι τον άνοιξε. Αν ο σύνδεσμος δείχνει ότι έχει ήδη προβληθεί και ο παραλήπτης δεν τον άνοιξε, απενεργοποιήστε το κλειδί και ξεκινήστε από την αρχή.
    6. Απενεργοποιήστε το κλειδί όταν τελειώσει η συνεργασία, και διαγράψτε το μετά.

    Ο οδηγός για τα κλειδιά API περιγράφει την ίδια διαδικασία για άλλους παρόχους, και ο οδηγός ασφαλής κοινή χρήση συνδέσμων για developers δείχνει πώς αυτοματοποιείτε την παράδοση με script κατά το onboarding.

    Εργαλεία για αυτό το άρθρο

    Συχνές ερωτήσεις

    Το LinkPilot στέλνει έναν μυστικό σύνδεσμο που διαγράφεται μόλις ανοιχτεί.

    Κρυπτογραφείται στο πρόγραμμα περιήγησής σας, εμφανίζεται μία φορά και μετά καταστρέφεται. Χωρίς λογαριασμό.

    Δημιουργία μυστικού συνδέσμου

    Διαβάστε επίσης

    Ασφάλεια

    Πώς στέλνετε διαπιστευτήρια SSH με σύνδεσμο που λήγει

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

    Ασφάλεια

    Πώς στέλνετε στοιχεία σύνδεσης με ασφάλεια χωρίς email

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

    Ασφάλεια

    Ασφαλής αποστολή μυστικού υπογραφής webhook σε πελάτη

    Δώστε στον πελάτη το μυστικό υπογραφής webhook χωρίς αντίγραφα σε email ή ticket: επαληθεύστε τον παραλήπτη, στείλτε σύνδεσμο μίας χρήσης, αλλάξτε το αν εκτεθεί.