Archiviazione dei dati in un secret Kubernetes

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 la funzionalità della mappa chiave-valore (KVM) ibrida. Se utilizzi già Kubernetes per la gestione dei secret in un vault personalizzato per i dati sensibili, ti consigliamo di utilizzare la funzionalità dei secret di Kubernetes descritta in questo argomento. Come per i dati KVM, puoi accedere ai dati dei secret Kubernetes nelle variabili di flusso del proxy API.

Quali tipi di dati possono essere archiviati in un secret Kubernetes?

Apigee Hybrid ti consente di archiviare i seguenti tipi di file di dati in un secret Kubernetes. ad esempio:

Formato file Estensioni dei file supportate
File del certificato e della chiave TLS *.crt, *.key e *.pem
File di 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.

  1. Crea il file o i file che vuoi archiviare nel secret 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.
  2. 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 vengono dipartiti i 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 segreto.
    • 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 segreto.

    Puoi includere uno o più file nel segreto. 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
    
  3. 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 la presenza di modifiche ai token segreti ogni 30 secondi. Se viene rilevata una modifica, la cache viene aggiornata.

Recupero dei dati da un secret

Una volta creato e reso disponibile il segreto (di solito circa 90 secondi dopo la creazione), puoi accedere ai dati del segreto in una variabile di flusso in un flusso proxy API nell'organizzazione/nell'ambiente in cui è archiviato il segreto. Ad esempio, supponiamo che il tuo segreto contenga un file *.properties 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 fa riferimento l'elemento Ref, private.secret.credential.properties.apikey, è composto da queste parti:

Parte del nome della 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 recupera il valore apikey OrxYQptBMlY1TqmiGLTtyFiaLzzrD25Z 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.