Μεταβλητές περιβάλλοντος και secrets στο Dockup
Μεταβλητές περιβάλλοντος και secrets στο Dockup: ασφαλής ορισμός, εισαγωγή, απόκρυψη, rotation και redeploy της διαμόρφωσης για services και autonomous agents.
Οι μεταβλητές περιβάλλοντος και τα secrets συνδέουν τον κώδικα της εφαρμογής με τη configuration του production, όμως έχουν διαφορετικές απαιτήσεις ως προς την αποκάλυψη και τον κύκλο ζωής τους. Ένα public API base URL μπορεί να εμφανίζεται με ασφάλεια στα logs· ένας κωδικός βάσης δεδομένων ή ένα signing key όχι. Το Dockup αποτυπώνει ρητά αυτήν τη διάκριση και αποκρύπτει τις αποθηκευμένες τιμές secrets στα αποτελέσματα ανάγνωσης.
Οι αλλαγές στη configuration απαιτούν επίσης redeploy. Ο ορισμός μιας νέας τιμής ενημερώνει την επιθυμητή configuration του service, όμως η διεργασία που εκτελείται ήδη συνεχίζει να χρησιμοποιεί το environment που έλαβε κατά την εκκίνηση.
Ποια είναι η διαφορά μεταξύ μιας μεταβλητής και ενός secret;
Και οι δύο τιμές εισέρχονται στη διεργασία της εφαρμογής ως δεδομένα περιβάλλοντος, όμως η επιχειρησιακή διαχείρισή τους διαφέρει.
| Τύπος | Παράδειγμα | Μπορεί να εμφανίζεται στα αποτελέσματα ανάγνωσης; | Προτεινόμενη διαχείριση |
|---|---|---|---|
| Απλή μεταβλητή | NODE_ENV=production | Ναι | Configuration που μπορεί να ελεγχθεί |
| Απλή μεταβλητή | PUBLIC_API_URL=https://... | Ναι | Μπορεί να βρίσκεται στο dockup.yaml |
| Secret | DATABASE_URL=postgres://... | Όχι η αποθηκευμένη τιμή | Εντολή secret ή CI store |
| Secret | JWT_SIGNING_KEY=... | Όχι η αποθηκευμένη τιμή | Rotation και περιορισμός πρόσβασης |
| Secret | DOCKUP_TOKEN=... | Ποτέ ως app config εκτός αν απαιτείται | Auth σε επίπεδο διεργασίας |
Χαρακτήρισε μια τιμή ως secret όταν η αποκάλυψή της θα επέτρεπε πρόσβαση, impersonation, αποκρυπτογράφηση, signing ή lateral movement. Το «το frontend το περιέχει ήδη» αποτελεί ένδειξη ότι η τιμή είναι public configuration και όχι secret.
Μην τοποθετείς secrets σε source control, dockup.yaml, ενδεικτικά outputs, screenshots, prompts agents ή περιγραφές issues. Ένα redacted placeholder είναι ασφαλέστερο από ένα token που μοιάζει αληθινό, επειδή τα παραδείγματα που αντιγράφονται συχνά καταλήγουν να χρησιμοποιούνται ως πρακτική στο production.
Πώς ορίζεις και ελέγχεις τη configuration του environment;
Παράθεσε τα τρέχοντα keys για έναν ακριβή target:
dockup env list -s production/api --json
Η απόκριση περιλαμβάνει κάθε key, αν είναι secret και την τιμή μόνο όταν δεν προστατεύεται.
Ορισμός μιας απλής μεταβλητής:
dockup env set NODE_ENV=production \
-s production/api \
--json
Ορισμός ενός secret από το environment του τρέχοντος shell:
dockup env set DATABASE_URL="$DATABASE_URL" \
--secret \
-s production/api \
--json
Αφαίρεση μιας obsolete τιμής:
dockup env remove OLD_FEATURE_FLAG \
-s production/api \
--json
Μαζική εισαγωγή αρχείου τύπου .env:
dockup env import .env.production \
-s production/api \
--json
Χρησιμοποίησε το --secret κατά την εισαγωγή μόνο όταν κάθε εισαγόμενη τιμή πρέπει να αντιμετωπίζεται ως secret. Τα mixed files είναι δυσκολότερα στον έλεγχο και συχνά ενθαρρύνουν είτε την υπερβολική κατηγοριοποίηση harmless configuration είτε την ελλιπή κατηγοριοποίηση credentials. Όπου είναι δυνατό, διαχώρισέ τα.
Το ακριβές command surface διατηρείται στο Dockup CLI reference.
Γιατί απαιτείται redeploy μετά από αλλαγές στη configuration;
Οι μεταβλητές περιβάλλοντος διαβάζονται κατά την εκκίνηση μιας διεργασίας. Η ενημέρωση της configuration στην πλατφόρμα δεν τροποποιεί τη μνήμη μιας διεργασίας Node.js, Python, Go ή άλλης διεργασίας που εκτελείται ήδη. Το service πρέπει να εκκινήσει νέο container με το νέο environment.
Η σωστή σειρά είναι:
dockup env set FEATURE_FLAG=on \
-s production/api \
--json
dockup deploy production/api --wait --json
Το --wait κάνει το δεύτερο βήμα επαληθεύσιμο. Το προεπιλεγμένο timeout είναι 900 δευτερόλεπτα, η έξοδος 0 σημαίνει επιτυχία και οι αποτυχίες επιστρέφουν non-zero με structured codes.
Η blue-green διαδικασία zero-downtime του Dockup εκκινεί τη νέα έκδοση, εφαρμόζει το health gate και μόνο στη συνέχεια μεταφέρει την κίνηση. Έτσι αποφεύγεται η επιτόπια επανεκκίνηση του τρέχοντος container με configuration που δεν έχει επαληθευτεί.
Αν το rotation ενός secret αλλάζει τόσο τον producer όσο και τον consumer, σχεδίασε τη συμβατότητα. Η αλλαγή του κωδικού μιας βάσης δεδομένων πριν η εφαρμογή λάβει τη νέα τιμή μπορεί να προκαλέσει outage. Χρησιμοποίησε περίοδο επικάλυψης, υποστήριξη dual-key ή ordered change, όταν το επιτρέπει το εξωτερικό σύστημα.
Οι μηχανισμοί deployment εξηγούνται στο zero-downtime deployments.
Πώς μειώνει το secret masking τον κίνδυνο για agents;
Οι coding agents συνοψίζουν συχνά το output των commands. Ένα tool που επιστρέφει αποθηκευμένα secrets μετατρέπει ένα ακίνδυνο αίτημα όπως «δείξε την τρέχουσα configuration» σε έκθεση credentials.
Το Dockup αποκρύπτει τις τιμές των secrets. Ο agent μπορεί να δει ότι το DATABASE_URL υπάρχει και έχει χαρακτηριστεί ως secret, αλλά δεν μπορεί να διαβάσει το αποθηκευμένο connection string. Μπορεί να αντικαταστήσει την τιμή όταν ο χρήστης παρέχει νέα τιμή μέσω ασφαλούς environment.
Αυτό υποστηρίζει μια ασφαλέστερη οδηγία:
Επιβεβαίωσε ότι υπάρχουν τα απαιτούμενα secret keys, αλλά μην εμφανίσεις ποτέ τις τιμές τους. Αν πρέπει να αλλάξει μια τιμή, διάβασέ την μόνο από το environment της διεργασίας και επέστρεψε το όνομα του key, όχι το secret.
Το secret masking πρέπει να επεκτείνεται και στα diagnostics. Απόφυγε:
printenv
σε transcript agent, παρόλο που η εντολή exec του PRO μπορεί να εκτελεί one-shot commands σε container. Προτίμησε έναν στοχευμένο έλεγχο της εφαρμογής που αναφέρει την παρουσία, την κατηγορία μήκους ή την επιτυχία σύνδεσης, χωρίς να αποκαλύπτει την τιμή.
Ο οδηγός AI agent production guardrails καλύπτει από κοινού τα όρια των prompts και των tools.
Πώς γίνεται το rotation και το audit των secrets;
Το rotation είναι ελεγχόμενη αλλαγή στο production και όχι απλή επεξεργασία κειμένου. Χρησιμοποίησε την εξής σειρά:
- Δημιούργησε ή απέκτησε το νέο credential στο σύστημα που το διαχειρίζεται.
- Αποθήκευσέ το στο εγκεκριμένο CI ή operator environment.
- Όρισε το νέο secret στο Dockup χωρίς να το εμφανίσεις.
- Κάνε deploy με
--wait. - Επαλήθευσε το health και τη συμπεριφορά της εφαρμογής.
- Ανακάλεσε το παλιό credential αφού ενεργοποιηθεί η νέα έκδοση.
- Έλεγξε το audit log του Dockup.
- Κατέγραψε την ημερομηνία και τον owner του rotation, χωρίς να καταγράψεις την τιμή.
dockup audit --writes --json
Τα audit στοιχεία πρέπει να δείχνουν ότι άλλαξε η configuration και ότι ακολούθησε deployment. Δεν πρέπει να περιέχουν την τιμή του secret.
Για credentials βάσεων δεδομένων, λάβε υπόψη τα connection pools. Οι υπάρχουσες συνδέσεις μπορεί να παραμείνουν authenticated μετά το rotation, ενώ οι νέες συνδέσεις θα χρησιμοποιούν τον νέο κωδικό. Η επαλήθευση πρέπει να περιλαμβάνει νέα σύνδεση και όχι μόνο requests που εξυπηρετούνται από ένα παλιό pool.
Για API keys με permissions, αποθήκευσε με ασφάλεια τη generated value κατά τη δημιουργία. Αποθήκευσέ την αμέσως στο εγκεκριμένο secret system, περιόρισέ την στα απαιτούμενα permissions και κάνε rotation χωρίς να την αναπαράγεις στο deployment output.
Ποια policy configuration αποτρέπει το drift;
Καθόρισε ποια values ανήκουν σε κάθε source:
| Source | Κατάλληλο περιεχόμενο |
|---|---|
| Repository code | Defaults που δεν εξαρτώνται από το environment |
dockup.yaml | Configuration deployment που μπορεί να ελεγχθεί |
| Dockup secret variables | Runtime credentials |
| CI secret store | Deployment token και injected rotation values |
| Managed database output | Connection data που παραδίδονται στο consuming service |
Local .env | Τιμές μόνο για developers, εξαιρούνται από το Git |
Το dockup.yaml apply είναι additive από προεπιλογή. Οι plain environment values που δεν περιλαμβάνονται στο αρχείο παραμένουν μέχρι να χρησιμοποιηθεί ρητά το --prune, ενώ τα secrets δεν γίνονται ποτέ prune μέσω αυτής της διαδρομής. Διάβασε το dockup.yaml config as code πριν υιοθετήσεις cleanup manifest.
Χρησιμοποίησε συνεπή ονόματα keys μεταξύ environments, αλλά μην θεωρείς ότι οι τιμές είναι interchangeable. Ένα staging key δεν πρέπει να παρέχει πρόσβαση στο production. Τα preview deployments σε project με private networking λαμβάνουν αυτόματα έναν read-only database user για πρόσβαση σε production data· δεν πρέπει να κληρονομούν write credentials από προεπιλογή.
Incident response για secret που διέρρευσε
Αν ένα secret εμφανιστεί σε transcript, log, commit ή screenshot, δεν αρκεί να το αποκρύψεις εκ των υστέρων. Αντιμετώπισέ το ως compromised:
- Κάνε revoke ή rotation στο source system.
- Ενημέρωσε το Dockup secret.
- Κάνε redeploy και επαλήθευσε το αποτέλεσμα.
- Αφαίρεσε το εκτεθειμένο υλικό όπου είναι δυνατό.
- Αναζήτησε ενδείξεις misuse στα audit και access logs.
- Κατέγραψε την αιτία και την αλλαγή πρόληψης.
Το rewriting του Git history μπορεί να μειώσει την πιθανότητα μελλοντικού εντοπισμού, αλλά δεν μπορεί να αποδείξει ότι ένα αντιγραμμένο credential εξαφανίστηκε. Η ανάκληση είναι η καθοριστική ενέργεια.
Checklist ελέγχου environment
Πριν από κάθε production release, επαλήθευσε ότι υπάρχουν τα απαιτούμενα keys, ότι τα secret keys έχουν χαρακτηριστεί ως secrets, ότι κανένα secret δεν έχει γίνει commit, ότι οι plain values αντιστοιχούν στο προβλεπόμενο environment και ότι το redeploy αποτελεί μέρος της αλλαγής. Στη συνέχεια, έλεγξε το status και το uptime:
dockup status production/api --json
dockup uptime production/api --hours 24 --json
Το monitoring εκτελείται κάθε λεπτό και περιλαμβάνει p95 response time. Ένα επιτυχημένο config deployment πρέπει και πάλι να παρακολουθείται για runtime regressions.
Για τη δημιουργία service και το αρχικό setup, ακολούθησε το Git repository to production.
Επικύρωσε τη configuration χωρίς να την αποκαλύψεις
Οι εφαρμογές πρέπει να αποτυγχάνουν με σαφήνεια όταν λείπει ένα απαιτούμενο key, όμως τα diagnostics δεν πρέπει να εμφανίζουν την τιμή. Ένας startup check μπορεί να αναφέρει μια λίστα όπως missing: ["DATABASE_URL"] ή invalid format: ["PUBLIC_URL"] και στη συνέχεια να τερματίζει με non-zero.
Για μια optional τιμή, όρισε το fallback στον κώδικα και τεκμηρίωσε αν το fallback είναι ασφαλές στο production. Silent development defaults—τοπικοί database hosts, debug modes, permissive CORS ή test credentials—δεν πρέπει να ενεργοποιούνται απλώς επειδή απουσίαζε ένα production key.
Αυτή η validation καθιστά τις μεταβλητές περιβάλλοντος και τα secrets observable, χωρίς να μετατρέπει τα logs σε inventory credentials.
Διαχειρίσου σκόπιμα πολλά services και shared credentials
Η αντιγραφή ενός secret σε πολλά services δημιουργεί dependency στο rotation. Προτίμησε service-specific credentials όπου το υποστηρίζει το εξωτερικό σύστημα. Ένα compromised worker token δεν πρέπει να παρέχει την ίδια πρόσβαση με το public API.
Όταν μια shared value είναι αναπόφευκτη, διατήρησε λίστα owner και consumers. Κάνε rotation σε όλους τους consumers μέσα σε συντονισμένο χρονικό παράθυρο και επαλήθευσε νέες συνδέσεις μετά από κάθε redeploy. Μην ζητάς από έναν agent να «βρει κάθε service που πιθανότατα χρησιμοποιεί αυτό το key» με βάση την ομοιότητα ονομάτων· χρησιμοποίησε explicit inventory και audit evidence.
Το private networking μπορεί να μειώσει την έκθεση της κίνησης προς τη βάση δεδομένων, αλλά δεν καθιστά περιττά τα credentials. Τα internal hostnames ελέγχουν τη διαδρομή· το authentication ελέγχει ποιος μπορεί να χρησιμοποιήσει τη βάση.
Ξεκίνα με ένα επαληθεύσιμο deployment
Κατηγοριοποίησε κάθε key πριν το ορίσεις, επαλήθευσε ότι τα reads των secrets είναι masked και συμπεριέλαβε το απαιτούμενο redeploy στην ίδια reviewed αλλαγή.
Ξεκίνα δωρεάν στο app.dockup.ai. Το Free plan κοστίζει $0 τον μήνα, περιλαμβάνει αρχικό credit $10 και υποστηρίζει ένα workspace, τρεις βάσεις δεδομένων και τρία deployments.
FAQ
Επιστρέφει το Dockup αποθηκευμένες τιμές secrets;
Όχι. Οι τιμές των secrets είναι masked στα αποτελέσματα ανάγνωσης. Τα keys και οι ενδείξεις secret παραμένουν ορατά, ώστε οι operators να μπορούν να επαληθεύσουν ότι υπάρχει η απαιτούμενη configuration.
Γιατί πρέπει να κάνω redeploy μετά την αλλαγή μιας μεταβλητής περιβάλλοντος;
Η διεργασία που εκτελείται έλαβε το environment της κατά την εκκίνηση. Ένα νέο deployment δημιουργεί νέο container με τις ενημερωμένες τιμές και το επαληθεύει μέσω του health gate.
Μπορώ να βάλω secrets στο dockup.yaml;
Όχι. Χρησιμοποίησε το dockup.yaml για plain configuration που μπορεί να ελεγχθεί και χρησιμοποίησε secret environment commands ή CI secret injection για credentials.
Πώς εισάγω πολλές μεταβλητές περιβάλλοντος;
Χρησιμοποίησε το dockup env import με ένα αρχείο τύπου .env και τον ακριβή service target. Χρησιμοποίησε την επιλογή import --secret μόνο όταν όλες οι εισαγόμενες τιμές είναι secrets.
Τι πρέπει να κάνω αν ένα secret εκτεθεί σε log;
Κάνε αμέσως revoke ή rotation, ενημέρωσε το Dockup secret, κάνε redeploy, διερεύνησε τα access logs και διόρθωσε τη διαδικασία που επέτρεψε την αποκάλυψη.
