Έρχεται ένας νέος developer ή ξεκινά ένας εξωτερικός συνεργάτης, και το πρώτο που χρειάζεται είναι το .env που κάνει το project να τρέξει. Αυτό το αρχείο είναι συνήθως ένα μείγμα από αθώες ρυθμίσεις και τις πιο ευαίσθητες τιμές που έχει η ομάδα, και για αυτό καταλήγει τόσο συχνά σε ένα προσωπικό μήνυμα ή σε ένα συνημμένο email με τίτλο «config».
Για να παραδώσετε με ασφάλεια ένα αρχείο ρυθμίσεων σε έναν developer, δείτε το ως δύο πράγματα: τις ρυθμίσεις, που μπορούν να ταξιδέψουν οπουδήποτε, και τα μυστικά, που ταξιδεύουν μία φορά μέσα από ένα κανάλι που δεν κρατά αντίγραφα. Αυτός ο οδηγός εξηγεί πώς τα χωρίζετε, πώς στέλνετε το μυστικό μέρος και τι να πείτε στον developer ώστε το αρχείο να μείνει ασφαλές αφού φτάσει.
Διαβάστε το αρχείο σαν να ήταν δημόσια κάθε γραμμή
Ανοίξτε το αρχείο και βάλτε κάθε γραμμή σε μία από δύο ομάδες.
- Ρυθμίσεις: επίπεδα καταγραφής, θύρες, feature flags, endpoints εκτός παραγωγής, δημόσια client ID. Αυτά ανήκουν στο αποθετήριο ως αρχείο παραδείγματος και μπορούν να σταλούν με όποιον τρόπο θέλετε.
- Μυστικά: κωδικοί πρόσβασης βάσεων δεδομένων, κλειδιά API, μυστικά υπογραφής, ιδιωτικά κλειδιά, OAuth client secrets, οτιδήποτε δίνει πρόσβαση. Αναζητήστε
PASSWORD,SECRET,TOKEN,KEYκαιPRIVATEκαι μετά διαβάστε και τα υπόλοιπα, γιατί ένα connection string με ενσωματωμένο τον κωδικό δεν το φωνάζει.
Μετά αναρωτηθείτε τι ακριβώς θα κάνει ο developer. Η τοπική ανάπτυξη πάνω στο staging χρειάζεται τις τιμές του staging. Δεν χρειάζεται κλειδιά παραγωγής, ούτε το live κλειδί του παρόχου πληρωμών μόνο και μόνο επειδή έτυχε να υπάρχει στο αρχείο.
Κρατήστε τα μυστικά έξω από το αρχείο που μπαίνει στο αποθετήριο
Το .env.example που μπαίνει στο αποθετήριο τεκμηριώνει κάθε μεταβλητή με μια τιμή-υποκατάστατο. Οι πραγματικές τιμές εισάγονται κατά την εκτέλεση από το περιβάλλον, από έναν διαχειριστή μυστικών ή από τον χώρο αποθήκευσης μυστικών της ίδιας της πλατφόρμας. Με αυτό το μοτίβο, το αρχείο που παραδίδετε περιέχει μόνο τις μυστικές τιμές, και το τοπικό αντίγραφο του developer είναι το μόνο σημείο όπου βρίσκονται όλες μαζί.
# .env.example (committed)
DATABASE_URL=postgres://app:CHANGE_ME@staging-db.internal:5432/app
STRIPE_SECRET_KEY=sk_test_CHANGE_ME
SESSION_SECRET=CHANGE_ME
LOG_LEVEL=debug
Προσθέστε το .env στο .gitignore πριν αποκτήσει κανείς πραγματικό αρχείο, και σκεφτείτε ένα pre-commit hook όπως το gitleaks, ώστε ένα commit που ξέφυγε να αποτύχει αμέσως.
Δώστε στον developer δικά του διαπιστευτήρια όπου γίνεται
Η παράδοση είναι και μια ευκαιρία να σταματήσει η κοινή χρήση. Αν η βάση δεδομένων υποστηρίζει ατομικούς χρήστες, δημιουργήστε έναν για τον developer, με τα δικαιώματα που χρειάζεται η δουλειά του και ημερομηνία λήξης. Αν το API προσφέρει κλειδιά με περιορισμούς, εκδώστε ένα στο όνομά του. Ο οδηγός για προσωρινά στοιχεία σύνδεσης εξωτερικού συνεργάτη σε βάση δεδομένων περιγράφει αυτό το μοτίβο. Διαπιστευτήρια που φτιάχτηκαν για ένα άτομο αφαιρούνται για ένα άτομο.
Πώς παραδίδετε τις μυστικές τιμές
Υπάρχουν δύο τρόποι, και κανένας δεν αφήνει το αρχείο μέσα σε ένα μήνυμα.
Επικολλήστε τις μυστικές γραμμές σε σύνδεσμο μίας χρήσης. Ανοίξτε το εργαλείο μυστικών συνδέσμων, επικολλήστε μόνο τις γραμμές που περιέχουν μυστικά και δημιουργήστε τον σύνδεσμο. Το κείμενο κρυπτογραφείται στο πρόγραμμα περιήγησής σας πριν αποθηκευτεί, το αποθηκευμένο αντίγραφο καταστρέφεται την πρώτη φορά που ανοίγει ο σύνδεσμος, και ο σύνδεσμος λήγει σε μία ώρα, 24 ώρες ή επτά ημέρες αν δεν τον ανοίξει κανείς. Χωρίς λογαριασμό χωρούν έως 10.000 χαρακτήρες, πολλαπλάσιο του μεγέθους των περισσότερων αρχείων .env.
Επισυνάψτε ολόκληρο το αρχείο σε μυστικό σύνδεσμο. Από λογαριασμό LinkPilot, αφού συνδεθείτε, μπορείτε να επισυνάψετε σε ένα μυστικό έως τρία αρχεία των 9 MB το καθένα. Κάθε αρχείο κρυπτογραφείται στο πρόγραμμα περιήγησής σας με κλειδί που παράγεται από το κλειδί του ίδιου του μυστικού, οπότε ο διακομιστής δεν έχει ποτέ το μη κρυπτογραφημένο αρχείο, και το συνημμένο διαγράφεται μετά τη μοναδική λήψη. Αυτός είναι ο καλύτερος τρόπος όταν το αρχείο πρέπει να φτάσει ακριβώς όπως είναι, byte προς byte, για παράδειγμα ένα αρχείο JSON λογαριασμού υπηρεσίας ή ένα keystore.
Και στις δύο περιπτώσεις:
- Επαληθεύστε τον developer μέσα από το κανάλι πρόσληψης ή σύμβασης, όχι από τη διεύθυνση που ζήτησε το αρχείο.
- Ορίστε τη λήξη στο χρονικό διάστημα που θα χρειαστεί πραγματικά. Μία ώρα αν περιμένει, μία ημέρα αν βρίσκεται σε άλλη ζώνη ώρας.
- Ορίστε το όριο προβολών σε μία.
- Προσθέστε φράση πρόσβασης σε λογαριασμό Pro για τιμές παραγωγής, και στείλτε τη από άλλο κανάλι.
- Στείλτε τον σύνδεσμο με μια σημείωση μίας γραμμής που λέει τι είναι και πού μπαίνει το αρχείο. Τις μη μυστικές ρυθμίσεις στείλτε τις χωριστά ή παραπέμψτε στο αρχείο παραδείγματος στο αποθετήριο.
Μια πρόσκληση σε κρύπτη είναι καλύτερη λύση όταν ο developer είναι μόνιμο μέλος της ομάδας και η ομάδα σας χρησιμοποιεί ήδη διαχειριστή μυστικών με πρόσβαση ανά developer. Χρησιμοποιήστε τον σύνδεσμο μίας χρήσης για το διάστημα μέχρι να στηθεί αυτό, και για όποιον δεν θα μπει ποτέ στην κρύπτη.
Πείτε στον developer πού μπαίνει το αρχείο
Μια καθαρή παράδοση μπορεί και πάλι να καταλήξει άσχημα αν το αρχείο βρεθεί σε έναν κοινόχρηστο φάκελο. Στείλτε τα παρακάτω μαζί με τα διαπιστευτήρια:
- Αποθηκεύστε το ως
.envστη ρίζα του project και πουθενά αλλού. Ελέγξτε ότι καλύπτεται από το.gitignoreπριν από το πρώτο commit. - Μην επικολλάτε τιμές σε tickets ή σε chat για να ρωτήσετε αν είναι σωστές. Αναφέρετε μια μεταβλητή που λείπει ή δεν ισχύει μόνο με το όνομά της, και ο αποστολέας θα εκδώσει νέα τιμή.
- Αλλαγή τιμών στην αποχώρηση. Όταν τελειώσει η συνεργασία, οι τιμές αυτού του αρχείου αλλάζουν. Πείτε το από την αρχή, ώστε να μην εκπλαγεί κανείς.
Επιβεβαίωση και καθάρισμα
Ζητήστε από τον developer να επιβεβαιώσει το όνομα του αρχείου, το περιβάλλον και ένα μη μυστικό σημάδι, όπως ένα σχόλιο έκδοσης στην πρώτη γραμμή. Αν ένας σύνδεσμος μίας χρήσης δείχνει ότι άνοιξε πριν τον ανοίξει εκείνος, θεωρήστε εκτεθειμένη κάθε τιμή που περιείχε και αλλάξτε τες.
Όταν ολοκληρωθεί η παράδοση, ανακαλέστε όποιον σύνδεσμο δεν άνοιξε ποτέ, σβήστε κάθε προσωρινό αντίγραφο που κάνατε, και καταγράψτε ποιος πήρε τις τιμές ποιου περιβάλλοντος και πότε. Αυτή η καταγραφή είναι η διαδρομή ελέγχου (audit trail). Το ίδιο το αρχείο πρέπει να υπάρχει μόνο στον υπολογιστή που το χρειάζεται.
