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

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

  1. 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.
  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 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.
    2. 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
      
    3. 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
      
  3. Une fois le job de prévérification de la rotation terminé, effectuez la rotation :
    1. 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 exemple sr-1.
      • Définissez spec.precheck sur false.
      • Remplacez spec.rotationId par un nouvel identifiant, par exemple rot-1.
    2. Appliquez de nouveau le fichier pour effectuer la rotation.
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
  4. Une fois le job de rotation terminé, vérifiez que le trafic continue de circuler correctement.
  5. Après avoir validé votre trafic, nettoyez les anciens secrets.
    1. 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 exemple sr-1-cleanup.
      • Définissez spec.cassandra.jobType sur CLEANUP.
      • Assurez-vous que spec.precheck est défini sur false.
    2. Appliquez de nouveau le fichier pour effectuer le nettoyage.
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
    3. 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é.

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

Rotation des identifiants multirégionaux

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

  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 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.
    2. 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
      
    3. 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
      
  3. Une fois le job de prévérification de la rotation terminé, effectuez la rotation dans la même région :
    1. 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 exemple sr-1.
      • Définissez spec.precheck sur false.
      • Remplacez spec.rotationId par un nouvel identifiant, par exemple rot-1.
    2. Appliquez de nouveau le fichier pour effectuer la rotation.
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
  4. Une fois le job de rotation terminé, vérifiez que le trafic continue de circuler correctement.
  5. Répétez les étapes de rotation pour les régions restantes.
  6. 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.
    1. 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 exemple sr-1-cleanup.
      • Définissez spec.cassandra.jobType sur CLEANUP.
      • Assurez-vous que spec.precheck est défini sur false.
    2. Appliquez de nouveau le fichier pour effectuer le nettoyage.
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
    3. 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é.

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

Effectuer un rollback d'une rotation

Effectuez 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 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.
  2. Appliquez le rollback :
    kubectl -n APIGEE_NAMESPACE apply -f ROLLBACK_YAML_FILE
    
  3. Vérifiez l'état du job et attendez qu'il soit terminé.
    kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
    
  4. Une fois la ou les restaurations terminées, 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 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 exemple sr-1-cleanup-rollback.
    • Remplacez spec.cassandra.jobType par CLEANUP_ROLLBACK.
  7. Appliquez le fichier pour déclencher le job de nettoyage :
    kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
    
  8. 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é.

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