Rotar las credenciales de Cassandra en secretos de Kubernetes

Rotar secretos de Cassandra en secretos de Kubernetes

En este procedimiento se describe cómo rotar las credenciales de Cassandra en los secretos de Kubernetes de tu clúster. Para rotar las credenciales en HashiCorp Vault, consulta el artículo Rotar las credenciales de Cassandra en HashiCorp Vault.

Este procedimiento te permitirá rotar las credenciales de Cassandra que se usan en los servicios de producción de Apigee Hybrid sin provocar tiempos de inactividad. Para ello, se automatizarán y activarán tres tareas:

  • Rotación de credenciales de usuario
  • Restauración de la rotación
  • Limpieza de credenciales antiguas y nuevas

Rotar secretos de Cassandra en secretos de Kubernetes

Se pueden rotar seis pares de credenciales de Cassandra (nombre de usuario y contraseña):

  • Predeterminado*
  • Administrador
  • DDL
  • DML
  • JMX
  • Jolokia

Prepararse para la rotación de credenciales

Para llevar a cabo estos pasos, debes tener permiso para ejecutar kubectl apply -f en el clúster.

  1. Crea una copia de seguridad de la base de datos de Cassandra. Esta copia de seguridad se realiza para asegurar que se puedan recuperar las credenciales anteriores a la rotación. Consulta la información general sobre las copias de seguridad de Cassandra.
  2. Asegúrate de que el clúster esté en buen estado, de que todos los recursos de Apigee estén en ejecución y de que no haya cambios de estado pendientes.

Rotación de credenciales de una sola región

  1. Crea un secreto de Kubernetes en tu espacio de nombres de Apigee que contenga las credenciales de usuario de Cassandra que quieras rotar. Para ello, sigue las instrucciones de Definir nombres de usuario y contraseñas en un secreto de Kubernetes.
  2. Realiza la comprobación previa a la rotación.
    1. Crea un recurso personalizado SecretRotation con la siguiente plantilla:
      # 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
      

      Donde:

      • ROTATION_NAME: nombre del trabajo de rotación. Por ejemplo, sr-1-precheck.
      • APIGEE_NAMESPACE: tu espacio de nombres de Apigee.
      • APIGEE_ORG: tu ID de organización de Apigee.
      • ROTATION_ID: un identificador personalizado, por ejemplo, rot-1-precheck.
      • TIMEOUT_MINUTES: opcional. Anula el valor predeterminado (480 min == 8 horas). <=0 significa tiempo de espera infinito.
      • PRECHECK : activa la ejecución de una prueba. Si se define como true, el proceso de rotación pasa por todos los pasos, excepto por la aplicación de las nuevas credenciales.
      • OLD_SECRET_REF: nombre del secreto que usa actualmente el apigeedatastore. Puedes encontrarlo con el siguiente comando:
        kubectl -n APIGEE_NAMESPACE get apigeedatastore default -o jsonpath='{.spec.credentialRef}'
        
      • NEW_SECRET_REF: el nombre del secreto creado en el paso anterior.
    2. Activa el trabajo de comprobación previa de la rotación aplicando el archivo YAML de rotación:
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
    3. Comprueba el estado del trabajo y espera a que se complete.
      kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
      

      Cuando se complete el trabajo, la salida contendrá lo siguiente:

      Status:
        Message:  rotation complete
        State:    complete
      kubectl -n APIGEE_NAMESPACE logs sr-ROTATION_ID-rotate-job-HASH
      
  3. Cuando se complete la tarea de comprobación previa de la rotación, realiza la rotación:
    1. Haz los siguientes cambios en el archivo YAML de rotación:
      • Cambia metadata.name por un nombre que indique que no es una comprobación previa, como sr-1.
      • Asigna el valor false a spec.precheck.
      • Cambia spec.rotationId por un identificador nuevo, por ejemplo, rot-1.
    2. Vuelve a aplicar el archivo para realizar la rotación.
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
  4. Una vez que se haya completado el trabajo de rotación, comprueba que el tráfico sigue fluyendo correctamente.
  5. Después de validar el tráfico, limpia los secretos antiguos.
    1. Haz los siguientes cambios en el archivo YAML de rotación:
      • Cambia metadata.name por un nombre que indique que se trata de un trabajo de limpieza. Por ejemplo, sr-1-cleanup.
      • Asigna el valor CLEANUP a spec.cassandra.jobType.
      • Comprueba que spec.precheck esté configurado como false.
    2. Vuelve a aplicar el archivo para realizar la limpieza.
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
    3. Comprueba el estado del trabajo y espera a que se complete.
      kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
      

      Cuando se complete el trabajo de limpieza, se habrá completado el proceso de rotación.

  6. Actualiza el archivo de anulaciones y asigna el nuevo nombre del secreto a cassandra.auth.secret (newSecretRef).
    cassandra:
      auth:
        secret: NEW_SECRET_REF
  7. Crea una copia de seguridad de la base de datos de Cassandra. Esta copia de seguridad se hace para asegurar que se puedan recuperar las credenciales después de la rotación.
  8. Elimina el secreto de credenciales de Cassandra antiguo.

Rotación de credenciales multirregional

  1. En cada región, cree un secreto de Kubernetes en su espacio de nombres de Apigee que contenga las credenciales de usuario de Cassandra que quiera rotar. Para ello, siga las instrucciones de Configurar nombres de usuario y contraseñas en un secreto de Kubernetes.

    Las credenciales deben ser las mismas en todas las regiones.

  2. Realiza la comprobación previa a la rotación.
    1. Crea un recurso personalizado SecretRotation con la siguiente plantilla:
      # 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
      

      Donde:

      • ROTATION_NAME: nombre del trabajo de rotación. Por ejemplo, sr-1-precheck.
      • APIGEE_NAMESPACE: tu espacio de nombres de Apigee.
      • APIGEE_ORG: tu ID de organización de Apigee.
      • ROTATION_ID: un identificador personalizado, por ejemplo, rot-1-precheck.
      • TIMEOUT_MINUTES: opcional. Anula el valor predeterminado (480 min == 8 horas). <=0 significa tiempo de espera infinito.
      • PRECHECK : activa la ejecución de una prueba. Si se define como true, el proceso de rotación pasa por todos los pasos, excepto por la aplicación de las nuevas credenciales.
      • OLD_SECRET_REF: nombre del secreto que usa actualmente el apigeedatastore. Puedes encontrarlo con el siguiente comando:
        kubectl -n APIGEE_NAMESPACE get apigeedatastore default -o jsonpath='{.spec.credentialRef}'
        
      • NEW_SECRET_REF: el nombre del secreto creado en el paso anterior.
    2. En la primera región, activa el trabajo de comprobación previa de la rotación aplicando el archivo YAML de rotación:
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
    3. Comprueba el estado del trabajo y espera a que se complete.
      kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
      

      Cuando se complete el trabajo, la salida contendrá lo siguiente:

      Status:
        Message:  rotation complete
        State:    complete
      kubectl -n APIGEE_NAMESPACE logs sr-ROTATION_ID-rotate-job-HASH
      
  3. Cuando se complete la tarea de comprobación previa de la rotación, realiza la rotación en la misma región:
    1. Haz los siguientes cambios en el archivo YAML de rotación:
      • Cambia metadata.name por un nombre que indique que no es una comprobación previa, como sr-1.
      • Asigna el valor false a spec.precheck.
      • Cambia spec.rotationId por un identificador nuevo, por ejemplo, rot-1.
    2. Vuelve a aplicar el archivo para realizar la rotación.
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
  4. Una vez que se haya completado el trabajo de rotación, comprueba que el tráfico sigue fluyendo correctamente.
  5. Repite los pasos de rotación con las regiones restantes.
  6. Después de validar el tráfico, limpia los secretos antiguos. Solo tiene que realizar la limpieza en una región. No importa qué región elijas.
    1. Haz los siguientes cambios en el archivo YAML de rotación:
      • Cambia metadata.name por un nombre que indique que se trata de un trabajo de limpieza. Por ejemplo, sr-1-cleanup.
      • Asigna el valor CLEANUP a spec.cassandra.jobType.
      • Comprueba que spec.precheck esté configurado como false.
    2. Vuelve a aplicar el archivo para realizar la limpieza.
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
    3. Comprueba el estado del trabajo y espera a que se complete.
      kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
      

      Cuando se complete el trabajo de limpieza, se habrá completado el proceso de rotación.

  7. Actualiza el archivo de anulaciones y asigna el nuevo nombre del secreto a cassandra.auth.secret (newSecretRef).
    cassandra:
      auth:
        secret: NEW_SECRET_REF
  8. Crea una copia de seguridad de la base de datos de Cassandra. Esta copia de seguridad se hace para asegurar que se puedan recuperar las credenciales después de la rotación.
  9. Elimina el secreto de credenciales de Cassandra antiguo.

Restaurar una rotación

Sigue estos pasos en cada región.

  1. Crea un recurso personalizado SecretRotation con la siguiente plantilla:
    # 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
    

    Donde:

    • ROLLBACK_NAME: nombre del trabajo de reversión. Por ejemplo, sr-1-rollback.
    • APIGEE_NAMESPACE: tu espacio de nombres de Apigee.
    • APIGEE_ORG: tu ID de organización de Apigee.
    • ROTATION_ID: el ID de la rotación actual a la que vas a volver, por ejemplo, rot-1.
    • TIMEOUT_MINUTES: opcional. Anula el valor predeterminado (480 min == 8 horas). <=0 significa tiempo de espera infinito.
    • OLD_SECRET_REF: debe coincidir con el nombre del secreto de oldSecretRef: en el archivo YAML de rotación que has usado en el procedimiento Rotación en una sola región o Rotación en varias regiones.
    • NEW_SECRET_REF: debe coincidir con el nombre del secreto de newSecretRef: en el archivo YAML de rotación que has usado en el procedimiento Rotación en una sola región o Rotación en varias regiones.
  2. Aplica la restauración:
    kubectl -n APIGEE_NAMESPACE apply -f ROLLBACK_YAML_FILE
    
  3. Comprueba el estado del trabajo y espera a que se complete.
    kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
    
  4. Cuando se completen las restauraciones, comprueba que el tráfico sigue fluyendo correctamente.
  5. Cuando el tráfico fluya correctamente, repite el proceso de reversión en cada una de las regiones restantes.
  6. Una vez que hayas completado la reversión y verificado que el tráfico sigue fluyendo correctamente, inicia el proceso de limpieza. Solo tiene que realizar la limpieza en una región. No importa qué región elijas.

    Haz los siguientes cambios en el archivo YAML de rotación:

    • Cambia metadata.name por un nombre que indique que se trata de un trabajo de limpieza. Por ejemplo, sr-1-cleanup-rollback.
    • Cambia spec.cassandra.jobType por CLEANUP_ROLLBACK.
  7. Aplica el archivo para activar el trabajo de limpieza:
    kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
    
  8. Comprueba el estado del trabajo y espera a que se complete.
    kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
    

    Cuando se complete el trabajo de limpieza, se habrá completado el proceso de reversión.

  9. Actualiza el archivo de anulaciones y asigna a cassandra.auth.secret el nombre del antiguo secreto (oldSecretRef).
    cassandra:
      auth:
        secret: OLD_SECRET_REF