Questo argomento spiega come archiviare i dati sensibili in un secret Kubernetes e recuperarli dalle variabili di flusso in un flusso di proxy API.
Introduzione
A volte vuoi archiviare i dati per il recupero in fase di runtime, ovvero dati senza scadenza che non devono essere codificati nella logica del proxy API. Un'opzione è utilizzare una funzionalità di mappatura chiave-valore (KVM) ibrida. Se stai già utilizzando Kubernetes per la gestione dei secret in un insieme di credenziali personalizzato per i dati sensibili, valuta l'uso la funzionalità dei secret di Kubernetes descritta in questo argomento. Come con i dati KVM, puoi accedere i dati secret di Kubernetes nelle variabili di flusso proxy API.
Quali tipi di dati possono essere archiviati in un secret Kubernetes?
Apigee hybrid ti limita all'archiviazione dei seguenti tipi di file di dati in un secret Kubernetes. tra cui:
Formato file | Estensioni dei file supportate |
---|---|
File del certificato e della chiave TLS | *.crt , *.key e *.pem |
File delle proprietà | *.properties |
I file delle 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 l'archiviazione di 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 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 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 da includere nel segreto. 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 di 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. I processori dei messaggi eseguono il polling per verificare le modifiche ai token segreti ogni 30 secondi. Se rilevano una modifica, la cache viene aggiornata.
Recupero dei dati da un segreto
Una volta che il secret è stato creato e disponibile (di solito circa 90 secondi dopo la creazione), puoi
accedere ai dati secret in una variabile di flusso in un flusso proxy API nell'organizzazione/nell'ambiente
in cui è archiviato il secret.
Ad esempio, supponiamo che il tuo secret contenga un *.properties
file denominato credentials.properties
contenente una chiave API, come segue:
apikey=OrxYQptBMlY1TqmiGLTtyFiaLzzrD25Z
Puoi quindi recuperare la chiave API da una variabile del 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 viene fatto riferimento nell'elemento Ref
,
private.secret.credential.properties.apikey
è composto dai seguenti componenti:
Parte nome variabile | Descrizione |
---|---|
private.secret |
Lo spazio dei nomi fisso della variabile. Tutti i secret Kubernetes archiviati nel cluster ibrido condividono questo spazio dei nomi. |
credential.properties |
Il nome di un file archiviato nel secret Kubernetes. |
apikey |
Il nome di una chiave memorizzata in un file di proprietà. |
In questo esempio, il criterio Assegna messaggio elimina il valore OrxYQptBMlY1TqmiGLTtyFiaLzzrD25Z
di apikey
e
lo memorizza 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 i passaggi descritti in Creare un secret di Kubernetes.