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 cluster. Per la rotazione delle credenziali in Hashicorp Vault, consulta Rotazione delle credenziali Cassandra in Hashicorp Vault.

Questa procedura ti consente 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

Esegui la rotazione dei secret Cassandra nei secret di Kubernetes

Esistono sei coppie di nome utente e password di credenziali Cassandra che puoi ruotare:

  • default (solo rotazione della password)
  • admin_user
  • ddl_user
  • dml_user
  • jmxuser
  • apigee

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 il recupero delle credenziali pre-ruotate. Consulta la panoramica del backup di Cassandra.
  2. Assicurati che il cluster sia in uno stato corretto, 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 contenente le credenziali utente di Cassandra che vuoi ruotare, seguendo le istruzioni riportate 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: lo spazio dei nomi Apigee.
      • APIGEE_ORG: il tuo ID organizzazione Apigee.
      • ROTATION_ID: un identificatore personalizzato, ad esempio rot-1-precheck.
      • TIMEOUT_MINUTES: facoltativo. Sostituisce il valore predefinito (480 min = 8 ore). <=0 indica un timeout infinito.
      • 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 della chiave creata nel passaggio precedente.
    2. Attiva il job di precontrollo 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 precontrollo della rotazione, esegui la rotazione:
    1. Apporta le seguenti modifiche al file YAML della rotazione:
      • Cambia 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. Al termine del 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 della 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.
    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. Esegui un backup del database Cassandra. Questo backup serve a garantire il recupero delle credenziali dopo la rotazione.
  7. Elimina il vecchio secret della credenziale Cassandra.

Rotazione delle credenziali in più regioni

  1. In ogni regione, crea un nuovo secret Kubernetes nello spazio dei nomi Apigee che contenga le credenziali utente Cassandra che vuoi ruotare, seguendo le istruzioni riportate 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: lo spazio dei nomi Apigee.
      • APIGEE_ORG: il tuo ID organizzazione Apigee.
      • ROTATION_ID: un identificatore personalizzato, ad esempio rot-1-precheck.
      • TIMEOUT_MINUTES: facoltativo. Sostituisce il valore predefinito (480 min = 8 ore). <=0 indica un timeout infinito.
      • 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 della chiave creata nel passaggio precedente.
    2. Nella prima regione, attiva il job di precontrollo 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 precontrollo della rotazione, esegui la rotazione nella stessa regione:
    1. Apporta le seguenti modifiche al file YAML della rotazione:
      • Cambia 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. Al termine del 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 solo in una singola regione. Non importa quale regione scegli.
    1. Apporta le seguenti modifiche al file YAML della 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.
    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. Esegui un backup del database Cassandra. Questo backup serve a garantire il recupero delle credenziali dopo la rotazione.
  8. Elimina il vecchio secret della credenziale Cassandra.

Eseguire il 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: lo spazio dei nomi Apigee.
    • APIGEE_ORG: il tuo ID organizzazione Apigee.
    • ROTATION_ID: l'ID della rotazione corrente di cui stai eseguendo il rollback, ad esempio rot-1.
    • TIMEOUT_MINUTES: facoltativo. Sostituisce il valore predefinito (480 min = 8 ore). <=0 indica un timeout infinito.
    • OLD_SECRET_REF: deve corrispondere al nome della chiave segreta per oldSecretRef: nel file YAML di rotazione utilizzato nella procedura di rotazione in una singola regione o rotazione in più regioni.
    • NEW_SECRET_REF: deve corrispondere al nome del secret per newSecretRef: nel file YAML di rotazione utilizzato nella procedura di rotazione in una singola regione o rotazione in più regioni.
  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 dei rollback, verifica che il traffico continui a scorrere correttamente.
  5. Quando il traffico scorre correttamente, ripeti la procedura di rollback in ogni regione rimanente.
  6. Una volta completato il rollback e verificato che il traffico continua a scorrere correttamente, avvia la procedura di pulizia. Devi eseguire la pulizia solo in una singola regione. Non importa quale regione scegli.

    Apporta le seguenti modifiche al file YAML della 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