Rotation des secrets Cassandra dans les secrets Kubernetes
Cette procédure décrit la rotation des identifiants Cassandra dans les secrets Kubernetes de votre cluster. Pour savoir comment faire pivoter des identifiants dans Hashicorp Vault, consultez Rotation des identifiants Cassandra dans Hashicorp Vault.
Cette procédure vous permettra de faire tourner les identifiants Cassandra utilisés pour les services Apigee hybrid de production sans entraîner de temps d'arrêt en automatisant et en déclenchant trois tâches:
- Rotation des identifiants utilisateur
- Rollback de la rotation
- Nettoyage des anciens et nouveaux identifiants
Faire tourner des secrets Cassandra dans des secrets Kubernetes
Vous pouvez faire pivoter six paires nom d'utilisateur/mot de passe d'identifiants Cassandra:
default
(rotation des mots de passe uniquement)admin_user
ddl_user
dml_user
jmxuser
apigee
Préparer la rotation des identifiants
Pour effectuer ces étapes, vous devez disposer de l'autorisation d'exécuter kubectl apply -f
dans le cluster.
- Sauvegardez la base de données Cassandra. Cette sauvegarde permet de s'assurer que la récupération est possible avec des identifiants ayant bénéficié d'une pré-rotation. Consultez la section Présentation de la sauvegarde Cassandra.
- Assurez-vous que le cluster est en bon état, que toutes les ressources Apigee s'exécutent et qu'aucun changement d'état n'est en attente.
Rotation des identifiants dans une seule région
- Créez un secret Kubernetes dans votre espace de noms Apigee contenant les identifiants utilisateur Cassandra que vous souhaitez faire pivoter, en suivant la procédure décrite dans Définir les noms d'utilisateur et les mots de passe dans un secret Kubernetes.
- Effectuez la vérification préalable de la rotation.
-
Créez une ressource personnalisée SecretRotation à l'aide du modèle suivant:
# 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
Où :
- ROTATION_NAME : nom de la tâche de rotation (par exemple,
sr-1-precheck
). - APIGEE_NAMESPACE: votre espace de noms Apigee.
- APIGEE_ORG: ID de votre organisation Apigee.
- ROTATION_ID : identifiant personnalisé, par exemple
rot-1-precheck
. - TIMEOUT_MINUTES : facultatif. Remplace la valeur par défaut (480 mn = 8 heures). <=0 signifie un délai avant expiration infini.
- OLD_SECRET_REF: nom du secret actuellement utilisé par le
apigeedatastore
. Pour ce faire, exécutez la commande suivante:kubectl -n APIGEE_NAMESPACE get apigeedatastore default -o jsonpath='{.spec.credentialRef}'
- NEW_SECRET_REF: nom du secret créé à l'étape précédente.
- ROTATION_NAME : nom de la tâche de rotation (par exemple,
-
Déclenchez la tâche de prévérification de la rotation en appliquant le fichier YAML de rotation:
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
-
Vérifiez l'état de la tâche et attendez qu'elle soit terminée.
kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
Une fois la tâche terminée, la sortie contient les éléments suivants:
Status: Message: rotation complete State: complete
kubectl -n APIGEE_NAMESPACE logs sr-ROTATION_ID-rotate-job-HASH
-
Créez une ressource personnalisée SecretRotation à l'aide du modèle suivant:
-
Une fois la tâche de prévérification de la rotation terminée, effectuez la rotation :
- Apportez les modifications suivantes dans le fichier YAML de rotation :
- Remplacez
metadata.name
par un nom indiquant qu'il ne s'agit pas d'une prévérification, par exemple:sr-1
. - Définissez
spec.precheck
surfalse
. - Remplacez
spec.rotationId
par un nouvel identifiant, par exemplerot-1
.
- Remplacez
- Appliquez à nouveau le fichier pour effectuer la rotation.
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
- Apportez les modifications suivantes dans le fichier YAML de rotation :
- Une fois la tâche de rotation terminée, vérifiez que le trafic continue de s'écouler correctement.
- Après avoir validé votre trafic, nettoyez les anciens secrets.
-
Apportez les modifications suivantes dans le fichier YAML de rotation :
- Remplacez
metadata.name
par un nom indiquant qu'il s'agit d'une tâche de nettoyage, par exemplesr-1-cleanup
. - Définissez
spec.cassandra.jobType
surCLEANUP
.
- Remplacez
- Appliquez à nouveau le fichier pour effectuer le nettoyage.
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
-
Vérifiez l'état de la tâche et attendez qu'elle soit terminée.
kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
Une fois la tâche de nettoyage terminée, le processus de rotation est terminé.
-
Apportez les modifications suivantes dans le fichier YAML de rotation :
- Effectuez une sauvegarde de la base de données Cassandra. Cette sauvegarde permet de s'assurer que la récupération est possible avec des identifiants ayant bénéficié d'une post-rotation.
- Supprimez l'ancien secret d'identifiants Cassandra.
Rotation des identifiants multirégionale
-
Dans chaque région, créez un secret Kubernetes dans votre espace de noms Apigee contenant les identifiants utilisateur Cassandra que vous souhaitez faire pivoter, en suivant la procédure Définir les noms d'utilisateur et les mots de passe dans un secret Kubernetes.
Les identifiants doivent être les mêmes dans chaque région.
- Effectuez la vérification préalable de la rotation.
-
Créez une ressource personnalisée SecretRotation à l'aide du modèle suivant:
# 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
Où :
- ROTATION_NAME : nom de la tâche de rotation (par exemple,
sr-1-precheck
). - APIGEE_NAMESPACE: votre espace de noms Apigee.
- APIGEE_ORG: ID de votre organisation Apigee.
- ROTATION_ID : identifiant personnalisé, par exemple
rot-1-precheck
. - TIMEOUT_MINUTES : facultatif. Remplace la valeur par défaut (480 mn = 8 heures). <=0 signifie un délai avant expiration infini.
- OLD_SECRET_REF: nom du secret actuellement utilisé par
apigeedatastore
. Pour ce faire, exécutez la commande suivante:kubectl -n APIGEE_NAMESPACE get apigeedatastore default -o jsonpath='{.spec.credentialRef}'
- NEW_SECRET_REF: nom du secret créé à l'étape précédente.
- ROTATION_NAME : nom de la tâche de rotation (par exemple,
-
Dans la première région, déclenchez la tâche de prévérification de la rotation en appliquant le fichier YAML de rotation:
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
-
Vérifiez l'état de la tâche et attendez qu'elle soit terminée.
kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
Une fois la tâche terminée, la sortie contient les éléments suivants:
Status: Message: rotation complete State: complete
kubectl -n APIGEE_NAMESPACE logs sr-ROTATION_ID-rotate-job-HASH
-
Créez une ressource personnalisée SecretRotation à l'aide du modèle suivant:
-
Une fois la tâche de prévérification de la rotation terminée, effectuez la rotation dans la même région :
- Apportez les modifications suivantes dans le fichier YAML de rotation :
- Remplacez
metadata.name
par un nom indiquant qu'il ne s'agit pas d'une prévérification, par exemple:sr-1
. - Définissez
spec.precheck
surfalse
. - Remplacez
spec.rotationId
par un nouvel identifiant, par exemplerot-1
.
- Remplacez
- Appliquez à nouveau le fichier pour effectuer la rotation.
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
- Apportez les modifications suivantes dans le fichier YAML de rotation :
- Une fois la tâche de rotation terminée, vérifiez que le trafic continue de s'écouler correctement.
- Répétez les étapes de rotation pour les autres régions.
- Après avoir validé votre trafic, nettoyez les anciens secrets. Vous n'avez besoin d'effectuer le nettoyage que dans une seule région. Quelle que soit la région choisie,
-
Apportez les modifications suivantes dans le fichier YAML de rotation :
- Remplacez
metadata.name
par un nom indiquant qu'il s'agit d'une tâche de nettoyage, par exemplesr-1-cleanup
. - Définissez
spec.cassandra.jobType
surCLEANUP
.
- Remplacez
- Appliquez à nouveau le fichier pour effectuer le nettoyage.
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
-
Vérifiez l'état de la tâche et attendez qu'elle soit terminée.
kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
Une fois la tâche de nettoyage terminée, le processus de rotation est terminé.
-
Apportez les modifications suivantes dans le fichier YAML de rotation :
- Effectuez une sauvegarde de la base de données Cassandra. Cette sauvegarde permet de s'assurer que la récupération est possible avec des identifiants ayant bénéficié d'une post-rotation.
- Supprimez l'ancien secret d'identifiants Cassandra.
Effectuer un rollback d'une rotation
Suivez les étapes suivantes dans chaque région.
-
Créez une ressource personnalisée SecretRotation à l'aide du modèle suivant:
# 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
Où :
- ROLLBACK_NAME: nom de la tâche de rollback, par exemple:
sr-1-rollback
. - APIGEE_NAMESPACE: votre espace de noms Apigee.
- APIGEE_ORG: ID de votre organisation Apigee.
- ROTATION_ID : ID de la rotation actuelle que vous annulez (par exemple,
rot-1
). - TIMEOUT_MINUTES : facultatif. Remplace la valeur par défaut (480 mn = 8 heures). <=0 signifie un délai avant expiration infini.
- OLD_SECRET_REF: doit correspondre au nom du secret pour
oldSecretRef:
dans le fichier YAML de rotation que vous avez utilisé dans la procédure de rotation dans une seule région ou de rotation multirégionale. - NEW_SECRET_REF: doit correspondre au nom du secret pour
newSecretRef:
dans le fichier YAML de rotation que vous avez utilisé dans la procédure de rotation dans une seule région ou de rotation dans plusieurs régions.
- ROLLBACK_NAME: nom de la tâche de rollback, par exemple:
-
Appliquez le rollback:
kubectl -n APIGEE_NAMESPACE apply -f ROLLBACK_YAML_FILE
-
Vérifiez l'état de la tâche et attendez qu'elle soit terminée.
kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
- Une fois le ou les rollbacks terminés, vérifiez que le trafic continue de circuler correctement.
- Lorsque le trafic circule correctement, répétez le processus de rollback dans chaque région restante.
-
Une fois le rollback effectué et que vous avez vérifié que le trafic continue de circuler correctement, lancez le processus de nettoyage. Vous n'avez besoin d'effectuer le nettoyage que dans une seule région. Quelle que soit la région choisie,
Apportez les modifications suivantes dans le fichier YAML de rotation:
- Remplacez
metadata.name
par un nom indiquant qu'il s'agit d'une tâche de nettoyage, par exemple:sr-1-cleanup-rollback
. - Remplacez
spec.cassandra.jobType
parCLEANUP_ROLLBACK
.
- Remplacez
-
Appliquez le fichier pour déclencher la tâche de nettoyage:
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE