Panoramica
Questa funzionalità consente agli amministratori della piattaforma di:
- Ruota le credenziali di Cassandra in Hashicorp Vault.
- Ripristina le credenziali Cassandra precedenti in Vault in caso di problemi durante la rotazione delle password.
- Ruota la password di Cassandra per una regione alla volta, in modo da garantire un impatto minimo sulla disponibilità del servizio e mantenere il controllo sul processo di rotazione.
- Monitora l'inizio, l'avanzamento e il completamento della rotazione per una singola regione.
Questa funzionalità è disponibile in Apigee Hybrid 1.13.1 e versioni successive.
Prima di iniziare
Prima di configurare la rotazione delle credenziali:
- Esegui il backup del database Cassandra. Questo backup serve a garantire il recupero delle credenziali pre-ruotate.
- Assicurati che il cluster sia in uno stato integro (ovvero che tutte le risorse Apigee siano in esecuzione e che non siano in attesa modifiche dello stato).
Configurazione di una singola regione
-
Crea una nuova risorsa Kubernetes
SecretProviderClass
nello spazio dei nomi Apigee per le nuove credenziali Cassandra. Per un modello da utilizzare, consulta Archiviazione dei secret Cassandra in Hashicorp Vault. In questo modo, un ruolo Vault può accedere ai secret all'interno degli spazi dei nomi Kubernetes. -
Crea una nuova risorsa personalizzata
SecretRotation
utilizzando il seguente modello:# rotation.yaml apiVersion: apigee.cloud.google.com/v1alpha1 kind: SecretRotation metadata: name: ROTATION_PROCESS_NAME namespace: APIGEE_NAMESPACE spec: organizationId: ORG_NAME rotationId: ROTATION_ID timeoutMinutes: 480 # optional. overrides the default (480m == 8hr). # less than or equal to 0 means infinite timeout. precheck: true cassandra: oldSecretProviderClass: OLD_SPC_NAME newSecretProviderClass: NEW_SPC_NAME jobType: ROTATE
- ROTATION_PROCESS_NAME: un nome univoco per il job di rotazione. Dovrai impostare
metadata.name
su un valore univoco per il job di precontrollo della rotazione e di nuovo per il job di rotazione. Ad esempiosr-1-precheck
seguito dasr-1
. - ROTATION_ID: imposta
spec.rotationId
su un identificatore personalizzato, ad esempiorotation-1-precheck
. - NEW_SPC_NAME: imposta
spec.cassandra.newSecretProviderClass
sul nome della classe del nuovo provider di secret che hai creato nel passaggio precedente. - OLD_SPC_NAME: imposta
spec.cassandra.oldSecretProviderClass
sul nome dell'SPC attualmente utilizzato dalApigeeDatastore
.
- ROTATION_PROCESS_NAME: un nome univoco per il job di rotazione. Dovrai impostare
-
Attiva il job di precontrollo della rotazione applicando il file
rotation.yaml
.kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml
-
Controlla lo stato del job per verificare quando il job di precontrollo è stato completato.
kubectl -n APIGEE_NAMESPACE get job sr-(rotationId)-(rotate|rollback|cleanup)-job
-
Al termine del job di precontrollo della rotazione, modifica il valore di
metadata.name
e impostaspec.precheck
sufalse
. Applica di nuovo il file per eseguire la rotazione.kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml
-
Al termine del job di rotazione e dopo aver verificato che il traffico continua a scorrere correttamente, ripulisci la procedura con i seguenti due passaggi:
-
Aggiorna il valore di
metadata.name
e impostaspec.cassandra.jobType
suCLEANUP
. -
Attiva il job di pulizia applicando il file.
kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml
Al termine del job di pulizia, il processo di rotazione è completato.
-
Aggiorna il valore di
- Esegui il backup del database Cassandra. Questo backup serve a garantire il recupero delle credenziali dopo la rotazione.
- Elimina le vecchie credenziali, il ruolo e i criteri di Cassandra da Vault.
Configurazione multiregione
Le procedure di configurazione multiregione sono suddivise in due sezioni: configurazione per la prima regione e configurazione per le regioni rimanenti.
- Completa i seguenti passaggi nella prima regione prima di iniziare le regioni successive.
-
Crea una nuova risorsa Kubernetes
SecretProviderClass
nello spazio dei nomiAPIGEE_NAMESPACE
per le nuove credenziali Cassandra. Per un modello da utilizzare, consulta Archiviazione dei secret Cassandra in Hashicorp Vault. In questo modo, un ruolo Vault può accedere ai secret all'interno degli spazi dei nomi Kubernetes. -
Crea una nuova risorsa personalizzata
SecretRotation
utilizzando il seguente modello:# rotation.yaml apiVersion: apigee.cloud.google.com/v1alpha1 kind: SecretRotation metadata: name: ROTATION_PROCESS_NAME namespace: APIGEE_NAMESPACE spec: organizationId: ORG_NAME rotationId: ROTATION_ID timeoutMinutes: -1 # this value is required and should not be changed. precheck: true cassandra: oldSecretProviderClass: OLD_SPC_NAME newSecretProviderClass: NEW_SPC_NAME jobType: ROTATE
- ROTATION_PROCESS_NAME: un nome univoco per il job di rotazione. Dovrai impostare
metadata.name
su un valore univoco per il job di precontrollo della rotazione e di nuovo per il job di rotazione. Ad esempiosr-1-precheck
seguito dasr-1
. - ROTATION_ID: imposta
spec.rotationId
su un identificatore personalizzato, ad esempiorotation-1-precheck
. - NEW_SPC_NAME: imposta
spec.cassandra.newSecretProviderClass
sul nome della classe del nuovo provider di secret che hai creato nel passaggio precedente. - OLD_SPC_NAME: imposta
spec.cassandra.oldSecretProviderClass
sul nome dell'SPC attualmente utilizzato dalApigeeDatastore
.
- ROTATION_PROCESS_NAME: un nome univoco per il job di rotazione. Dovrai impostare
-
Attiva il job di precontrollo della rotazione applicando il file
rotation.yaml
.kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml
-
Controlla lo stato del job per verificare quando il job di precontrollo è stato completato.
kubectl -n APIGEE_NAMESPACE get job sr-(rotationId)-(rotate|rollback|cleanup)-job
-
Al termine del job di precontrollo della rotazione:
- Modifica il valore di
metadata.name
, ad esempio dasr-1-precheck
asr-1
. - Imposta
spec.precheck
sufalse
per disattivare il precontrollo ed eseguire la rotazione. - Imposta
spec.rotationId
su un nuovo identificatore, ad esempiorotation-1
.
- Modifica il valore di
-
Applica di nuovo il file per eseguire la rotazione.
kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml
-
Controlla lo stato di
SecretRotation
e attendi che siacomplete
.kubectl -n APIGEE_NAMESPACE get sr SR_NAME
-
Crea una nuova risorsa Kubernetes
-
In ogni regione successiva, completa i seguenti passaggi:
- Crea una nuova risorsa Kubernetes
SecretProviderClass
nello spazio dei nomi Apigee per le nuove credenziali Cassandra. Per un modello da utilizzare, consulta Archiviazione dei secret Cassandra in Hashicorp Vault. Deve essere la stessa definizione del passaggio 1a. - Aggiorna
overrides.yaml
e impostacassandra.auth.secretProviderClass
in modo che corrisponda al valore dispec.cassandra.newSecretProviderClass
nel filerotation.yaml
.cassandra: auth: secretProviderClass: NEW_SPC_NAME
- Applica il grafico dell'operatore:
helm upgrade operator apigee-operator/ \ --namespace APIGEE_NAMESPACE \ --atomic \ -f OVERRIDES_FILE
-
Verrà creato un nuovo
ReplicaSet
. Verifica che i nuovi pod controller-manager utilizzino il nuovo SPC:export POD=NEW_CONTROLLER_MANAGER_POD_NAME
kubectl -n APIGEE_NAMESPACE get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'
Il risultato deve corrispondere al valore impostato per
spec.cassandra.newSecretProviderClass
inrotation.yaml
, ad esempio:kubectl -n apigee get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'
my-new-spc - Applica il grafico del data store:
helm upgrade datastore apigee-datastore/ \ --namespace APIGEE_NAMESPACE \ --atomic \ -f OVERRIDES_FILE
- Il datastore entrerà in uno stato di rilascio. Attendi il completamento del rilascio del data store e che sia nello stato di esecuzione.
kubectl -n APIGEE_NAMESPACE get apigeedatastore DATASTORE_NAME
DATASTORE_NAME è
default
nella maggior parte delle installazioni. - Verifica che i nuovi pod del datastore utilizzino il nuovo SPC:
export POD=NEW_DATASTORE_POD_NAME
kubectl -n APIGEE_NAMESPACE get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'
Il risultato deve corrispondere al valore impostato per
spec.cassandra.newSecretProviderClass
inrotation.yaml
, ad esempio:kubectl -n apigee get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'
my-new-spc - Attendi il completamento del rilascio dell'organizzazione e degli ambienti e il ritorno allo stato di esecuzione.
kubectl -n APIGEE_NAMESPACE get apigeeorg ORG_NAME
kubectl -n APIGEE_NAMESPACE get apigeeenv ENV_NAME
- Verifica che i nuovi pod MART, di runtime e di sincronizzazione utilizzino il nuovo SPC:
export POD=NEW_MART_POD_NAME
kubectl -n APIGEE_NAMESPACE get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'
export POD=NEW_RUNTIME_POD_NAME
kubectl -n APIGEE_NAMESPACE get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'
export POD=NEW_SYNCHRONIZER_POD_NAME
kubectl -n APIGEE_NAMESPACE get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'
Il risultato deve corrispondere al valore impostato per
spec.cassandra.newSecretProviderClass
inrotation.yaml
, ad esempio:kubectl -n apigee get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'
my-new-spc
- Crea una nuova risorsa Kubernetes
-
Dopo aver completato i passaggi in ogni regione e aver verificato che il traffico continua a scorrere correttamente, ripulisci la procedura nella prima regione con i due passaggi che seguono:
-
Nella prima regione, aggiorna il valore di
metadata.name
e impostaspec.cassandra.jobType
suCLEANUP
. -
Attiva il job di pulizia applicando il file.
kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml
- Controlla lo stato del job e osserva i relativi log per verificare quando il job di pulizia è stato completato.
Al termine del job di pulizia, il processo di rotazione è completato.
-
Nella prima regione, aggiorna il valore di
- Esegui il backup del database Cassandra. Questo backup serve a garantire il recupero delle credenziali dopo la rotazione.
- Elimina le vecchie credenziali, il ruolo e i criteri di Cassandra da Vault.