Rotación de secretos de Cassandra en secretos de Kubernetes
En este procedimiento, se describe la rotación de credenciales de Cassandra en secretos de Kubernetes en tu clúster. Para rotar las credenciales dentro de 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, ya que automatiza y activa tres tareas:
- Rotación de credenciales del usuario
- Reversión de la rotación
- Limpieza de credenciales antiguas y nuevas
Rota los secretos de Cassandra en los secretos de Kubernetes
Se pueden rotar seis pares de credenciales de Cassandra (nombre de usuario y contraseña):
- Predeterminado*
- Administrador
- DDL
- DML
- JMX
- Jolokia
Prepárate para la rotación de credenciales
Para seguir estos pasos, debes tener permiso para ejecutar kubectl apply -f
dentro del clúster.
- 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.
- 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
- Crea un nuevo secreto de Kubernetes en tu espacio de nombres de Apigee que contenga las credenciales de usuario de Cassandra que deseas rotar, según se indica en Configura nombres de usuario y contraseñas en un secreto de Kubernetes.
- Realiza la verificación previa de la rotación.
-
Crea un nuevo 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
Aquí:
- ROTATION_NAME: Es un nombre para el trabajo 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: Un identificador personalizado, por ejemplo,
rot-1-precheck
. - TIMEOUT_MINUTES: Opcional Anula el valor predeterminado (480 m == 8 h). <=0 significa tiempo de espera infinito.
- PRECHECK : Activa la ejecución de prueba. Cuando se establece como verdadero, el proceso de rotación pasa por todos los pasos, excepto la aplicación real de las nuevas credenciales.
- OLD_SECRET_REF: Es el nombre del secreto que usa actualmente
apigeedatastore
. Puedes encontrarlo con el siguiente comando:kubectl -n APIGEE_NAMESPACE get apigeedatastore default -o jsonpath='{.spec.credentialRef}'
- NEW_SECRET_REF: Es el nombre del secreto que creaste en el paso anterior.
- ROTATION_NAME: Es un nombre para el trabajo de rotación, por ejemplo,
-
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
-
Verifica el estado del trabajo 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
-
Crea un nuevo recurso personalizado SecretRotation con la siguiente plantilla:
-
Cuando se complete el trabajo de verificación previa a la rotación, realiza la rotación:
- 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
enfalse
. - Cambia
spec.rotationId
a un identificador nuevo, por ejemplo,rot-1
.
- Cambia
- Vuelve a aplicar el archivo para realizar la rotación.
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
- Realiza los siguientes cambios en el archivo YAML de rotación:
- Una vez que se complete el trabajo de rotación, valida que el tráfico siga fluyendo correctamente.
- Después de validar tu tráfico, limpia los secretos antiguos.
-
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
. - Establece
spec.cassandra.jobType
enCLEANUP
. - Asegúrate de que
spec.precheck
esté configurado comofalse
.
- Cambia
- Vuelve a aplicar el archivo para realizar la limpieza.
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
-
Verifica el estado del trabajo 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.
-
Realiza los siguientes cambios en el archivo YAML de rotación:
-
Actualiza tu archivo de anulaciones y establece
cassandra.auth.secret
en el nuevo nombre secreto (newSecretRef
).cassandra: auth: secret: NEW_SECRET_REF
- 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.
- Borra el secreto de credenciales de Cassandra anterior.
Rotación de credenciales multirregional
-
En cada región, crea un nuevo secreto de Kubernetes en tu espacio de nombres de Apigee que contenga las credenciales de usuario de Cassandra que deseas rotar, según lo indicado en Cómo configurar nombres de usuario y contraseñas en un secreto de Kubernetes.
Las credenciales deben ser las mismas en cada región.
- Realiza la verificación previa de la rotación.
-
Crea un nuevo 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
Aquí:
- ROTATION_NAME: Es un nombre para el trabajo 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: Un identificador personalizado, por ejemplo,
rot-1-precheck
. - TIMEOUT_MINUTES: Opcional Anula el valor predeterminado (480 m == 8 h). <=0 significa tiempo de espera infinito.
- PRECHECK : Activa la ejecución de prueba. Cuando se establece como verdadero, el proceso de rotación pasa por todos los pasos, excepto la aplicación real de las nuevas credenciales.
- OLD_SECRET_REF: Es el nombre del secreto que usa actualmente
apigeedatastore
. Puedes encontrarlo con el siguiente comando:kubectl -n APIGEE_NAMESPACE get apigeedatastore default -o jsonpath='{.spec.credentialRef}'
- NEW_SECRET_REF: Es el nombre del secreto que creaste en el paso anterior.
- ROTATION_NAME: Es un nombre para el trabajo de rotación, por ejemplo,
-
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
-
Verifica el estado del trabajo 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
-
Crea un nuevo recurso personalizado SecretRotation con la siguiente plantilla:
-
Cuando se complete el trabajo de verificación previa a la rotación, realiza la rotación en la misma región:
- 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
enfalse
. - Cambia
spec.rotationId
a un identificador nuevo, por ejemplo,rot-1
.
- Cambia
- Vuelve a aplicar el archivo para realizar la rotación.
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
- Realiza los siguientes cambios en el archivo YAML de rotación:
- Una vez que se complete el trabajo de rotación, valida que el tráfico siga fluyendo correctamente.
- Repite los pasos de rotación para las regiones restantes.
- Después de validar tu tráfico, limpia los secretos antiguos. Solo debes realizar la limpieza en una región. No importa qué región 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
. - Establece
spec.cassandra.jobType
enCLEANUP
. - Asegúrate de que
spec.precheck
esté configurado comofalse
.
- Cambia
- Vuelve a aplicar el archivo para realizar la limpieza.
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
-
Verifica el estado del trabajo 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.
-
Realiza los siguientes cambios en el archivo YAML de rotación:
-
Actualiza tu archivo de anulaciones y establece
cassandra.auth.secret
en el nuevo nombre secreto (newSecretRef
).cassandra: auth: secret: NEW_SECRET_REF
- 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.
- Borra el secreto de credenciales de Cassandra anterior.
Cómo revertir una rotación
Sigue estos pasos en cada región.
-
Crea un nuevo 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
Aquí:
- ROLLBACK_NAME: Es un nombre para el trabajo 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 a la que reviertes los cambios, por ejemplo,
rot-1
. - TIMEOUT_MINUTES: Opcional Anula el valor predeterminado (480 m == 8 h). <=0 significa tiempo de espera infinito.
- OLD_SECRET_REF: Debe coincidir con el nombre del secreto para
oldSecretRef:
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. - NEW_SECRET_REF: Debe coincidir con el nombre del secreto para
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.
- ROLLBACK_NAME: Es un nombre para el trabajo de reversión, por ejemplo,
-
Aplica la reversión:
kubectl -n APIGEE_NAMESPACE apply -f ROLLBACK_YAML_FILE
-
Verifica el estado del trabajo y espera a que se complete.
kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
- Cuando se completen las reversiones, verifica que el tráfico siga fluyendo correctamente.
- Cuando el tráfico fluya correctamente, repite el proceso de reversión en cada región restante.
-
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 región. No importa qué región elijas.
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-rollback
. - Cambia
spec.cassandra.jobType
aCLEANUP_ROLLBACK
.
- Cambia
-
Aplica el archivo para activar el trabajo de limpieza:
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
-
Verifica el estado del trabajo 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 reversión.
-
Actualiza tu archivo de anulaciones y establece
cassandra.auth.secret
en el nombre del secreto anterior (oldSecretRef
).cassandra: auth: secret: OLD_SECRET_REF