- v1.15 (última)
- v1.14
- v1.13
- Lista de versiones admitidas
- v1.12
- v1.11
- v1.10
- v1.9
- v1.8
- v1.7
- Versión 1.6
- v1.5
- Versión 1.4
- Versión 1.3
- v1.2
- v1.1
Versiones compatibles:
Versiones no compatibles:
Información general
En este procedimiento se describe cómo rotar las credenciales de Cassandra en HashiCorp Vault. Para rotar las credenciales de los secretos de Kubernetes en tu clúster, consulta Rotar las credenciales de Cassandra en los secretos de Kubernetes.
Esta función permite a los administradores de la plataforma hacer lo siguiente:
- Rota las credenciales de Cassandra en HashiCorp Vault.
- Vuelve a las credenciales de Cassandra anteriores en Vault en caso de que haya algún problema durante la rotación de contraseñas.
- Cambia la contraseña de Cassandra de una región cada vez para asegurarte de que el impacto en la disponibilidad del servicio sea mínimo y mantener el control sobre el proceso de cambio.
- Monitoriza el 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 empezar
Antes de configurar la rotación de credenciales, debes hacer lo siguiente:
- Crea una copia de seguridad de tu base de datos de Cassandra. Esta copia de seguridad se realiza para asegurar que se puedan recuperar las credenciales anteriores a la rotación.
- Asegúrate de que el clúster esté en buen estado (es decir, que todos los recursos de Apigee estén en ejecución y que no haya cambios de estado pendientes).
Configuración de una sola región
-
Crea un recurso de
SecretProviderClass
Kubernetes en tu espacio de nombres de Apigee para las nuevas credenciales de Cassandra. Consulta Almacenar secretos de Cassandra en HashiCorp Vault para ver una plantilla que puedes usar. De esta forma, un rol de Vault puede acceder a los secretos de los espacios de nombres de Kubernetes. -
Crea un recurso personalizado
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: nombre único del trabajo de rotación. Deberá asignar a
metadata.name
un valor único para la tarea de comprobación previa de la rotación y otro para la tarea de rotación. Por ejemplo,sr-1-precheck
seguido desr-1
. - ROTATION_ID: asigna a
spec.rotationId
un identificador personalizado, comorotation-1-precheck
. - NEW_SPC_NAME: asigna a
spec.cassandra.newSecretProviderClass
el nombre de la nueva clase de proveedor de secretos que has creado en el paso anterior. - OLD_SPC_NAME: asigna a
spec.cassandra.oldSecretProviderClass
el nombre del SPC que usa actualmente elApigeeDatastore
.
- ROTATION_PROCESS_NAME: nombre único del trabajo de rotación. Deberá asignar a
-
Activa el trabajo de comprobación previa de la rotación aplicando el archivo
rotation.yaml
.kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml
-
Comprueba el estado del trabajo para verificar cuándo se ha completado el trabajo de comprobación previa.
kubectl -n APIGEE_NAMESPACE get job sr-(rotationId)-(rotate|rollback|cleanup)-job
-
Una vez que se haya completado la comprobación previa de la rotación, cambia el valor de
metadata.name
y asignaspec.precheck
afalse
. Vuelve a aplicar el archivo para realizar la rotación.kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml
-
Una vez que se haya completado el trabajo de rotación y hayas validado que el tráfico sigue fluyendo correctamente, limpia el proceso siguiendo estos dos pasos:
-
Actualiza el valor de
metadata.name
y asigna el valorCLEANUP
aspec.cassandra.jobType
. -
Activa el trabajo de limpieza aplicando el archivo.
kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml
Cuando se complete el trabajo de limpieza, se habrá completado el proceso de rotación.
-
Actualiza el valor de
-
Actualiza el archivo de anulaciones y asigna
cassandra.auth.secretProviderClass
a la nueva clase de proveedor de secretos (newSecretProviderClass
).cassandra: auth: secretProviderClass: NEW_SPC_NAME
- Crea una copia de seguridad de tu 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.
- Elimina las credenciales, el rol y la política de Cassandra antiguos 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 del resto de las regiones.
- Completa los siguientes pasos en la primera región antes de empezar con las siguientes.
-
Crea un recurso de
SecretProviderClass
Kubernetes en el espacio de nombresAPIGEE_NAMESPACE
para las nuevas credenciales de Cassandra. Consulta Almacenar secretos de Cassandra en HashiCorp Vault para ver una plantilla que puedes usar. De esta forma, un rol de Vault puede acceder a los secretos de los espacios de nombres de Kubernetes. -
Crea un recurso personalizado
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: nombre único del trabajo de rotación. Deberá asignar a
metadata.name
un valor único para la tarea de comprobación previa de la rotación y otro para la tarea de rotación. Por ejemplo,sr-1-precheck
seguido desr-1
. - ROTATION_ID: asigna a
spec.rotationId
un identificador personalizado, comorotation-1-precheck
. - NEW_SPC_NAME: asigna a
spec.cassandra.newSecretProviderClass
el nombre de la nueva clase de proveedor de secretos que has creado en el paso anterior. - OLD_SPC_NAME: asigna a
spec.cassandra.oldSecretProviderClass
el nombre del SPC que usa actualmente elApigeeDatastore
.
- ROTATION_PROCESS_NAME: nombre único del trabajo de rotación. Deberá asignar a
-
Activa el trabajo de comprobación previa de la rotación aplicando el archivo
rotation.yaml
.kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml
-
Comprueba el estado del trabajo para verificar cuándo se ha completado el trabajo de comprobación previa.
kubectl -n APIGEE_NAMESPACE get job sr-(rotationId)-(rotate|rollback|cleanup)-job
-
Una vez que se haya completado la tarea de comprobación previa de la rotación:
- Cambia el valor de
metadata.name
; por ejemplo, desr-1-precheck
asr-1
. - Define
spec.precheck
comofalse
para desactivar la comprobación previa y realizar la rotación. - Asigna un nuevo identificador a
spec.rotationId
, 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
-
Comprueba el estado de
SecretRotation
y espera a que seacomplete
.kubectl -n APIGEE_NAMESPACE get sr SR_NAME
-
Crea un recurso de
-
En cada región posterior, sigue estos pasos:
- Crea un recurso de
SecretProviderClass
Kubernetes en tu espacio de nombres de Apigee para las nuevas credenciales de Cassandra. Consulta Almacenar secretos de Cassandra en HashiCorp Vault para ver una plantilla que puedes usar. Debe ser la misma definición que en el paso 1a. - Actualiza
overrides.yaml
y asigna acassandra.auth.secretProviderClass
el valor despec.cassandra.newSecretProviderClass
en el archivorotation.yaml
.cassandra: auth: secretProviderClass: NEW_SPC_NAME
- Aplica el gráfico de operadores:
helm upgrade operator apigee-operator/ \ --namespace APIGEE_NAMESPACE \ --atomic \ -f OVERRIDES_FILE
-
Se creará un nuevo
ReplicaSet
. Comprueba que los nuevos pods de controller-manager estén usando 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 haya definido 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 Datastore:
helm upgrade datastore apigee-datastore/ \ --namespace APIGEE_NAMESPACE \ --atomic \ -f OVERRIDES_FILE
- El almacén de datos pasará al estado de lanzamiento. Espera hasta que el almacén de datos haya terminado de liberarse y esté en el estado de ejecución.
kubectl -n APIGEE_NAMESPACE get apigeedatastore DATASTORE_NAME
DATASTORE_NAME es
default
en la mayoría de las instalaciones. - Comprueba que los nuevos pods de almacén de datos estén usando 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 haya definido 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 se hayan lanzado y hayan vuelto al estado de ejecución.
kubectl -n APIGEE_NAMESPACE get apigeeorg ORG_NAME
kubectl -n APIGEE_NAMESPACE get apigeeenv ENV_NAME
- Comprueba que los nuevos pods de MART, de tiempo de ejecución y de sincronizador estén usando 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 haya definido 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 recurso de
-
Después de completar los pasos en todas las regiones y comprobar que el tráfico sigue fluyendo correctamente, limpia el proceso en la primera región con los dos pasos siguientes:
-
En la primera región, actualice el valor de
metadata.name
y asignespec.cassandra.jobType
aCLEANUP
. -
Activa el trabajo de limpieza aplicando el archivo.
kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml
- Comprueba el estado del trabajo y consulta los registros para verificar cuándo se ha completado el trabajo de limpieza.
Cuando se complete el trabajo de limpieza, se habrá completado el proceso de rotación.
-
En la primera región, actualice el valor de
-
Actualiza el archivo de anulaciones y asigna
cassandra.auth.secretProviderClass
a la nueva clase de proveedor de secretos (newSecretProviderClass
).cassandra: auth: secretProviderClass: NEW_SPC_NAME
- Crea una copia de seguridad de tu 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.
- Elimina las credenciales, el rol y la política de Cassandra antiguos de Vault.
Restaurar una rotación
En el caso de las multirregiones, realiza la reversión en cada región.
-
Crea un recurso personalizado SecretRotation con la siguiente plantilla:
# rollback-rotation.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: oldSecretProviderClass: OLD_SPC_NAME # Must match the previous oldSecretProviderClass. newSecretProviderClass: NEW_SPC_NAME # Must match the previous newSecretProviderClass. 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_SPC_NAME: debe coincidir con el nombre del secreto de
oldSecretProviderClass:
en el archivo YAML de rotación que has usado en el procedimiento de configuración de una sola región o de configuración multirregión. - NEW_SPC_NAME: debe coincidir con el nombre del secreto de
newSecretProviderClass:
en el archivo YAML de rotación que has usado en el procedimiento de configuración de una sola región o de configuración multirregión.
- ROLLBACK_NAME: nombre del trabajo de reversión. Por ejemplo,
-
Aplica la restauración:
kubectl -n APIGEE_NAMESPACE apply -f ROLLBACK_YAML_FILE
-
Comprueba el estado del trabajo y espera a que se complete.
kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
- Cuando se completen las restauraciones, comprueba que el tráfico sigue fluyendo correctamente.
- En las instalaciones multirregión, cuando el tráfico fluya correctamente, repite el proceso de restauración en cada región.
-
Una vez que hayas completado la reversión y hayas verificado que el tráfico sigue fluyendo correctamente en todas las regiones, inicia el proceso de limpieza.
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
porCLEANUP_ROLLBACK
.
- Cambia
-
Aplica el archivo para activar el trabajo de limpieza:
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
-
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.
-
Actualiza el archivo de anulaciones y asigna
cassandra.auth.secretProviderClass
a la clase del proveedor de secretos antiguo (oldSecretProviderClass
).cassandra: auth: secretProviderClass: OLD_SPC_NAME