Faire tourner les identifiants Cassandra dans des secrets Kubernetes

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.

  1. 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.
  2. 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

  1. 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.
  2. Effectuez la vérification préalable de la rotation.
    1. 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.
    2. 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
      
    3. 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
      
  3. Une fois la tâche de prévérification de la rotation terminée, effectuez la rotation :
    1. 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 sur false.
      • Remplacez spec.rotationId par un nouvel identifiant, par exemple rot-1.
    2. Appliquez à nouveau le fichier pour effectuer la rotation.
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
  4. Une fois la tâche de rotation terminée, vérifiez que le trafic continue de s'écouler correctement.
  5. Après avoir validé votre trafic, nettoyez les anciens secrets.
    1. 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.
      • Définissez spec.cassandra.jobType sur CLEANUP.
    2. Appliquez à nouveau le fichier pour effectuer le nettoyage.
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
    3. 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é.

  6. 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.
  7. Supprimez l'ancien secret d'identifiants Cassandra.

Rotation des identifiants multirégionale

  1. 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.

  2. Effectuez la vérification préalable de la rotation.
    1. 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.
    2. 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
      
    3. 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
      
  3. Une fois la tâche de prévérification de la rotation terminée, effectuez la rotation dans la même région :
    1. 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 sur false.
      • Remplacez spec.rotationId par un nouvel identifiant, par exemple rot-1.
    2. Appliquez à nouveau le fichier pour effectuer la rotation.
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
  4. Une fois la tâche de rotation terminée, vérifiez que le trafic continue de s'écouler correctement.
  5. Répétez les étapes de rotation pour les autres régions.
  6. 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,
    1. 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.
      • Définissez spec.cassandra.jobType sur CLEANUP.
    2. Appliquez à nouveau le fichier pour effectuer le nettoyage.
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
    3. 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é.

  7. 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.
  8. Supprimez l'ancien secret d'identifiants Cassandra.

Effectuer un rollback d'une rotation

Suivez les étapes suivantes dans chaque région.

  1. 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.
  2. Appliquez le rollback:
    kubectl -n APIGEE_NAMESPACE apply -f ROLLBACK_YAML_FILE
    
  3. Vérifiez l'état de la tâche et attendez qu'elle soit terminée.
    kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
    
  4. Une fois le ou les rollbacks terminés, vérifiez que le trafic continue de circuler correctement.
  5. Lorsque le trafic circule correctement, répétez le processus de rollback dans chaque région restante.
  6. 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 par CLEANUP_ROLLBACK.
  7. Appliquez le fichier pour déclencher la tâche de nettoyage:
    kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE