Descripción general
Esta función permite a los administradores de la plataforma hacer lo siguiente:
- Rota las credenciales de Cassandra en Hashicorp Vault.
- Revierte a las credenciales de Cassandra anteriores en Vault en caso de que haya algún problema durante la rotación de contraseñas.
- Rota la contraseña de Cassandra para una región a la vez, de modo que puedas garantizar un impacto mínimo en la disponibilidad del servicio y mantener el control sobre el proceso de rotación.
- Haz un seguimiento del inicio, el progreso y la finalización de la rotación de una sola región.
Esta función está disponible en Apigee Hybrid 1.13.1 y versiones posteriores.
Antes de comenzar
Antes de configurar la rotación de credenciales, haz lo siguiente:
- Crea una copia de seguridad de tu base de datos de Cassandra. Esta copia de seguridad se realiza para garantizar que se pueda recuperar las credenciales rotadas previamente.
- Asegúrate de que el clúster esté en buen estado (es decir, que todos los recursos de Apigee se estén ejecutando y que no haya cambios de estado pendientes).
Configuración de una sola región
-
Crea un nuevo recurso de Kubernetes
SecretProviderClass
en tu espacio de nombres de Apigee para las nuevas credenciales de Cassandra. Consulta Almacena secretos de Cassandra en Hashicorp Vault para obtener una plantilla que puedas usar. Esto permite que un rol de Vault acceda a los secretos dentro de los espacios de nombres de Kubernetes. -
Crea un nuevo recurso personalizado de
SecretRotation
con la siguiente plantilla:# rotation.yaml apiVersion: apigee.cloud.google.com/v1alpha1 kind: SecretRotation metadata: name: ROTATION_PROCESS_NAME namespace: APIGEE_NAMESPACE spec: organizationId: ORG_NAME rotationId: ROTATION_ID timeoutMinutes: 480 # optional. overrides the default (480m == 8hr). # less than or equal to 0 means infinite timeout. precheck: true cassandra: oldSecretProviderClass: OLD_SPC_NAME newSecretProviderClass: NEW_SPC_NAME jobType: ROTATE
- ROTATION_PROCESS_NAME: Es un nombre único para la tarea de rotación. Deberás establecer
metadata.name
en un valor único para el trabajo de verificación previa a la rotación y, nuevamente, para el trabajo de rotación. Por ejemplo,sr-1-precheck
seguido desr-1
. - ROTATION_ID: Establece
spec.rotationId
en un identificador personalizado, por ejemplo,rotation-1-precheck
. - NEW_SPC_NAME: Establece
spec.cassandra.newSecretProviderClass
en el nuevo nombre de clase del proveedor de secretos que creaste en el paso anterior. - OLD_SPC_NAME: Establece
spec.cassandra.oldSecretProviderClass
en el nombre de SPC que usa actualmenteApigeeDatastore
.
- ROTATION_PROCESS_NAME: Es un nombre único para la tarea de rotación. Deberás establecer
-
Aplica el archivo
rotation.yaml
para activar el trabajo de verificación previa de la rotación.kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml
-
Verifica el estado de la tarea para comprobar cuándo se completa la tarea de verificación previa.
kubectl -n APIGEE_NAMESPACE get job sr-(rotationId)-(rotate|rollback|cleanup)-job
-
Una vez que se complete la tarea de verificación previa a la rotación, cambia el valor de
metadata.name
y establecespec.precheck
enfalse
. Vuelve a aplicar el archivo para realizar la rotación.kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml
-
Una vez que se complete el trabajo de rotación y hayas validado que el tráfico sigue fluyendo correctamente, limpia el proceso con los siguientes dos pasos:
-
Actualiza el valor de
metadata.name
y establecespec.cassandra.jobType
enCLEANUP
. -
Aplica el archivo para activar el trabajo de limpieza.
kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml
Cuando se completa el trabajo de limpieza, se completa el proceso de rotación.
-
Actualiza el valor de
- Crea una copia de seguridad de tu base de datos de Cassandra. Esta copia de seguridad se realiza para garantizar que se pueda recuperar las credenciales rotadas posteriormente.
- Borra las credenciales, el rol y la política de Cassandra anteriores de Vault.
Configuración multirregional
Los procedimientos de configuración multirregional se dividen en dos secciones: configuración de la primera región y configuración de las regiones restantes.
- Completa los siguientes pasos en la primera región antes de comenzar con las regiones posteriores.
-
Crea un nuevo recurso de Kubernetes
SecretProviderClass
en el espacio de nombresAPIGEE_NAMESPACE
para las nuevas credenciales de Cassandra. Consulta Almacena secretos de Cassandra en Hashicorp Vault para obtener una plantilla que puedas usar. Esto permite que un rol de Vault acceda a los secretos dentro de los espacios de nombres de Kubernetes. -
Crea un nuevo recurso personalizado de
SecretRotation
con la siguiente plantilla:# rotation.yaml apiVersion: apigee.cloud.google.com/v1alpha1 kind: SecretRotation metadata: name: ROTATION_PROCESS_NAME namespace: APIGEE_NAMESPACE spec: organizationId: ORG_NAME rotationId: ROTATION_ID timeoutMinutes: -1 # this value is required and should not be changed. precheck: true cassandra: oldSecretProviderClass: OLD_SPC_NAME newSecretProviderClass: NEW_SPC_NAME jobType: ROTATE
- ROTATION_PROCESS_NAME: Es un nombre único para la tarea de rotación. Deberás establecer
metadata.name
en un valor único para el trabajo de verificación previa a la rotación y, nuevamente, para el trabajo de rotación. Por ejemplo,sr-1-precheck
seguido desr-1
. - ROTATION_ID: Establece
spec.rotationId
en un identificador personalizado, por ejemplo,rotation-1-precheck
. - NEW_SPC_NAME: Establece
spec.cassandra.newSecretProviderClass
en el nuevo nombre de clase del proveedor de secretos que creaste en el paso anterior. - OLD_SPC_NAME: Establece
spec.cassandra.oldSecretProviderClass
en el nombre de SPC que usa actualmenteApigeeDatastore
.
- ROTATION_PROCESS_NAME: Es un nombre único para la tarea de rotación. Deberás establecer
-
Aplica el archivo
rotation.yaml
para activar el trabajo de verificación previa de la rotación.kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml
-
Verifica el estado de la tarea para comprobar cuándo se completa la tarea de verificación previa.
kubectl -n APIGEE_NAMESPACE get job sr-(rotationId)-(rotate|rollback|cleanup)-job
-
Una vez que se complete el trabajo de verificación previa a la rotación, haz lo siguiente:
- Cambia el valor de
metadata.name
, por ejemplo, desr-1-precheck
asr-1
. - Establece
spec.precheck
enfalse
para desactivar la verificación previa y realizar la rotación. - Establece
spec.rotationId
en un identificador nuevo, por ejemplo,rotation-1
.
- Cambia el valor de
-
Vuelve a aplicar el archivo para realizar la rotación.
kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml
-
Verifica el estado de
SecretRotation
y espera hasta que seacomplete
.kubectl -n APIGEE_NAMESPACE get sr SR_NAME
-
Crea un nuevo recurso de Kubernetes
-
En cada región posterior, completa los siguientes pasos:
- Crea un nuevo recurso de Kubernetes
SecretProviderClass
en tu espacio de nombres de Apigee para las nuevas credenciales de Cassandra. Consulta Almacena secretos de Cassandra en Hashicorp Vault para obtener una plantilla que puedas usar. Esta debe ser la misma definición que en el paso 1a. - Actualiza tu
overrides.yaml
y establececassandra.auth.secretProviderClass
para que coincida con el valor despec.cassandra.newSecretProviderClass
en el archivorotation.yaml
.cassandra: auth: secretProviderClass: NEW_SPC_NAME
- Aplica el gráfico del operador:
helm upgrade operator apigee-operator/ \ --namespace APIGEE_NAMESPACE \ --atomic \ -f OVERRIDES_FILE
-
Se creará un
ReplicaSet
nuevo. Verifica que los nuevos Pods de controlador-administrador usen el nuevo SPC:export POD=NEW_CONTROLLER_MANAGER_POD_NAME
kubectl -n APIGEE_NAMESPACE get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'
El resultado debe coincidir con el valor que estableciste para
spec.cassandra.newSecretProviderClass
enrotation.yaml
, por ejemplo:kubectl -n apigee get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'
my-new-spc - Aplica el gráfico de almacén de datos:
helm upgrade datastore apigee-datastore/ \ --namespace APIGEE_NAMESPACE \ --atomic \ -f OVERRIDES_FILE
- El almacén de datos pasará a un estado de lanzamiento. Espera a que el almacén de datos termine de lanzarse y esté en estado de ejecución.
kubectl -n APIGEE_NAMESPACE get apigeedatastore DATASTORE_NAME
DATASTORE_NAME es
default
en la mayoría de las instalaciones. - Verifica que los nuevos Pods del almacén de datos usen el nuevo SPC:
export POD=NEW_DATASTORE_POD_NAME
kubectl -n APIGEE_NAMESPACE get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'
El resultado debe coincidir con el valor que estableciste para
spec.cassandra.newSecretProviderClass
enrotation.yaml
, por ejemplo:kubectl -n apigee get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'
my-new-spc - Espera a que la organización y los entornos terminen de lanzarse y vuelvan al estado de ejecución.
kubectl -n APIGEE_NAMESPACE get apigeeorg ORG_NAME
kubectl -n APIGEE_NAMESPACE get apigeeenv ENV_NAME
- Verifica que los nuevos Pods de MART, entorno de ejecución y sincronizador usen el nuevo SPC:
export POD=NEW_MART_POD_NAME
kubectl -n APIGEE_NAMESPACE get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'
export POD=NEW_RUNTIME_POD_NAME
kubectl -n APIGEE_NAMESPACE get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'
export POD=NEW_SYNCHRONIZER_POD_NAME
kubectl -n APIGEE_NAMESPACE get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'
El resultado debe coincidir con el valor que estableciste para
spec.cassandra.newSecretProviderClass
enrotation.yaml
, por ejemplo:kubectl -n apigee get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'
my-new-spc
- Crea un nuevo recurso de Kubernetes
-
Después de completar los pasos en cada región y validar que el tráfico siga fluyendo correctamente, limpia el proceso en la primera región con los siguientes dos pasos:
-
En la primera región, actualiza el valor de
metadata.name
y establecespec.cassandra.jobType
enCLEANUP
. -
Aplica el archivo para activar el trabajo de limpieza.
kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml
- Verifica el estado de la tarea y observa los registros para comprobar cuándo se completa la tarea de limpieza.
Cuando se completa el trabajo de limpieza, se completa el proceso de rotación.
-
En la primera región, actualiza el valor de
- Crea una copia de seguridad de tu base de datos de Cassandra. Esta copia de seguridad se realiza para garantizar que se pueda recuperar las credenciales rotadas posteriormente.
- Borra las credenciales, el rol y la política de Cassandra anteriores de Vault.