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.
- 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 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.
- Realiza la verificación previa de la rotación.
-
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.
- ROTATION_NAME: Es un nombre para la tarea 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 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
-
Crea un nuevo recurso personalizado de SecretRotation con la siguiente plantilla:
-
Cuando se complete la tarea 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, realiza la limpieza de los secretos anteriores.
-
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
enCLEANUP
.
- Cambia
- Vuelve a aplicar el archivo para realizar la limpieza.
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
-
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.
-
Realiza los siguientes cambios en el archivo YAML de rotación:
- 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 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.
- Realiza la verificación previa de la rotación.
-
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.
- ROTATION_NAME: Es un nombre para la tarea 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 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
-
Crea un nuevo recurso personalizado de SecretRotation con la siguiente plantilla:
-
Cuando se complete la tarea 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, realiza la limpieza de los secretos anteriores. 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
por un nombre que indique que se trata de un trabajo de limpieza, por ejemplo:sr-1-cleanup
. - Establece
spec.cassandra.jobType
enCLEANUP
.
- Cambia
- Vuelve a aplicar el archivo para realizar la limpieza.
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
-
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.
-
Realiza los siguientes cambios en el archivo YAML de rotación:
- 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
Realiza los siguientes pasos en cada región.
-
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.
- ROLLBACK_NAME: Es un nombre para la tarea de reversión, por ejemplo:
-
Aplica la reversión:
kubectl -n APIGEE_NAMESPACE apply -f ROLLBACK_YAML_FILE
-
Verifica el estado de la tarea 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 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
aCLEANUP_ROLLBACK
.
- Cambia
-
Aplica el archivo para activar el trabajo de limpieza:
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE