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 Cassandra-Anmeldedaten, die für Apigee Hybrid-Produktionsdienste verwendet werden, rotieren, ohne Ausfallzeiten zu verursachen. Dazu werden drei Aufgaben automatisiert und ausgelöst:

  • Rotation von Nutzeranmeldedaten
  • Rotation rückgängig machen
  • Bereinigung alter und neuer Anmeldedaten

Cassandra-Secrets in Kubernetes-Secrets rotieren

Es gibt sechs Cassandra-Anmeldedatenpaare (Nutzername + Passwort), die rotiert werden können:

  • Standard*
  • Admin
  • DDL
  • DML
  • JMX
  • Jolokia

Rotation von Anmeldedaten vorbereiten

Zum Ausführen dieser Schritte benötigen Sie die Berechtigung, kubectl apply -f im Cluster auszuführen.

  1. Sichern Sie die Cassandra-Datenbank. Diese Sicherung soll sicherstellen, dass eine Wiederherstellung auf Anmeldedaten vor der Rotation 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 ausstehen.

Rotation von Anmeldedaten für eine einzelne Region

  1. Erstellen Sie in Ihrem Apigee-Namespace ein neues Kubernetes-Secret, 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.
  2. Führen Sie die Vorabprüfung für die 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 m == 8 Stunden). <=0 bedeutet ein unendliches Zeitlimit.
      • PRECHECK : Löst die Ausführung eines Probelaufs aus. Wenn dieser Wert auf „true“ gesetzt ist, werden alle Schritte des Rotationsprozesses durchlaufen, mit Ausnahme der tatsächlichen Anwendung der neuen Anmeldedaten.
      • OLD_SECRET_REF: Der Secret-Name, der derzeit von apigeedatastore verwendet wird. Sie können diesen Wert 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 Vorabprüfungsjob für die 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 der Job abgeschlossen ist.
      kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
      

      Wenn der Job abgeschlossen ist, enthält die Ausgabe Folgendes:

      Status:
        Message:  rotation complete
        State:    complete
      kubectl -n APIGEE_NAMESPACE logs sr-ROTATION_ID-rotate-job-HASH
      
  3. Wenn der Vorabprüfung-Job für die Rotation abgeschlossen ist, führen Sie die Rotation aus:
    1. Nehmen Sie die folgenden Änderungen in der YAML-Datei für die Rotation vor:
      • Ändern Sie metadata.name in einen Namen, der angibt, dass es sich nicht um einen Vorabcheck 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 ordnungsgemäß fließt.
  5. Nachdem Sie Ihren Traffic validiert haben, bereinigen Sie die alten Secrets.
    1. Nehmen Sie die folgenden Änderungen in 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.
      • Achten Sie darauf, dass spec.precheck auf false gesetzt ist.
    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 der Job abgeschlossen ist.
      kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
      

      Wenn der Bereinigungsjob abgeschlossen ist, ist auch die Rotation abgeschlossen.

  6. Aktualisieren Sie die Überschreibungsdatei und legen Sie cassandra.auth.secret auf den neuen Secret-Namen (newSecretRef) fest.
    cassandra:
      auth:
        secret: NEW_SECRET_REF
  7. Erstellen Sie eine Sicherung der Cassandra-Datenbank. Diese Sicherung soll sicherstellen, dass eine Wiederherstellung nach der Rotation der Anmeldedaten möglich ist.
  8. Löschen Sie das alte Secret für Cassandra-Anmeldedaten.

Multiregionale Rotation von Anmeldedaten

  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 dabei der Anleitung unter Nutzernamen und Passwörter in einem Kubernetes-Secret festlegen.

    Die Anmeldedaten müssen in jeder Region gleich sein.

  2. Führen Sie die Vorabprüfung für die 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 m == 8 Stunden). <=0 bedeutet ein unendliches Zeitlimit.
      • PRECHECK : Löst die Ausführung eines Probelaufs aus. Wenn dieser Wert auf „true“ gesetzt ist, werden alle Schritte des Rotationsprozesses durchlaufen, mit Ausnahme der tatsächlichen Anwendung der neuen Anmeldedaten.
      • OLD_SECRET_REF: Der Secret-Name, der derzeit von apigeedatastore verwendet wird. Sie können diesen Wert 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 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 der Job abgeschlossen ist.
      kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
      

      Wenn der Job abgeschlossen ist, enthält die Ausgabe Folgendes:

      Status:
        Message:  rotation complete
        State:    complete
      kubectl -n APIGEE_NAMESPACE logs sr-ROTATION_ID-rotate-job-HASH
      
  3. Wenn der Vorabprüfungsjob für die Rotation abgeschlossen ist, führen Sie die Rotation in derselben Region aus:
    1. Nehmen Sie die folgenden Änderungen in der YAML-Datei für die Rotation vor:
      • Ändern Sie metadata.name in einen Namen, der angibt, dass es sich nicht um einen Vorabcheck 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 ordnungsgemäß fließt.
  5. Wiederholen Sie die Rotationsschritte für die verbleibenden Regionen.
  6. Nachdem Sie Ihren Traffic validiert haben, bereinigen Sie die alten Secrets. Sie müssen die Bereinigung nur in einer Region durchführen. Es spielt keine Rolle, welche Region Sie auswählen.
    1. Nehmen Sie die folgenden Änderungen in 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.
      • Achten Sie darauf, dass spec.precheck auf false gesetzt ist.
    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 der Job abgeschlossen ist.
      kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
      

      Wenn der Bereinigungsjob abgeschlossen ist, ist auch die Rotation abgeschlossen.

  7. Aktualisieren Sie die Überschreibungsdatei und legen Sie cassandra.auth.secret auf den neuen Secret-Namen (newSecretRef) fest.
    cassandra:
      auth:
        secret: NEW_SECRET_REF
  8. Erstellen Sie eine Sicherung der Cassandra-Datenbank. Diese Sicherung soll sicherstellen, dass eine Wiederherstellung nach der Rotation der Anmeldedaten möglich ist.
  9. Löschen Sie das alte Secret für Cassandra-Anmeldedaten.

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, z. B. rot-1.
    • TIMEOUT_MINUTES: Optional. Überschreibt den Standardwert (480 m == 8 Stunden). <=0 bedeutet ein unendliches Zeitlimit.
    • OLD_SECRET_REF: Dieser Wert muss mit dem Secret-Namen für oldSecretRef: in der Rotations-YAML-Datei übereinstimmen, die Sie im Verfahren Rotation in einer einzelnen Region oder Rotation in mehreren Regionen verwendet haben.
    • NEW_SECRET_REF: Dieser Wert muss mit dem Secret-Namen für newSecretRef: in der Rotations-YAML-Datei übereinstimmen, die Sie im Verfahren Rotation in einer einzelnen Region oder Rotation in mehreren Regionen verwendet haben.
  2. Rollback anwenden:
    kubectl -n APIGEE_NAMESPACE apply -f ROLLBACK_YAML_FILE
    
  3. Prüfen Sie den Jobstatus und warten Sie, bis der Job 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-Prozess in jeder verbleibenden Region.
  6. Nachdem Sie das Rollback abgeschlossen und überprüft haben, ob der Traffic weiterhin korrekt fließt, können Sie mit der Bereinigung beginnen. Sie müssen die Bereinigung nur in einer Region durchführen. Es spielt keine Rolle, welche Region Sie auswählen.

    Nehmen Sie die folgenden Änderungen in 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-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
    
  8. Prüfen Sie den Jobstatus und warten Sie, bis der Job abgeschlossen ist.
    kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
    

    Wenn der Bereinigungsjob abgeschlossen ist, ist auch der Rollback abgeschlossen.

  9. Aktualisieren Sie die Überschreibungsdatei und legen Sie cassandra.auth.secret auf den alten Secret-Namen (oldSecretRef) fest.
    cassandra:
      auth:
        secret: OLD_SECRET_REF