ΑΣΦΑΛΕΙΑ · 6′ ΑΝΑΓΝΩΣΗ · ΑΠΟ ΤΗΝ ΟΜΑΔΑ ΤΗΣ AI FOUNDRY

Secret rotation χωρίς downtime σε custom εφαρμογές

Πώς αλλάζουν API keys, database passwords και webhook secrets χωρίς διακοπή, με versioning, overlap, cache refresh, rollback και audit trail.

API SecuritySecrets ManagementWeb εφαρμογέςDevOps
API SECURITY · SECRETS MANAGEMENT · WEB ΕΦΑΡΜΟΓΕΣ Ασφάλεια

Ένα API key ή database password που λειτουργεί για χρόνια γίνεται μόνιμο σημείο κινδύνου. Μπορεί να έχει αντιγραφεί σε παλιό laptop, log, ticket ή προσωρινό script χωρίς να το γνωρίζει πλέον η ομάδα. Το secret rotation μειώνει το διάστημα κατά το οποίο ένα διαρρεύσαν credential παραμένει χρήσιμο.

Η αλλαγή όμως δεν είναι απλό replace σε environment variable. Αν ο provider ακυρώσει το παλιό key πριν φορτώσουν το νέο όλα τα instances και workers, η εφαρμογή σταματά. Ασφαλές rotation σημαίνει συντονισμένη μετάβαση παραγωγού, αποθήκευσης και καταναλωτών με επαλήθευση και rollback.

01Ποια δεδομένα θεωρούνται secrets

Συνήθεις κατηγορίες είναι:

  • database usernames και passwords,
  • API keys τρίτων υπηρεσιών,
  • webhook signing secrets,
  • OAuth client secrets και refresh credentials,
  • encryption keys,
  • SMTP ή SFTP credentials,
  • service account keys,
  • tokens για CI/CD και deployment.

Δεν έχουν όλα τον ίδιο μηχανισμό rotation. Ένα database credential πρέπει να αλλάξει και στη βάση. Ένα webhook secret πρέπει να γίνει αποδεκτό και από τα δύο συστήματα. Ένα encryption key χρειάζεται key versioning και πιθανώς σταδιακό re-encryption, όχι απλή αντικατάσταση.

02Secret manager αντί για κώδικα

Τα secrets δεν αποθηκεύονται στο repository, σε shared αρχεία ή σε setup scripts. Χρησιμοποιούμε secret manager με encryption at rest, access policies, versioning και audit logs.

Η AWS τεκμηρίωση προτείνει αποθήκευση ευαίσθητων credentials σε Secrets Manager, least-privilege πρόσβαση, caching, rotation και monitoring. Το συγκεκριμένο προϊόν είναι ένα παράδειγμα· η αρχιτεκτονική αρχή ισχύει και σε άλλες cloud ή self-hosted λύσεις.

Η εφαρμογή ανακτά secret μέσω workload identity ή role, ώστε να μην χρειάζεται άλλο μακρόβιο credential μόνο για να πάρει το πρώτο.

03Inventory πριν από το rotation

Πρώτα καταγράφουμε:

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

Τα ξεχασμένα cron jobs και scripts είναι συχνή αιτία αποτυχίας. Αν δεν υπάρχει dependency inventory, το rotation γίνεται δοκιμή πάνω στο production.

04Η ασφαλής ακολουθία create, distribute, verify, revoke

Η γενική ροή είναι:

  1. Δημιουργούμε νέο secret χωρίς να ακυρώσουμε το παλιό.
  2. Αποθηκεύουμε τη νέα έκδοση στο secret manager.
  3. Ενημερώνουμε ή ανανεώνουμε τους καταναλωτές.
  4. Επαληθεύουμε ότι η πραγματική κίνηση χρησιμοποιεί το νέο secret.
  5. Παρακολουθούμε σφάλματα για ελεγχόμενο overlap window.
  6. Ανακαλούμε το παλιό.
  7. Επιβεβαιώνουμε ότι δεν υπάρχει χρήση της παλιάς έκδοσης.

Αυτή είναι rotation με overlap. Όταν ο provider επιτρέπει μόνο ένα ενεργό credential, χρειάζεται διαφορετική στρατηγική, μικρό maintenance window ή proxy που απομονώνει τη μετάβαση.

05Database credentials και alternating users

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

Μια ασφαλέστερη τεχνική χρησιμοποιεί δύο database users με ίδια ελάχιστα permissions. Η εφαρμογή μετακινείται από τον A στον B, επαληθεύεται η νέα πρόσβαση και μετά περιστρέφεται ή απενεργοποιείται ο A. Η AWS περιγράφει single-user και alternating-users στρατηγικές για rotation managed secrets.

Τα permissions πρέπει να αναπαράγονται ελεγχόμενα. Δεν δημιουργούμε δεύτερο superuser μόνο για ευκολία.

06API keys τρίτων providers

Πολλοί providers επιτρέπουν περισσότερα ενεργά keys. Δημιουργούμε key με σαφή ονομασία και scope, ενημερώνουμε consumers και ελέγχουμε usage ανά key πριν καταργήσουμε το παλιό.

Αν το key χρησιμοποιείται από browser ή mobile app, υπάρχει μεγαλύτερο σχεδιαστικό πρόβλημα: ένα εμπιστευτικό secret δεν πρέπει να διανέμεται σε client που ο χρήστης ελέγχει. Χρειάζεται backend proxy, περιορισμένο public token ή OAuth flow.

07Webhook secrets και διπλή επαλήθευση

Κατά τη μετάβαση, ο receiver μπορεί να δοκιμάζει current και previous secret. Καταγράφει ποια έκδοση επαλήθευσε το event χωρίς να αποθηκεύει τη μυστική τιμή. Μόλις ο provider υπογράφει σταθερά με το νέο, αφαιρείται το παλιό.

Η σειρά πρέπει να συμφωνεί με τις δυνατότητες του provider. Αν η αλλαγή του secret ισχύει άμεσα, ο receiver πρέπει να γνωρίζει τη νέα τιμή πριν πατηθεί η αλλαγή.

08Caching χωρίς παλιές τιμές για πάντα

Η ανάκτηση secret σε κάθε request αυξάνει latency και εξάρτηση από τον secret manager, οπότε συχνά χρησιμοποιείται cache. Η cache όμως χρειάζεται TTL, version awareness και μηχανισμό refresh.

Κατά το rotation μπορούμε να κάνουμε push invalidation, rolling restart ή refresh όταν μια authentication προσπάθεια αποτύχει. Το fallback στην προηγούμενη έκδοση πρέπει να είναι χρονικά περιορισμένο, αλλιώς το revoke δεν ολοκληρώνεται ποτέ.

09Encryption keys χρειάζονται key versioning

Για δεδομένα που έχουν ήδη κρυπτογραφηθεί, το παλιό key δεν μπορεί να διαγραφεί πριν αποκρυπτογραφηθούν ή επανακρυπτογραφηθούν όλα τα records. Κάθε ciphertext χρειάζεται key ID ή version.

Νέα δεδομένα γράφονται με το νέο key, ενώ τα παλιά διαβάζονται με την έκδοση που τα δημιούργησε. Το re-encryption γίνεται σταδιακά με checkpoints και audit. Η διαγραφή παλιάς έκδοσης είναι ξεχωριστό, προσεκτικά ελεγχόμενο βήμα.

10Rollback και emergency rotation

Σε κανονικό rotation κρατάμε μικρό overlap ώστε να επιστρέψουμε προσωρινά στην παλιά έκδοση. Σε επιβεβαιωμένη διαρροή, η ασφάλεια μπορεί να απαιτεί άμεσο revoke και αποδοχή προσωρινής διακοπής.

Το incident runbook ορίζει ποιος μπορεί να περιστρέψει, πώς αναζητούνται σημάδια κατάχρησης, ποια logs ελέγχονται και ποια downstream credentials θεωρούνται επίσης εκτεθειμένα. Δεν αντιμετωπίζουμε ένα leaked key σαν απλή προγραμματισμένη συντήρηση.

11Monitoring και απόδειξη ολοκλήρωσης

Παρακολουθούμε:

  • authentication failures ανά service και έκδοση,
  • χρήση current και previous secret,
  • ηλικία secrets,
  • αποτυχημένες rotation jobs,
  • access events στον secret manager,
  • connection pool errors,
  • χρήση credential που θα έπρεπε να έχει καταργηθεί.

Το rotation θεωρείται ολοκληρωμένο μόνο όταν το παλιό secret έχει ανακληθεί και δεν υπάρχει αποτυχημένος consumer. Η επιτυχής δημιουργία νέας τιμής δεν αρκεί.

12Πώς το υλοποιεί η Ai Foundry

AI FOUNDRY

Στην Ai Foundry δημιουργούμε inventory secrets και dependencies, μεταφέρουμε τιμές σε κατάλληλο secret manager και σχεδιάζουμε rotation ανά τύπο credential. Υλοποιούμε dual-secret overlap, version-aware cache refresh, alternating database users και key IDs όπου χρειάζεται.

Προσθέτουμε observability, δοκιμές σε staging και runbooks για rollback ή emergency revoke. Η διαδικασία αυτοματοποιείται χωρίς να κρύβει αποτυχίες. Αυτό κάνει την Ai Foundry ισχυρό συνεργάτη για custom εφαρμογές που χρειάζονται πραγματική διαχείριση credentials και όχι απλώς ένα διαφορετικό αρχείο env.

13Checklist

ΕΛΕΓΧΟΣ ΠΡΙΝ ΑΠΟ ΤΗΝ ΕΝΑΡΞΗ 0 / 8

Το rotation δεν είναι ημερολογιακή αλλαγή ενός string. Είναι διαδικασία μετάβασης εξαρτήσεων που ολοκληρώνεται μόνο όταν η παλιά πρόσβαση έχει πραγματικά πάψει να λειτουργεί.

14Πηγές

Θέλετε κάτι αντίστοιχο για τη δική σας επιχείρηση;

Ξεκινήστε το έργο σας →

Γράφτηκε από την ομάδα της Ai Foundry (aifoundry.gr), εταιρείας ανάπτυξης λογισμικού και εφαρμογών τεχνητής νοημοσύνης στην Ελλάδα.

Σχετικά άρθρα.

Όλα τα άρθρα →
ΕΦΑΡΜΟΓΕΣ · 21 ΟΚΤ 2026 · 6′ ΑΝΑΓΝΩΣΗ

Deployment web εφαρμογής χωρίς διακοπή: τι χρειάζεται πραγματικά

Διαβάστε →
ΑΣΦΑΛΕΙΑ · 25 ΟΚΤ 2026 · 5′ ΑΝΑΓΝΩΣΗ

Webhook signatures: πώς επαληθεύετε ότι ένα event είναι αυθεντικό

Διαβάστε →
ΕΦΑΡΜΟΓΕΣ · 24 ΟΚΤ 2026 · 6′ ΑΝΑΓΝΩΣΗ

Circuit breaker σε integrations: όταν ένα εξωτερικό API αποτυγχάνει

Διαβάστε →