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 effectuer une rotation des identifiants dans Hashicorp Vault, consultez Rotation des identifiants Cassandra dans Hashicorp Vault.
Cette procédure vous permettra d'effectuer une rotation des identifiants Cassandra utilisés pour les services Apigee hybrid de production sans provoquer de temps d'arrêt. Pour ce faire, elle automatise et déclenche trois tâches :
- Rotation des identifiants utilisateur
- Restauration avant la rotation
- Nettoyage des anciens et nouveaux identifiants
Effectuer une rotation des secrets Cassandra dans les secrets Kubernetes
Six paires d'identifiants Cassandra (nom d'utilisateur et mot de passe) peuvent être permutées :
- Par défaut*
- Administrateur
- LDD
- LMD
- JMX
- Jolokia
Préparer la rotation des identifiants
Pour effectuer ces étapes, vous devez être autorisé à 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 qui ont été soumis à une pré-rotation. Consultez la présentation de la sauvegarde Cassandra.
- Assurez-vous que le cluster est opérationnel, que toutes les ressources Apigee sont en cours d'exécution 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, qui contient les identifiants utilisateur Cassandra que vous souhaitez faire pivoter, en suivant 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 du job 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 mètres = 8 heures). <=0 signifie un délai d'expiration infini.
- PRECHECK : déclenche l'exécution du test à blanc. Si la valeur est définie sur "true", le processus de rotation passe par toutes les étapes, sauf l'application des nouveaux identifiants.
- OLD_SECRET_REF : nom du secret actuellement utilisé par
apigeedatastore
. Vous pouvez le trouver à l'aide de 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 du job de rotation, par exemple
-
Déclenchez le job 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 du job et attendez qu'il soit terminé.
kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
Une fois le job terminé, le résultat 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 le job de prévérification de la rotation terminé, effectuez la rotation :
- Apportez les modifications suivantes au fichier YAML de rotation :
- Remplacez
metadata.name
par un nom indiquant qu'il ne s'agit pas d'un contrôle préalable, par exemplesr-1
. - Définissez
spec.precheck
surfalse
. - Remplacez
spec.rotationId
par un nouvel identifiant, par exemplerot-1
.
- Remplacez
- Appliquez de nouveau le fichier pour effectuer la rotation.
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
- Apportez les modifications suivantes au fichier YAML de rotation :
- Une fois le job de rotation terminé, vérifiez que le trafic continue de circuler correctement.
- Après avoir validé votre trafic, nettoyez les anciens secrets.
-
Apportez les modifications suivantes au fichier YAML de rotation :
- Remplacez
metadata.name
par un nom indiquant qu'il s'agit d'un job de nettoyage, par exemplesr-1-cleanup
. - Définissez
spec.cassandra.jobType
surCLEANUP
. - Assurez-vous que
spec.precheck
est défini surfalse
.
- Remplacez
- Appliquez de nouveau le fichier pour effectuer le nettoyage.
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
-
Vérifiez l'état du job et attendez qu'il soit terminé.
kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
Une fois le job de nettoyage terminé, le processus de rotation est terminé.
-
Apportez les modifications suivantes au fichier YAML de rotation :
-
Mettez à jour votre fichier de remplacement et définissez
cassandra.auth.secret
sur le nouveau nom du secret (newSecretRef
).cassandra: auth: secret: NEW_SECRET_REF
- Sauvegardez la base de données Cassandra. Cette sauvegarde permet de s'assurer que la récupération est possible avec des identifiants qui ont été soumis à une post-rotation.
- Supprimez l'ancien secret d'identifiant Cassandra.
Rotation des identifiants multirégionaux
-
Dans chaque région, créez un secret Kubernetes dans votre espace de noms Apigee, qui contient les identifiants utilisateur Cassandra que vous souhaitez faire pivoter, en suivant Définir les noms d'utilisateur et les mots de passe dans un secret Kubernetes.
Les identifiants doivent être identiques 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 du job 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 mètres = 8 heures). <=0 signifie un délai d'expiration infini.
- PRECHECK : déclenche l'exécution du test à blanc. Si la valeur est définie sur "true", le processus de rotation passe par toutes les étapes, sauf l'application des nouveaux identifiants.
- OLD_SECRET_REF : nom du secret actuellement utilisé par
apigeedatastore
. Vous pouvez le trouver à l'aide de 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 du job de rotation, par exemple
-
Dans la première région, déclenchez le job 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 du job et attendez qu'il soit terminé.
kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
Une fois le job terminé, le résultat 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 le job de prévérification de la rotation terminé, effectuez la rotation dans la même région :
- Apportez les modifications suivantes au fichier YAML de rotation :
- Remplacez
metadata.name
par un nom indiquant qu'il ne s'agit pas d'un contrôle préalable, par exemplesr-1
. - Définissez
spec.precheck
surfalse
. - Remplacez
spec.rotationId
par un nouvel identifiant, par exemplerot-1
.
- Remplacez
- Appliquez de nouveau le fichier pour effectuer la rotation.
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
- Apportez les modifications suivantes au fichier YAML de rotation :
- Une fois le job de rotation terminé, vérifiez que le trafic continue de circuler correctement.
- Répétez les étapes de rotation pour les régions restantes.
- Après avoir validé votre trafic, nettoyez les anciens secrets. Il vous suffit d'effectuer le nettoyage dans une seule région. La région que vous choisissez n'a pas d'importance.
-
Apportez les modifications suivantes au fichier YAML de rotation :
- Remplacez
metadata.name
par un nom indiquant qu'il s'agit d'un job de nettoyage, par exemplesr-1-cleanup
. - Définissez
spec.cassandra.jobType
surCLEANUP
. - Assurez-vous que
spec.precheck
est défini surfalse
.
- Remplacez
- Appliquez de nouveau le fichier pour effectuer le nettoyage.
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
-
Vérifiez l'état du job et attendez qu'il soit terminé.
kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
Une fois le job de nettoyage terminé, le processus de rotation est terminé.
-
Apportez les modifications suivantes au fichier YAML de rotation :
-
Mettez à jour votre fichier de remplacement et définissez
cassandra.auth.secret
sur le nouveau nom du secret (newSecretRef
).cassandra: auth: secret: NEW_SECRET_REF
- Sauvegardez la base de données Cassandra. Cette sauvegarde permet de s'assurer que la récupération est possible avec des identifiants qui ont été soumis à une post-rotation.
- Supprimez l'ancien secret d'identifiant Cassandra.
Effectuer un rollback d'une rotation
Effectuez 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 du job de restauration, 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 restaurez, par exemple
rot-1
. - TIMEOUT_MINUTES : facultatif. Remplace la valeur par défaut (480 mètres = 8 heures). <=0 signifie un délai d'expiration infini.
- OLD_SECRET_REF : doit correspondre au nom secret de
oldSecretRef:
dans le fichier YAML de rotation que vous avez utilisé dans la procédure Rotation dans une seule région ou Rotation multirégionale. - NEW_SECRET_REF : cette valeur doit correspondre au nom secret de
newSecretRef:
dans le fichier YAML de rotation que vous avez utilisé dans la procédure de rotation à une seule région ou de rotation multirégionale.
- ROLLBACK_NAME : nom du job de restauration, par exemple
-
Appliquez le rollback :
kubectl -n APIGEE_NAMESPACE apply -f ROLLBACK_YAML_FILE
-
Vérifiez l'état du job et attendez qu'il soit terminé.
kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
- Une fois la ou les restaurations terminées, 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 la restauration effectuée et après avoir vérifié que le trafic continue de circuler correctement, lancez le processus de nettoyage. Il vous suffit d'effectuer le nettoyage dans une seule région. La région que vous choisissez n'a pas d'importance.
Apportez les modifications suivantes au fichier YAML de rotation :
- Remplacez
metadata.name
par un nom indiquant qu'il s'agit d'un job de nettoyage, par exemplesr-1-cleanup-rollback
. - Remplacez
spec.cassandra.jobType
parCLEANUP_ROLLBACK
.
- Remplacez
-
Appliquez le fichier pour déclencher le job de nettoyage :
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
-
Vérifiez l'état du job et attendez qu'il soit terminé.
kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
Une fois le job de nettoyage terminé, le processus de rollback est terminé.
-
Mettez à jour votre fichier de remplacement et définissez
cassandra.auth.secret
sur l'ancien nom du secret (oldSecretRef
).cassandra: auth: secret: OLD_SECRET_REF