Βέλτιστες πρακτικές για την ασφαλή αποθήκευση κλειδιών API

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

Πρόσφατα, έχω δει μερικούς ανθρώπους να ανακοινώνουν ότι αποθηκεύουν κλειδιά API στα ιδιωτικά τους αποθετήρια GitHub. Γράφω αυτό το άρθρο επειδή οι άνθρωποι πρέπει να κατανοήσουν τους κινδύνους αποθήκευσης κλειδιών API με τον κωδικό σας.

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

Λοιπόν, ποιο ακριβώς είναι το πρόβλημα με την αποθήκευση ευαίσθητων πληροφοριών κοντά στον κώδικά σας σε ένα αποθετήριο Git;

Γιατί δεν πρέπει να αποθηκεύετε κλειδιά API σε αποθετήρια Git

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

Ας ξεκινήσουμε εξετάζοντας γιατί είναι άσχημη η αποθήκευση κλειδιών API σε δημόσιαgit αποθετήρια.

Από τη φύση τους, ένα δημόσιο gitαποθετήριο μπορεί να έχει πρόσβαση από οποιονδήποτε.

Με άλλα λόγια, οποιοσδήποτε διαθέτει σύνδεση στο Διαδίκτυο μπορεί να έχει πρόσβαση στα περιεχόμενα ενός δημόσιου gitαποθετηρίου. Όχι μόνο αυτό, αλλά μπορούν επίσης να περιηγηθούν σε όλο τον κώδικα μέσα στο αποθετήριο και ενδεχομένως ακόμη και να τον τρέξουν. Εάν αποθηκεύσετε ένα κλειδί API σε ένα δημόσιο αποθετήριο, δημοσιεύετε στο ύπαιθρο, έτσι ώστε όλοι να μπορούν να το δουν.

Μια πρόσφατη αναζήτηση για το client_secret στο GitHub αποκάλυψε ότι υπάρχουν περισσότερες από 30.000 δεσμεύσεις που ενδέχεται να εκθέσουν ένα κλειδί και ένα μυστικό API. Σε ορισμένες περιπτώσεις, αντιγράφετε και επικολλάτε τον κώδικα μόνο για άμεση πρόσβαση στο API.

Αυτό το πρόβλημα γίνεται τόσο σημαντικό που ορισμένες εταιρείες επενδύουν σε πόρους για να βεβαιωθούν ότι δεν έχουν διαρρεύσει κλειδιά και μυστικά API.

Πέρυσι, ο Slack άρχισε να ψάχνει για εκτεθειμένα διακριτικά API και να τα ακυρώνει προληπτικά. Αυτή η ενέργεια αποτρέπει την κακόβουλη πρόσβαση στους λογαριασμούς του Slack, αλλά δεν είναι δυνατό να βρει όλα τα διακριτικά διακριτικά.

Αυτό συμβαίνει σε δημόσια αποθετήρια Git. Τι γίνεται με τα ιδιωτικά ; Γιατί είναι ένα πρόβλημα;

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

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

Λοιπόν, πού πρέπει να αποθηκευτούν τα κλειδιά API;

Υπάρχουν πολλές εναλλακτικές λύσεις για την ασφαλή αποθήκευση κλειδιών και μυστικών API. Ορισμένα από αυτά σας επιτρέπουν να χρησιμοποιήσετε το αποθετήριο Git και να κρυπτογραφήσετε τα ευαίσθητα δεδομένα. Άλλα εργαλεία είναι πιο εξελιγμένα και αποκρυπτογραφούν ευαίσθητες πληροφορίες ως μέρος μιας ροής εργασίας ανάπτυξης. Ας δούμε μερικές από τις διαθέσιμες λύσεις.

git-remote-gcrypt

Η πρώτη λύση σάς επιτρέπει να κρυπτογραφείτε ένα ολόκληρο αποθετήριο Git. Το git-remote-gcrypt το κάνει αυτό προσθέτοντας λειτουργικότητα στους απομακρυσμένους βοηθούς του Git έτσι ώστε να είναι διαθέσιμο ένα νέο επίπεδο κρυπτογραφημένης μεταφοράς. Οι χρήστες πρέπει μόνο να δημιουργήσουν ένα νέο κρυπτογραφημένο τηλεχειριστήριο και να σπρώξουν κώδικα σε αυτό.

Διαβάστε παρακάτω αν αναζητάτε μια πιο λεπτομερής λύση που σας επιτρέπει να κρυπτογραφείτε μεμονωμένα αρχεία.

git-secret

git-secretείναι ένα εργαλείο που λειτουργεί στο τοπικό μηχάνημά σας και κρυπτογραφεί συγκεκριμένα αρχεία πριν τα προωθήσετε στο αποθετήριο σας. Πίσω από τα παρασκήνια, git-secretυπάρχει ένα σενάριο κελύφους που χρησιμοποιεί το GNU Privacy Guard (GPG) για την κρυπτογράφηση και αποκρυπτογράφηση αρχείων που ενδέχεται να έχουν ευαίσθητες πληροφορίες.

git-crypt

Μια άλλη λύση είναι git-crypt. Είναι πολύ παρόμοιο με το git-secret στον τρόπο λειτουργίας του, αλλά έχει κάποιες ενδιαφέρουσες διαφορές.

Το πρώτο πράγμα που πρέπει να παρατηρήσετε git-cryptείναι ότι είναι ένα δυαδικό εκτελέσιμο και όχι ένα σενάριο κελύφους, όπως είναι το git-secret. Όντας δυαδικό εκτελέσιμο σημαίνει ότι για να το χρησιμοποιήσετε πρώτα πρέπει να το μεταγλωττίσετε, ή πρέπει να βρείτε μια δυαδική διανομή για το μηχάνημά σας.

Εάν χρησιμοποιείτε Mac, είστε τυχεροί επειδή το HomeBrew προσφέρει ένα git-cryptπακέτο έτοιμο για εγκατάσταση. Το μόνο που έχετε να κάνετε είναι να εκτελέσετε εγκατάσταση παρασκευής git-cryptσε ένα τερματικό.

Μαύρο κουτί

Το BlackBox είναι ένα εργαλείο που δημιουργήθηκε από το Stack Overflow. Αυτή είναι η εταιρεία πίσω από δημοφιλείς κοινότητες Q&A, όπως το ίδιο το Stack Overflow, το Server Fault και το Super User. Το BlackBox είναι ένα ισχυρό εργαλείο καθώς λειτουργεί με το Git καθώς και με άλλα συστήματα ελέγχου εκδόσεων όπως το Mercurial και το Subversion.

Υποστηρίζει επίσης την κρυπτογράφηση μικρών συμβολοσειρών και όχι μόνο ολόκληρων αρχείων. Αυτό το κάνει όταν εργάζεστε με το Puppet's και χρησιμοποιεί το Hiera του Puppet, ένα εργαλείο αναζήτησης βασικών τιμών για δεδομένα διαμόρφωσης.

Η δυνατότητα κρυπτογράφησης και αποκρυπτογράφησης μεμονωμένων συμβολοσειρών καθιστά το BlackBox μια εξαιρετική λύση για την ασφάλεια κλειδιών και μυστικών API.

Διαμόρφωση Heroku και Config Vars

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

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

Το Dokku, μια λύση ανοιχτού κώδικα όπως το Heroku, προσφέρει τις ίδιες δυνατότητες.

Μυστικά του Docker

Στο τέλος του φάσματος των πιθανών λύσεων είναι τα μυστικά του Docker. Αυτή η λύση εισήχθη από τον Docker τον Φεβρουάριο του 2017. Από τότε έχει αποκτήσει δημοτικότητα.

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

Αυτή η προσέγγιση καθιστά τα μυστικά του Docker την τέλεια λύση για την αποθήκευση και τη χρήση κλειδιών και μυστικών API με ασφαλή και κρυπτογραφημένο τρόπο.

Περίληψη

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

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

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

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