Rota las credenciales de Cassandra en los secretos de Kubernetes

Rotación de secretos de Cassandra en Secrets de Kubernetes

En este procedimiento, se describe la rotación de credenciales de Cassandra en los secretos de Kubernetes de tu clúster. Para rotar credenciales en Hashicorp Vault, consulta Rotación de credenciales de Cassandra en Hashicorp Vault.

Este procedimiento te permitirá rotar las credenciales de Cassandra que se usan para los servicios de producción de Apigee Hybrid sin causar tiempo de inactividad automatizando y activando tres tareas:

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

Rota los secretos de Cassandra en los secretos de Kubernetes

Hay seis pares de nombre de usuario y contraseña de credenciales de Cassandra que puedes rotar:

  • default (solo rotación de contraseñas)
  • admin_user
  • ddl_user
  • dml_user
  • jmxuser
  • apigee

Prepárate para la rotación de credenciales

Para seguir estos pasos, debes tener permiso para ejecutar kubectl apply -f dentro del clúster.

  1. Crea una copia de seguridad de la base de datos de Cassandra. Esta copia de seguridad se realiza para garantizar que se pueda recuperar las credenciales rotadas previamente. Consulta Descripción general de la copia de seguridad de Cassandra.
  2. Asegúrate de que el clúster esté en buen estado, que todos los recursos de Apigee se estén ejecutando y que no haya cambios de estado pendientes.

Rotación de credenciales de una sola región

  1. Crea un nuevo Secret de Kubernetes en tu espacio de nombres de Apigee que contenga las credenciales de usuario de Cassandra que deseas rotar, según se describe en Cómo configurar nombres de usuario y contraseñas en un Secret de Kubernetes.
  2. Realiza la verificación previa de la rotación.
    1. Crea un nuevo recurso personalizado de 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
      

      Aquí:

      • ROTATION_NAME: Es un nombre para la tarea de rotación, por ejemplo: sr-1-precheck.
      • APIGEE_NAMESPACE: tu espacio de nombres de Apigee.
      • APIGEE_ORG: Es el ID de tu organización de Apigee.
      • ROTATION_ID: Es un identificador personalizado, por ejemplo: rot-1-precheck.
      • TIMEOUT_MINUTES: Opcional Anula el valor predeterminado (480 min = 8 h). <=0 significa tiempo de espera infinito.
      • OLD_SECRET_REF: Es el nombre del secreto que usa actualmente apigeedatastore. Puedes encontrar esta información con el siguiente comando:
        kubectl -n APIGEE_NAMESPACE get apigeedatastore default -o jsonpath='{.spec.credentialRef}'
        
      • NEW_SECRET_REF: Es el nombre del secreto creado en el paso anterior.
    2. Aplica el archivo YAML de rotación para activar el trabajo de verificación previa de la rotación:
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
    3. Verifica el estado de la tarea y espera a que se complete.
      kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
      

      Cuando finalice el trabajo, el resultado 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 verificación previa a la rotación, realiza la rotación:
    1. Realiza los siguientes cambios en el archivo YAML de rotación:
      • Cambia metadata.name por un nombre que indique que no se trata de una verificación previa, por ejemplo: sr-1.
      • Establece spec.precheck en false.
      • Cambia spec.rotationId a 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 complete el trabajo de rotación, valida que el tráfico siga fluyendo correctamente.
  5. Después de validar tu tráfico, realiza la limpieza de los secretos anteriores.
    1. Realiza 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.
      • Establece spec.cassandra.jobType en CLEANUP.
    2. Vuelve a aplicar el archivo para realizar la limpieza.
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
    3. Verifica el estado de la tarea y espera a que se complete.
      kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
      

      Cuando se completa el trabajo de limpieza, se completa el proceso de rotación.

  6. Crea una copia de seguridad de la base de datos de Cassandra. Esta copia de seguridad se realiza para garantizar que se pueda recuperar las credenciales rotadas posteriormente.
  7. Borra el secreto de credenciales de Cassandra anterior.

Rotación de credenciales multirregional

  1. En cada región, crea un secreto de Kubernetes nuevo en tu espacio de nombres de Apigee que contenga las credenciales de usuario de Cassandra que deseas rotar, siguiendo las instrucciones de Cómo configurar nombres de usuario y contraseñas en un Secret de Kubernetes.

    Las credenciales deben ser las mismas en cada región.

  2. Realiza la verificación previa de la rotación.
    1. Crea un nuevo recurso personalizado de 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
      

      Aquí:

      • ROTATION_NAME: Es un nombre para la tarea de rotación, por ejemplo: sr-1-precheck.
      • APIGEE_NAMESPACE: tu espacio de nombres de Apigee.
      • APIGEE_ORG: Es el ID de tu organización de Apigee.
      • ROTATION_ID: Es un identificador personalizado, por ejemplo: rot-1-precheck.
      • TIMEOUT_MINUTES: Opcional Anula el valor predeterminado (480 min = 8 h). <=0 significa tiempo de espera infinito.
      • OLD_SECRET_REF: Es el nombre del secreto que usa actualmente apigeedatastore. Puedes encontrar esta información con el siguiente comando:
        kubectl -n APIGEE_NAMESPACE get apigeedatastore default -o jsonpath='{.spec.credentialRef}'
        
      • NEW_SECRET_REF: Es el nombre del secreto creado en el paso anterior.
    2. En la primera región, aplica el archivo YAML de rotación para activar el trabajo de verificación previa de la rotación:
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
    3. Verifica el estado de la tarea y espera a que se complete.
      kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
      

      Cuando finalice el trabajo, el resultado 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 verificación previa a la rotación, realiza la rotación en la misma región:
    1. Realiza los siguientes cambios en el archivo YAML de rotación:
      • Cambia metadata.name por un nombre que indique que no se trata de una verificación previa, por ejemplo: sr-1.
      • Establece spec.precheck en false.
      • Cambia spec.rotationId a 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 complete el trabajo de rotación, valida que el tráfico siga fluyendo correctamente.
  5. Repite los pasos de rotación para las regiones restantes.
  6. Después de validar tu tráfico, realiza la limpieza de los secretos anteriores. Solo debes realizar la limpieza en una sola región. No importa la región que elijas.
    1. Realiza 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.
      • Establece spec.cassandra.jobType en CLEANUP.
    2. Vuelve a aplicar el archivo para realizar la limpieza.
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
    3. Verifica el estado de la tarea y espera a que se complete.
      kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
      

      Cuando se completa el trabajo de limpieza, se completa el proceso de rotación.

  7. Crea una copia de seguridad de la base de datos de Cassandra. Esta copia de seguridad se realiza para garantizar que se pueda recuperar las credenciales rotadas posteriormente.
  8. Borra el secreto de credenciales de Cassandra anterior.

Cómo revertir una rotación

Realiza los siguientes pasos en cada región.

  1. Crea un nuevo recurso personalizado de 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
    

    Aquí:

    • ROLLBACK_NAME: Es un nombre para la tarea de reversión, por ejemplo: sr-1-rollback.
    • APIGEE_NAMESPACE: tu espacio de nombres de Apigee.
    • APIGEE_ORG: Es el ID de tu organización de Apigee.
    • ROTATION_ID: Es el ID de la rotación actual que reviertes, por ejemplo: rot-1.
    • TIMEOUT_MINUTES: Opcional Anula el valor predeterminado (480 min = 8 h). <=0 significa tiempo de espera infinito.
    • OLD_SECRET_REF: Debe coincidir con el nombre secreto de oldSecretRef: en el archivo YAML de rotación que usaste en el procedimiento de rotación de una sola región o de rotación de varias regiones.
    • NEW_SECRET_REF: Debe coincidir con el nombre secreto de newSecretRef: en el archivo YAML de rotación que usaste en el procedimiento de rotación de una sola región o rotación de varias regiones.
  2. Aplica la reversión:
    kubectl -n APIGEE_NAMESPACE apply -f ROLLBACK_YAML_FILE
    
  3. Verifica el estado de la tarea y espera a que se complete.
    kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
    
  4. Cuando se completen las reversiones, verifica que el tráfico siga fluyendo correctamente.
  5. Cuando el tráfico fluya correctamente, repite el proceso de reversión en cada región restante.
  6. Una vez que hayas completado la reversión y verificado que el tráfico sigue fluyendo correctamente, inicia el proceso de limpieza. Solo debes realizar la limpieza en una sola región. No importa la región que elijas.

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

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