Cassandra-Anmeldedaten in Kubernetes-Secrets rotieren

Cassandra-Secrets in Kubernetes-Secrets rotieren

In diesem Verfahren wird beschrieben, wie Sie Cassandra-Anmeldedaten in Kubernetes-Secrets in Ihrem Cluster rotieren. Informationen zum Rotieren von Anmeldedaten in Hashicorp Vault finden Sie unter Cassandra-Anmeldedaten in Hashicorp Vault rotieren.

Mit diesem Verfahren können Sie die für die Produktions-Apigee Hybrid-Dienste verwendeten Cassandra-Anmeldedaten tauschen, ohne Ausfallzeiten zu verursachen. Dazu werden drei Aufgaben automatisiert und ausgelöst:

  • Rotation der Nutzeranmeldedaten
  • Rollback der Rotation
  • Bereinigung alter und neuer Anmeldedaten

Cassandra-Secrets in Kubernetes-Secrets rotieren

Es gibt sechs Paare aus Nutzername und Passwort für Cassandra-Anmeldedaten, die Sie rotieren können:

  • default (nur Passwortrotation)
  • admin_user
  • ddl_user
  • dml_user
  • jmxuser
  • apigee

Rotation von Anmeldedaten vorbereiten

Für die Ausführung dieser Schritte benötigen Sie die Berechtigung zum Ausführen von kubectl apply -f im Cluster.

  1. Sichern Sie die Cassandra-Datenbank. Diese Sicherung soll dafür sorgen, dass eine Wiederherstellung der zuvor rotierten Anmeldedaten möglich ist. Weitere Informationen finden Sie unter Cassandra-Sicherungsübersicht.
  2. Prüfen Sie, ob der Cluster fehlerfrei ist, alle Apigee-Ressourcen ausgeführt werden und keine Statusänderungen ausstehend sind.

Rotation von Anmeldedaten für eine einzelne Region

  1. Erstellen Sie in Ihrem Apigee-Namespace ein neues Kubernetes-Secret mit den Cassandra-Nutzer-Anmeldedaten, die Sie rotieren möchten. Folgen Sie dazu der Anleitung unter Nutzernamen und Passwörter in einem Kubernetes-Secret festlegen.
  2. Führen Sie die Vorprüfung der Rotation durch.
    1. Erstellen Sie mit der folgenden Vorlage eine neue benutzerdefinierte SecretRotation-Ressource:
      # 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
      

      Wobei:

      • ROTATION_NAME: Ein Name für den Rotationsjob, z. B. sr-1-precheck.
      • APIGEE_NAMESPACE: Ihr Apigee-Namespace.
      • APIGEE_ORG: Ihre Apigee-Organisations-ID.
      • ROTATION_ID: Eine benutzerdefinierte Kennung, z. B. rot-1-precheck.
      • TIMEOUT_MINUTES: Optional. Überschreibt den Standardwert (480 Minuten = 8 Stunden). „<=0“ bedeutet ein unbegrenztes Zeitlimit.
      • OLD_SECRET_REF: Der Name des Secrets, der derzeit von der apigeedatastore verwendet wird. Sie können ihn mit dem folgenden Befehl ermitteln:
        kubectl -n APIGEE_NAMESPACE get apigeedatastore default -o jsonpath='{.spec.credentialRef}'
        
      • NEW_SECRET_REF: Der im vorherigen Schritt erstellte Secret-Name.
    2. Lösen Sie den Job für die Vorabprüfung der Rotation aus, indem Sie die YAML-Datei für die Rotation anwenden:
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
    3. Prüfen Sie den Jobstatus und warten Sie, bis er abgeschlossen ist.
      kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
      

      Nach Abschluss des Jobs enthält die Ausgabe Folgendes:

      Status:
        Message:  rotation complete
        State:    complete
      kubectl -n APIGEE_NAMESPACE logs sr-ROTATION_ID-rotate-job-HASH
      
  3. Führen Sie die Rotation aus, sobald der Job zur Vorabprüfung der Rotation abgeschlossen ist:
    1. Nehmen Sie die folgenden Änderungen an der YAML-Datei für die Rotation vor:
      • Ersetzen Sie metadata.name durch einen Namen, der angibt, dass es sich nicht um eine Vorprüfung handelt, z. B. sr-1.
      • Setzen Sie spec.precheck auf false.
      • Ändern Sie spec.rotationId in eine neue Kennung, z. B. rot-1.
    2. Wenden Sie die Datei noch einmal an, um die Drehung auszuführen.
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
  4. Prüfen Sie nach Abschluss des Rotationsjobs, ob der Traffic weiterhin korrekt fließt.
  5. Nachdem Sie den Traffic validiert haben, bereinigen Sie die alten Secrets.
    1. Nehmen Sie die folgenden Änderungen an der YAML-Datei für die Rotation vor:
      • Ändern Sie metadata.name in einen Namen, der angibt, dass es sich um einen Bereinigungsjob handelt, z. B. sr-1-cleanup.
      • Setzen Sie spec.cassandra.jobType auf CLEANUP.
    2. Wenden Sie die Datei noch einmal an, um die Bereinigung durchzuführen.
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
    3. Prüfen Sie den Jobstatus und warten Sie, bis er abgeschlossen ist.
      kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
      

      Sobald der Bereinigungsjob abgeschlossen ist, ist der Rotationsprozess abgeschlossen.

  6. Erstellen Sie eine Sicherung der Cassandra-Datenbank. Diese Sicherung soll dafür sorgen, dass eine Wiederherstellung nach der Rotation der Anmeldedaten möglich ist.
  7. Löschen Sie das alte Cassandra-Anmeldedaten-Secret.

Rotation von Anmeldedaten für mehrere Regionen

  1. Erstellen Sie in jeder Region ein neues Kubernetes-Secret in Ihrem Apigee-Namespace, das die Cassandra-Nutzeranmeldedaten enthält, die Sie rotieren möchten. Folgen Sie dazu der Anleitung unter Nutzernamen und Passwörter in einem Kubernetes-Secret festlegen.

    Die Anmeldedaten müssen in jeder Region identisch sein.

  2. Führen Sie die Vorprüfung der Rotation durch.
    1. Erstellen Sie mit der folgenden Vorlage eine neue benutzerdefinierte SecretRotation-Ressource:
      # 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
      

      Wobei:

      • ROTATION_NAME: Ein Name für den Rotationsjob, z. B. sr-1-precheck.
      • APIGEE_NAMESPACE: Ihr Apigee-Namespace.
      • APIGEE_ORG: Ihre Apigee-Organisations-ID.
      • ROTATION_ID: Eine benutzerdefinierte Kennung, z. B. rot-1-precheck.
      • TIMEOUT_MINUTES: Optional. Überschreibt den Standardwert (480 Minuten = 8 Stunden). „<=0“ bedeutet ein unbegrenztes Zeitlimit.
      • OLD_SECRET_REF: Der Name des Secrets, der derzeit von der apigeedatastore verwendet wird. Sie können ihn mit dem folgenden Befehl ermitteln:
        kubectl -n APIGEE_NAMESPACE get apigeedatastore default -o jsonpath='{.spec.credentialRef}'
        
      • NEW_SECRET_REF: Der im vorherigen Schritt erstellte Secret-Name.
    2. Lösen Sie in der ersten Region den Job für die Vorprüfung der Rotation aus, indem Sie die YAML-Datei für die Rotation anwenden:
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
    3. Prüfen Sie den Jobstatus und warten Sie, bis er abgeschlossen ist.
      kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
      

      Nach Abschluss des Jobs enthält die Ausgabe Folgendes:

      Status:
        Message:  rotation complete
        State:    complete
      kubectl -n APIGEE_NAMESPACE logs sr-ROTATION_ID-rotate-job-HASH
      
  3. Führen Sie nach Abschluss des Jobs zur Vorabprüfung der Rotation die Rotation in derselben Region aus:
    1. Nehmen Sie die folgenden Änderungen an der YAML-Datei für die Rotation vor:
      • Ersetzen Sie metadata.name durch einen Namen, der angibt, dass es sich nicht um eine Vorprüfung handelt, z. B. sr-1.
      • Setzen Sie spec.precheck auf false.
      • Ändern Sie spec.rotationId in eine neue Kennung, z. B. rot-1.
    2. Wenden Sie die Datei noch einmal an, um die Drehung auszuführen.
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
  4. Prüfen Sie nach Abschluss des Rotationsjobs, ob der Traffic weiterhin korrekt fließt.
  5. Wiederholen Sie die Schritte für die Drehung für die verbleibenden Regionen.
  6. Nachdem Sie den Traffic validiert haben, bereinigen Sie die alten Secrets. Sie müssen die Bereinigung nur in einer Region ausführen. Es spielt keine Rolle, welche Region Sie auswählen.
    1. Nehmen Sie die folgenden Änderungen an der YAML-Datei für die Rotation vor:
      • Ändern Sie metadata.name in einen Namen, der angibt, dass es sich um einen Bereinigungsjob handelt, z. B. sr-1-cleanup.
      • Setzen Sie spec.cassandra.jobType auf CLEANUP.
    2. Wenden Sie die Datei noch einmal an, um die Bereinigung durchzuführen.
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
    3. Prüfen Sie den Jobstatus und warten Sie, bis er abgeschlossen ist.
      kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
      

      Sobald der Bereinigungsjob abgeschlossen ist, ist der Rotationsprozess abgeschlossen.

  7. Erstellen Sie eine Sicherung der Cassandra-Datenbank. Diese Sicherung soll dafür sorgen, dass eine Wiederherstellung nach der Rotation der Anmeldedaten möglich ist.
  8. Löschen Sie das alte Cassandra-Anmeldedaten-Secret.

Rotation rückgängig machen

Führen Sie die folgenden Schritte in jeder Region aus.

  1. Erstellen Sie mit der folgenden Vorlage eine neue benutzerdefinierte SecretRotation-Ressource:
    # 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
    

    Wobei:

    • ROLLBACK_NAME: Ein Name für den Rollback-Job, z. B. sr-1-rollback.
    • APIGEE_NAMESPACE: Ihr Apigee-Namespace.
    • APIGEE_ORG: Ihre Apigee-Organisations-ID.
    • ROTATION_ID: Die ID der aktuellen Rotation, die Sie rückgängig machen möchten, z. B. rot-1.
    • TIMEOUT_MINUTES: Optional. Überschreibt den Standardwert (480 Minuten = 8 Stunden). „<=0“ bedeutet ein unbegrenztes Zeitlimit.
    • OLD_SECRET_REF: Dieser muss mit dem Secret-Namen für oldSecretRef: in der Rotations-YAML-Datei übereinstimmen, die Sie bei der Rotation für eine einzelne Region oder der Rotation für mehrere Regionen verwendet haben.
    • NEW_SECRET_REF: Dieser muss mit dem Secret-Namen für newSecretRef: in der Rotations-YAML-Datei übereinstimmen, die Sie beim Verfahren zur Rotation für eine einzelne Region oder Rotation für mehrere Regionen verwendet haben.
  2. Führen Sie das Rollback aus:
    kubectl -n APIGEE_NAMESPACE apply -f ROLLBACK_YAML_FILE
    
  3. Prüfen Sie den Jobstatus und warten Sie, bis er abgeschlossen ist.
    kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
    
  4. Prüfen Sie nach Abschluss der Rollbacks, ob der Traffic weiterhin korrekt fließt.
  5. Wenn der Traffic richtig fließt, wiederholen Sie den Rollback-Vorgang in allen verbleibenden Regionen.
  6. Sobald Sie das Rollback abgeschlossen und bestätigt haben, dass der Traffic weiterhin korrekt fließt, beginnen Sie mit der Bereinigung. Sie müssen die Bereinigung nur in einer Region ausführen. Es spielt keine Rolle, welche Region Sie auswählen.

    Nehmen Sie die folgenden Änderungen an der YAML-Datei für die Rotation vor:

    • Ändern Sie metadata.name in einen Namen, der darauf hinweist, dass es sich um einen Bereinigungsjob handelt, z. B. sr-1-cleanup-rollback.
    • Ändern Sie spec.cassandra.jobType zu CLEANUP_ROLLBACK.
  7. Wenden Sie die Datei an, um den Bereinigungsjob auszulösen:
    kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE