Questo argomento spiega come archiviare i dati sensibili in un secret Kubernetes e recuperare i dati dalle variabili di flusso in un flusso proxy dell'API.
Introduzione
Ci sono casi in cui vuoi archiviare dati per il recupero in fase di runtime, senza che i dati scadano, che non devono essere hardcoded nella logica del proxy dell'API. Una possibilità è utilizzare la funzionalità ibrida chiave-valore (KVM). Se stai già utilizzando Kubernetes per la gestione dei secret in un archivio protetto personalizzato per i dati sensibili, potresti utilizzare la funzionalità segreta di Kubernetes descritta in questo argomento. Proprio come per i dati KVM, puoi accedere ai dati secret di Kubernetes nelle variabili di flusso proxy dell'API.
Quali tipi di dati possono essere archiviati in un secret Kubernetes?
Apigee ibrido limita l'archiviazione dei seguenti tipi di file di dati in un secret Kubernetes. Includono:
Formato file | Estensioni dei file supportate |
---|---|
File del certificato e della chiave TLS | *.crt , *.key e *.pem |
File proprietà | *.properties |
I file di proprietà sono file che contengono coppie chiave-valore. Ad esempio:
username=admin password=1f2d1e2e7df
Creazione di un secret Kubernetes
Questa sezione spiega come creare un secret Kubernetes per archiviare i dati sensibili nel cluster.
- Crea il file o i file che vuoi archiviare nel secret di Kubernetes. I file devono essere in uno dei formati supportati con le estensioni file elencate in Quali tipi di dati possono essere archiviati in un secret Kubernetes.
- Esegui il comando
kubectl create secret generic
. Ad esempio:kubectl -n namespace create secret generic org-env-policy-secret \ --from-file=filepath/prop-file.properties \ --from-file=filepath/key-file.key \ --from-file="filepath/cert-file.pem
Dove:
- namespace: lo spazio dei nomi di Kubernetes in cui viene eseguito il deployment dei componenti di runtime.
- org: il nome della tua organizzazione Apigee.
- env: il nome di un ambiente nella tua organizzazione.
- filepath: il percorso del file che vuoi includere nel secret. Devi specificare almeno un file da includere nel secret.
- prop-file: il nome di un file di proprietà da includere nel secret.
- key-file: il nome di un file della chiave TLS da includere nel secret.
- cert-file: il nome di un file del certificato TLS da includere nel secret.
Puoi includere uno o più file nel secret. Ad esempio:
kubectl -n apigee create secret generic myorg-test-policy-secret \ --from-file="$policy_secrets_path"/credential.properties \ --from-file="$policy_secrets_path"/secrets.properties \ --from-file="$policy_secrets_path"/public.key \ --from-file="$policy_secrets_path"/fullchain.pem
Dopo la creazione, potrebbero essere necessari fino a 90 secondi prima che la modifica venga applicata a tutti i cluster. Ogni 30 secondi il processore di elaborazione dei messaggi effettua un sondaggio per le modifiche dei secret. Se rilevano una modifica, la cache viene aggiornata.
Recupero dei dati da un secret
Una volta creato e disponibile il secret (di solito circa 90 secondi dopo la creazione), puoi accedere ai dati del secret in una variabile di flusso in un flusso proxy API nell'organizzazione/ambiente in cui è archiviato il secret.
Ad esempio, supponiamo che il tuo secret contenga un file *.properties
chiamato credentials.properties
con una chiave API al suo interno, come segue:
apikey=OrxYQptBMlY1TqmiGLTtyFiaLzzrD25Z
Puoi quindi recuperare la chiave API da una variabile di flusso utilizzando un criterio come Assegna messaggio. Ad esempio:
<AssignMessage name="assignvariable-2"> <AssignVariable> <Name>my-apikey</Name> <Ref>private.secret.credential.properties.apikey</Ref> </AssignVariable> </AssignMessage>
Il nome della variabile a cui si fa riferimento nell'elemento Ref
,
private.secret.credential.properties.apikey
, è costituito da queste parti:
Nome variabile | Descrizione |
---|---|
private.secret |
Lo spazio dei nomi fisso della variabile. Tutti i secret di Kubernetes archiviati nel cluster ibrido condividono questo spazio dei nomi. |
credential.properties |
Il nome di un file archiviato nel secret di Kubernetes. |
apikey |
Nome di una chiave archiviata in un file delle proprietà. |
In questo esempio, il criterio Assegna messaggio rimuove il valore apikey
OrxYQptBMlY1TqmiGLTtyFiaLzzrD25Z
e lo archivia nella variabile di flusso my-apikey
.
Aggiornamento di un secret
Poiché kubectl
non supporta l'aggiornamento dei secret di Kubernetes, devi prima eliminare il secret esistente e ricrearlo seguendo la procedura descritta in Creare un secret di Kubernetes.