Rotazione delle credenziali Cassandra nei secret Kubernetes

Rotazione dei secret di Cassandra nei secret di Kubernetes

Questa procedura descrive la rotazione delle credenziali Cassandra nei secret di Kubernetes nel tuo cluster. Per la rotazione delle credenziali in Hashicorp Vault, consulta Rotazione delle credenziali Cassandra in Hashicorp Vault.

Questa procedura ti consentirà di ruotare le credenziali Cassandra utilizzate per i servizi Apigee Hybrid di produzione senza causare tempi di inattività automatizzando e attivando tre attività:

  • Rotazione delle credenziali utente
  • Rollback della rotazione
  • Pulizia delle credenziali vecchie e nuove

Ruota i secret di Cassandra nei secret di Kubernetes

È possibile ruotare sei coppie di credenziali Cassandra (nome utente + password):

  • Predefinito*
  • Amministratore
  • DDL
  • DML
  • JMX
  • Jolokia

Prepararsi per la rotazione delle credenziali

Per eseguire questi passaggi, devi disporre dell'autorizzazione per eseguire kubectl apply -f all'interno del cluster.

  1. Esegui il backup del database Cassandra. Questo backup serve a garantire che il recupero sia possibile con le credenziali pre-rotazione. Consulta la panoramica del backup di Cassandra.
  2. Assicurati che il cluster sia integro, che tutte le risorse Apigee siano in esecuzione e che non siano in attesa modifiche dello stato.

Rotazione delle credenziali in una singola regione

  1. Crea un nuovo secret Kubernetes nello spazio dei nomi Apigee che contenga le credenziali utente Cassandra che vuoi ruotare, seguendo la procedura descritta in Impostare nomi utente e password in un secret Kubernetes.
  2. Esegui il controllo preliminare della rotazione.
    1. Crea una nuova risorsa personalizzata SecretRotation utilizzando il seguente modello:
      # rotation-k8s-secrets.yaml
      
      apiVersion: apigee.cloud.google.com/v1alpha1
      kind: SecretRotation
      metadata:
        name: ROTATION_NAME
        namespace: APIGEE_NAMESPACE
      spec:
        organizationId: APIGEE_ORG
        rotationId: ROTATION_ID
        timeoutMinutes: TIMEOUT_MINUTES # optional. 480 recommended.
        precheck: true
        cassandra:
          oldSecretRef: OLD_SECRET_REF
          newSecretRef: NEW_SECRET_REF
          jobType: ROTATE
      

      Dove:

      • ROTATION_NAME: un nome per il job di rotazione, ad esempio sr-1-precheck.
      • APIGEE_NAMESPACE: il tuo spazio dei nomi Apigee.
      • APIGEE_ORG: l'ID organizzazione Apigee.
      • ROTATION_ID: un identificatore personalizzato, ad esempio: rot-1-precheck.
      • TIMEOUT_MINUTES: (Facoltativo) Esegue l'override del valore predefinito (480 m = 8 ore). <=0 significa timeout infinito.
      • PRECHECK : attiva l'esecuzione della prova. Se impostato su true, il processo di rotazione esegue tutti i passaggi tranne l'applicazione effettiva delle nuove credenziali.
      • OLD_SECRET_REF: il nome del secret attualmente utilizzato da apigeedatastore. Puoi trovarlo utilizzando il seguente comando:
        kubectl -n APIGEE_NAMESPACE get apigeedatastore default -o jsonpath='{.spec.credentialRef}'
        
      • NEW_SECRET_REF: il nome del secret creato nel passaggio precedente.
    2. Attiva il job di pre-controllo della rotazione applicando il file YAML di rotazione:
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
    3. Controlla lo stato del job e attendi il completamento.
      kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
      

      Al termine del job, l'output conterrà:

      Status:
        Message:  rotation complete
        State:    complete
      kubectl -n APIGEE_NAMESPACE logs sr-ROTATION_ID-rotate-job-HASH
      
  3. Al termine del job di pre-controllo della rotazione, esegui la rotazione:
    1. Apporta le seguenti modifiche al file YAML di rotazione:
      • Modifica metadata.name con un nome che indichi che non si tratta di un controllo preliminare, ad esempio sr-1.
      • Imposta spec.precheck su false.
      • Modifica spec.rotationId con un nuovo identificatore, ad esempio rot-1.
    2. Applica di nuovo il file per eseguire la rotazione.
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
  4. Una volta completato il job di rotazione, verifica che il traffico continui a fluire correttamente.
  5. Dopo aver convalidato il traffico, esegui la pulizia dei vecchi secret.
    1. Apporta le seguenti modifiche al file YAML di rotazione:
      • Modifica metadata.name con un nome che indichi che si tratta di un job di pulizia, ad esempio sr-1-cleanup.
      • Imposta spec.cassandra.jobType su CLEANUP.
      • Assicurati che spec.precheck sia impostato su false.
    2. Applica di nuovo il file per eseguire la pulizia.
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
    3. Controlla lo stato del job e attendi il completamento.
      kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
      

      Al termine del job di pulizia, il processo di rotazione è completato.

  6. Aggiorna il file di override e imposta cassandra.auth.secret sul nuovo nome del secret (newSecretRef).
    cassandra:
      auth:
        secret: NEW_SECRET_REF
  7. Esegui un backup del database Cassandra. Questo backup serve a garantire che il recupero sia possibile con le credenziali post-rotazione.
  8. Elimina il vecchio secret delle credenziali Cassandra.

Rotazione delle credenziali multiregionale

  1. In ogni regione, crea un nuovo secret Kubernetes nello spazio dei nomi Apigee che contenga le credenziali utente Cassandra che vuoi ruotare, seguendo la procedura descritta in Impostare nomi utente e password in un secret Kubernetes.

    Le credenziali devono essere le stesse in ogni regione.

  2. Esegui il controllo preliminare della rotazione.
    1. Crea una nuova risorsa personalizzata SecretRotation utilizzando il seguente modello:
      # rotation-k8s-secrets.yaml
      
      apiVersion: apigee.cloud.google.com/v1alpha1
      kind: SecretRotation
      metadata:
        name: ROTATION_NAME
        namespace: APIGEE_NAMESPACE
      spec:
        organizationId: APIGEE_ORG
        rotationId: ROTATION_ID
        timeoutMinutes: TIMEOUT_MINUTES # optional. 480 recommended.
        precheck: true
        cassandra:
          oldSecretRef: OLD_SECRET_REF
          newSecretRef: NEW_SECRET_REF
          jobType: ROTATE
      

      Dove:

      • ROTATION_NAME: un nome per il job di rotazione, ad esempio sr-1-precheck.
      • APIGEE_NAMESPACE: il tuo spazio dei nomi Apigee.
      • APIGEE_ORG: l'ID organizzazione Apigee.
      • ROTATION_ID: un identificatore personalizzato, ad esempio: rot-1-precheck.
      • TIMEOUT_MINUTES: (Facoltativo) Esegue l'override del valore predefinito (480 m = 8 ore). <=0 significa timeout infinito.
      • PRECHECK : attiva l'esecuzione della prova. Se impostato su true, il processo di rotazione esegue tutti i passaggi tranne l'applicazione effettiva delle nuove credenziali.
      • OLD_SECRET_REF: il nome del secret attualmente utilizzato da apigeedatastore. Puoi trovarlo utilizzando il seguente comando:
        kubectl -n APIGEE_NAMESPACE get apigeedatastore default -o jsonpath='{.spec.credentialRef}'
        
      • NEW_SECRET_REF: il nome del secret creato nel passaggio precedente.
    2. Nella prima regione, attiva il job di controllo preliminare della rotazione applicando il file YAML di rotazione:
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
    3. Controlla lo stato del job e attendi il completamento.
      kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
      

      Al termine del job, l'output conterrà:

      Status:
        Message:  rotation complete
        State:    complete
      kubectl -n APIGEE_NAMESPACE logs sr-ROTATION_ID-rotate-job-HASH
      
  3. Al termine del job di controllo preliminare della rotazione, esegui la rotazione nella stessa regione:
    1. Apporta le seguenti modifiche al file YAML di rotazione:
      • Modifica metadata.name con un nome che indichi che non si tratta di un controllo preliminare, ad esempio sr-1.
      • Imposta spec.precheck su false.
      • Modifica spec.rotationId con un nuovo identificatore, ad esempio rot-1.
    2. Applica di nuovo il file per eseguire la rotazione.
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
  4. Una volta completato il job di rotazione, verifica che il traffico continui a fluire correttamente.
  5. Ripeti i passaggi di rotazione per le regioni rimanenti.
  6. Dopo aver convalidato il traffico, esegui la pulizia dei vecchi secret. Devi eseguire la pulizia in una sola regione. Non importa quale regione scegli.
    1. Apporta le seguenti modifiche al file YAML di rotazione:
      • Modifica metadata.name con un nome che indichi che si tratta di un job di pulizia, ad esempio sr-1-cleanup.
      • Imposta spec.cassandra.jobType su CLEANUP.
      • Assicurati che spec.precheck sia impostato su false.
    2. Applica di nuovo il file per eseguire la pulizia.
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
    3. Controlla lo stato del job e attendi il completamento.
      kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
      

      Al termine del job di pulizia, il processo di rotazione è completato.

  7. Aggiorna il file di override e imposta cassandra.auth.secret sul nuovo nome del secret (newSecretRef).
    cassandra:
      auth:
        secret: NEW_SECRET_REF
  8. Esegui un backup del database Cassandra. Questo backup serve a garantire che il recupero sia possibile con le credenziali post-rotazione.
  9. Elimina il vecchio secret delle credenziali Cassandra.

Rollback di una rotazione

Esegui i seguenti passaggi in ogni regione.

  1. Crea una nuova risorsa personalizzata SecretRotation utilizzando il seguente modello:
    # rollback-k8s-secrets.yaml
    
    apiVersion: apigee.cloud.google.com/v1alpha1
    kind: SecretRotation
    metadata:
      name: ROLLBACK_NAME
      namespace: APIGEE_NAMESPACE
    spec:
      organizationId: APIGEE_ORG
      rotationId: ROTATION_ID # match the current rotation.
      timeoutMinutes: TIMEOUT_MINUTES # optional.
      precheck: false
      cassandra:
        oldSecretRef: OLD_SECRET_REF # Must match the previous oldSecretRef.
        newSecretRef: NEW_SECRET_REF # Must match the previous newSecretRef.
        jobType: ROLLBACK
    

    Dove:

    • ROLLBACK_NAME: un nome per il job di rollback, ad esempio sr-1-rollback.
    • APIGEE_NAMESPACE: il tuo spazio dei nomi Apigee.
    • APIGEE_ORG: l'ID organizzazione Apigee.
    • ROTATION_ID: l'ID della rotazione corrente di cui stai eseguendo il rollback, ad esempio rot-1.
    • TIMEOUT_MINUTES: (Facoltativo) Esegue l'override del valore predefinito (480 m = 8 ore). <=0 significa timeout infinito.
    • OLD_SECRET_REF: deve corrispondere al nome del secret per oldSecretRef: nel file YAML di rotazione utilizzato nella procedura di rotazione a singola regione o rotazione multiregionale.
    • NEW_SECRET_REF: deve corrispondere al nome del secret per newSecretRef: nel file YAML di rotazione utilizzato nella procedura di rotazione a singola regione o rotazione multiregionale.
  2. Applica il rollback:
    kubectl -n APIGEE_NAMESPACE apply -f ROLLBACK_YAML_FILE
    
  3. Controlla lo stato del job e attendi il completamento.
    kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
    
  4. Al termine del rollback, verifica che il traffico continui a fluire correttamente.
  5. Quando il flusso di traffico è corretto, ripeti la procedura di rollback in ogni regione rimanente.
  6. Una volta completato il rollback e verificato che il traffico continui a fluire correttamente, avvia la procedura di pulizia. Devi eseguire la pulizia in una sola regione. Non importa quale regione scegli.

    Apporta le seguenti modifiche al file YAML di rotazione:

    • Modifica metadata.name con un nome che indichi che si tratta di un job di pulizia, ad esempio sr-1-cleanup-rollback.
    • Modifica spec.cassandra.jobType in CLEANUP_ROLLBACK.
  7. Applica il file per attivare il job di pulizia:
    kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
    
  8. Controlla lo stato del job e attendi il completamento.
    kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
    

    Al termine del job di pulizia, il processo di rollback è completato.

  9. Aggiorna il file di override e imposta cassandra.auth.secret sul vecchio nome del secret (oldSecretRef).
    cassandra:
      auth:
        secret: OLD_SECRET_REF