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.
- 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.
- 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
- 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.
- Führen Sie die Vorabprüfung für die Rotation durch.
-
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.
- ROTATION_NAME: Ein Name für den Rotationsjob, z. B.
-
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
-
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
-
Erstellen Sie mit der folgenden Vorlage eine neue benutzerdefinierte SecretRotation-Ressource:
-
Wenn der Vorabprüfung-Job für die Rotation abgeschlossen ist, führen Sie die Rotation aus:
- 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
auffalse
. - Ändern Sie
spec.rotationId
in eine neue Kennung, z. B.rot-1
.
- Ändern Sie
- Wenden Sie die Datei noch einmal an, um die Drehung auszuführen.
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
- Nehmen Sie die folgenden Änderungen in der YAML-Datei für die Rotation vor:
- Prüfen Sie nach Abschluss des Rotationsjobs, ob der Traffic weiterhin ordnungsgemäß fließt.
- Nachdem Sie Ihren Traffic validiert haben, bereinigen Sie die alten Secrets.
-
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
aufCLEANUP
. - Achten Sie darauf, dass
spec.precheck
auffalse
gesetzt ist.
- Ändern Sie
- Wenden Sie die Datei noch einmal an, um die Bereinigung durchzuführen.
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
-
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.
-
Nehmen Sie die folgenden Änderungen in der YAML-Datei für die Rotation vor:
-
Aktualisieren Sie die Überschreibungsdatei und legen Sie
cassandra.auth.secret
auf den neuen Secret-Namen (newSecretRef
) fest.cassandra: auth: secret: NEW_SECRET_REF
- Erstellen Sie eine Sicherung der Cassandra-Datenbank. Diese Sicherung soll sicherstellen, dass eine Wiederherstellung nach der Rotation der Anmeldedaten möglich ist.
- Löschen Sie das alte Secret für Cassandra-Anmeldedaten.
Multiregionale Rotation von Anmeldedaten
-
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.
- Führen Sie die Vorabprüfung für die Rotation durch.
-
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.
- ROTATION_NAME: Ein Name für den Rotationsjob, z. B.
-
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
-
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
-
Erstellen Sie mit der folgenden Vorlage eine neue benutzerdefinierte SecretRotation-Ressource:
-
Wenn der Vorabprüfungsjob für die Rotation abgeschlossen ist, führen Sie die Rotation in derselben Region aus:
- 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
auffalse
. - Ändern Sie
spec.rotationId
in eine neue Kennung, z. B.rot-1
.
- Ändern Sie
- Wenden Sie die Datei noch einmal an, um die Drehung auszuführen.
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
- Nehmen Sie die folgenden Änderungen in der YAML-Datei für die Rotation vor:
- Prüfen Sie nach Abschluss des Rotationsjobs, ob der Traffic weiterhin ordnungsgemäß fließt.
- Wiederholen Sie die Rotationsschritte für die verbleibenden Regionen.
- 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.
-
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
aufCLEANUP
. - Achten Sie darauf, dass
spec.precheck
auffalse
gesetzt ist.
- Ändern Sie
- Wenden Sie die Datei noch einmal an, um die Bereinigung durchzuführen.
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
-
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.
-
Nehmen Sie die folgenden Änderungen in der YAML-Datei für die Rotation vor:
-
Aktualisieren Sie die Überschreibungsdatei und legen Sie
cassandra.auth.secret
auf den neuen Secret-Namen (newSecretRef
) fest.cassandra: auth: secret: NEW_SECRET_REF
- Erstellen Sie eine Sicherung der Cassandra-Datenbank. Diese Sicherung soll sicherstellen, dass eine Wiederherstellung nach der Rotation der Anmeldedaten möglich ist.
- 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.
-
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.
- ROLLBACK_NAME: Ein Name für den Rollback-Job, z. B.
-
Rollback anwenden:
kubectl -n APIGEE_NAMESPACE apply -f ROLLBACK_YAML_FILE
-
Prüfen Sie den Jobstatus und warten Sie, bis der Job abgeschlossen ist.
kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
- Prüfen Sie nach Abschluss der Rollbacks, ob der Traffic weiterhin korrekt fließt.
- Wenn der Traffic richtig fließt, wiederholen Sie den Rollback-Prozess in jeder verbleibenden Region.
-
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
zuCLEANUP_ROLLBACK
.
- Ändern Sie
-
Wenden Sie die Datei an, um den Bereinigungsjob auszulösen:
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
-
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.
-
Aktualisieren Sie die Überschreibungsdatei und legen Sie
cassandra.auth.secret
auf den alten Secret-Namen (oldSecretRef
) fest.cassandra: auth: secret: OLD_SECRET_REF