L'appliance con air gap di Google Distributed Cloud (GDC) adotta ONTAP Select (OTS) come fornitore di storage software-defined. OTS ha un proprio sistema di autenticazione in cui ogni identità (servizio principale o client) ha un nome e una chiave associati.
Questo documento descrive i passaggi per la rotazione delle chiavi e dei certificati di autenticazione che devono essere eseguiti per:
- rotazione della chiave pianificata regolarmente per garantire che il dispositivo sia conforme e sicuro.
- esposizione della chiave. Devi ruotare la chiave esposta il prima possibile.
Prima di iniziare
Assicurati di disporre dei seguenti accessi:
- Accesso alla Console di amministrazione al cluster ONTAP
- Kubeconfig per il server API di gestione
Ruota le credenziali IPsec (PSK)
ONTAP supporta l'autenticazione basata su certificati per IPsec a partire dalla versione 9.10.1. Questa versione di GDC è la 9.14.1 e utilizza chiavi precondivise.
Per Appliance, IPsec viene implementato per due tipi di traffico OTS:
- Traffico esterno tra host bare metal e SVM.
- Traffico interno tra i nodi worker.
Li esamineremo separatamente.
Prerequisiti
- Accesso alla Console di amministrazione al cluster ONTAP
- Una nuova chiave precondivisa
- Kubeconfig per il server API di gestione
- Accesso agli host per aggiornare la configurazione di StrongSwan
Impatto
Durante la rotazione delle policy IPsec, gli host perderanno la connettività IP al sistema di archiviazione. Le connessioni si bloccheranno o potrebbero non riuscire a seconda del comportamento dell'applicazione. Se possibile, puoi mettere in pausa i carichi di lavoro degli utenti durante la rotazione, ma non è obbligatorio. Le connessioni dovrebbero essere ripristinate poco dopo il reset dei secret.
Rotazione delle chiavi per il traffico esterno OTS
Per convalidare la rotazione, utilizza il seguente comando e confronta l'output:
export KUBECONFIG= #path to root-admin kubeconfig
kubectl get StorageEncryptionConnections -n gpc-system
Output:
NAME INVENTORYMACHINE STORAGEVIRTUALMACHINE STORAGECIDR PRESHAREDKEY READY AGE
bm-1ba9796c bm-1ba9796c root-admin 10.4.4.0/24 bm-1ba9796c-pre-shared-key True 6h16m
bm-96a5f32a bm-96a5f32a root-admin 10.4.4.0/24 bm-96a5f32a-pre-shared-key True 16h
bm-e07f4a4f bm-e07f4a4f root-admin 10.4.4.0/24 bm-e07f4a4f-pre-shared-key True 21h
Verifica che il campo READY
sia true per l'host specifico per cui
hai eseguito lo script in precedenza.
Ruota manualmente la PSK se trovi errori durante la convalida.
Esegui questo comando:
export KUBECONFIG= #path to root-admin kubeconfig
mgmt_ip="$(kubectl get storagecluster -A -o jsonpath='{.items[0].spec.network.clusterManagement.ip}')" username="$(kubectl get secret storage-root-level1 -n gpc-system -o jsonpath='{.data.username}' | base64 -d)" password="$(kubectl get secret storage-root-level1 -n gpc-system -o jsonpath='{.data.password}' | base64 -d)"
Visualizza la password e copiala negli appunti:
echo $password
Accedi alla console ONTAP:
ssh $username@$mgmt_ip
Quando ti viene richiesta la password, incolla quella copiata dal passaggio precedente.
Utilizza il seguente script per la rotazione delle credenziali:
export KUBECONFIG= #path to root-admin kubeconfig
kubectl get StorageEncryptionConnections -n gpc-system
Output:
NAME INVENTORYMACHINE STORAGEVIRTUALMACHINE STORAGECIDR PRESHAREDKEY READY AGE bm-1ba9796c bm-1ba9796c root-admin 10.4.4.0/24 bm-1ba9796c-pre-shared-key True 6h16m bm-96a5f32a bm-96a5f32a root-admin 10.4.4.0/24 bm-96a5f32a-pre-shared-key True 16h bm-e07f4a4f bm-e07f4a4f root-admin 10.4.4.0/24 bm-e07f4a4f-pre-shared-key True 21h
Per ogni host che vuoi ruotare, puoi eseguire le seguenti operazioni:
export bm_host= //name of bm-host from above export secret="${bm_host}-pre-shared-key" export job_name="os-policy-config-host-ipsec-${bm_host}" export ns="gpc-system" export svm="$(kubectl get storageencryptionconnections "${bm_host}" -n "${ns}" -o jsonpath='{.spec.storageVirtualMachineRef.name}')"
Ora conferma di visualizzare tutti i componenti della connessione di crittografia dell'archiviazione. Per le connessioni al cluster di amministrazione, root-admin o organization-admin, devi utilizzare il cluster root-admin.
kubectl get secrets -n "${ns}" "${secret}" kubectl get jobs -n "${ns}" "${job_name}"
Se sono presenti entrambi gli elementi, puoi procedere al passaggio successivo. In caso contrario, interrompi e non procedere con la modifica di IPsec. Contatta l'assistenza tecnica.
kubectl delete secrets -n "${ns}" "${secret}" kubectl delete jobs "${job_name}" -n "${ns}"
Ora utilizza il server dell'API Management per eliminare storageencryptionconnection
export KUBECONFIG= #path to root-admin kubeconfig
kubectl delete storageencryptionconnections "${bm_host}" annotation_key="reconcile_annotation_key" annotation_value="reconcile_annotation_value" kubectl patch storagevirtualmachines "${svm}" -n "${ns}" --type=merge -p "{\"metadata\":{\"annotations\":{\"$annotation_key\":\"$annotation_value\"}}}" kubectl patch storagevirtualmachines "${svm}" -n "${ns}" --type=json -p="[{\"op\": \"remove\", \"path\": \"/metadata/annotations/$annotation_key\"}]"
Rotazione delle chiavi per il traffico interno OTS
Analogamente, per convalidare la rotazione, utilizza il seguente comando e confronta l'output:
export KUBECONFIG= #path to root-admin kubeconfig
kubectl get secret ots-internal-pre-shared-key -n gpc-system
Output:
NAME TYPE DATA AGE
ots-internal-pre-shared-key Opaque 1 18m
kubectl get jobs -n gpc-system | grep os-policy-config-host-ipsec
Output:
os-policy-config-host-ipsec-bm-3d33bb857t5bh Complete 1/1 17s 10m
os-policy-config-host-ipsec-bm-774fa8e6frgr7 Complete 1/1 30s 11m
os-policy-config-host-ipsec-bm-8e452fb29q5wd Complete 1/1 23s 11m
Verifica che tutti i job siano nello stato Complete
.
kubectl get StorageEncryptionConnections -n gpc-system
Output:
NAME INVENTORYMACHINE STORAGEVIRTUALMACHINE STORAGECIDR PRESHAREDKEY READY AGE
bm-3d33bb85 bm-3d33bb85 root-admin 10.4.4.0/24 bm-3d33bb85-pre-shared-key True 6h16m
bm-774fa8e6 bm-774fa8e6 root-admin 10.4.4.0/24 bm-774fa8e6-pre-shared-key True 16h
bm-8e452fb2 bm-8e452fb2 root-admin 10.4.4.0/24 bm-8e452fb2-pre-shared-key True 21h
Verifica che il campo READY
sia impostato su true per tutti gli host.
Elimina tutte le CR nel passaggio 2 con l'ordine elencato
Elimina il secret per il traffico interno
sh kubectl delete secret ots-internal-pre-shared-key -n gpc-system
Elimina tutti e tre i job della policy del sistema operativo
sh kubectl delete jobs os-policy-config-host-ipsec-bm-3d33bb857t5bh -n gpc-system kubectl delete jobs os-policy-config-host-ipsec-bm-774fa8e6frgr7 -n gpc-system kubectl delete jobs os-policy-config-host-ipsec-bm-8e452fb29q5wd -n gpc-system
Elimina tutte e tre le connessioni storageencryptionconnection
sh kubectl delete StorageEncryptionConnections bm-3d33bb85-root-admin -n gpc-system kubectl delete StorageEncryptionConnections bm-774fa8e6-root-admin -n gpc-system kubectl delete StorageEncryptionConnections bm-8e452fb2-root-admin -n gpc-system
Attendi qualche minuto (circa 3-5 minuti). Ripeti il passaggio 2 finché ogni CR non è in stato PRONTO o Completato.
Ruota i tasti del volume
Questa sezione descrive i passaggi manuali per la rotazione delle credenziali del volume OTS.
Prima di iniziare
Completa i seguenti passaggi:
- Verifica di soddisfare i prerequisiti per il laptop.
- Assicurati di poter accedere alla console del cluster OTS tramite BM01 o BM02.
Avviare rotazione della chiave del volume
Nella console OTS, attiva la rotazione una tantum delle chiavi:
volume encryption rekey start -vserver SVM_name -volume volume_name
Il seguente comando modifica la chiave di crittografia per vol1
il giorno SVMvs1
:
cluster1::> volume encryption rekey start -vserver vs1 -volume vol1
Per visualizzare i nomi dei vserver e dei volumi, puoi utilizzare il comando show
:
vserver show
volume show
Verificare la rotazione della chiave del volume
Una volta avviata la rotazione delle chiavi, controlla lo stato della nuova chiave:
volume encryption rekey show
Visualizza lo stato dell'operazione di riassegnazione della chiave:
cluster1::> volume encryption rekey show
Vserver Volume Start Time Status
------- ------ ------------------ ---------------------------
vs1 vol1 9/18/2017 17:51:41 Phase 2 of 2 is in progress.
Una volta completata l'operazione di riassegnazione della chiave, verifica che il volume sia abilitato per la crittografia:
volume show -is-encrypted true
Visualizza i volumi criptati su cluster1
:
cluster1::> volume show -is-encrypted true
Vserver Volume Aggregate State Type Size Available Used
------- ------ --------- ----- ---- ----- --------- ----
vs1 vol1 aggr2 online RW 200GB 160.0GB 20%
Ruota i certificati HSM esterni
Questa sezione descrive come ruotare e aggiornare i certificati HSM esterni per ONTAP.
Prerequisiti
- Accesso amministrativo al cluster ONTAP o alle SVM pertinenti
- Password corrente
- Accesso kubectl ai cluster appropriati
Istruzioni
Esegui il backup dei vecchi certificati HSM:
kubectl get secret aa-aa-external-hsm-creds -n gpc-system -o yaml > external-hsm-creds-old.yaml
Aggiorna il secret dei certificati HSM in Kubernetes:
Copia il vecchio file YAML dei secret:
sh cp external-hsm-creds-old.yaml external-hsm-creds-new.yaml
Aggiorna il nuovo file
external-hsm-creds-new.yaml
con le nuove credenziali HSM, inclusi il certificato CA del server, il certificato client pubblico e la chiave privata per il client.Applica la modifica e aggiorna l'oggetto secret HSM.
kubectl apply -f external-hsm-creds-new.yaml
Aggiorna i certificati HSM in ONTAP:
Accedi alla CLI ONTAP.
Installa il nuovo certificato CA del server:
cluster::> security certificate install -type server-ca -vserver <>
Installa il nuovo certificato client:
cluster::> security certificate install -type client -vserver <>
Aggiorna la configurazione di Key Manager in modo che utilizzi i certificati appena installati:
cluster::> security key-manager external modify -vserver <> -client-cert <> -server-ca-certs <>
Convalida
Verifica la modifica con lo stato di Key Manager:
cluster::> security key-manager external show-status
Controlla se i server delle chiavi sono ancora nello stato
Available
.
Ruota le credenziali di amministratore dello spazio di archiviazione
Questa sezione descrive come ruotare e impostare l'utente e la password dell'amministratore dello spazio di archiviazione.
Prerequisiti
- Accesso amministrativo al cluster ONTAP o alle SVM pertinenti
- Password corrente
- Accesso kubectl ai cluster appropriati
Istruzioni
Inizia con il seguente comando e segui le istruzioni risultanti:
cluster::> security login password
Aggiorna il secret in modo che corrisponda a:
Opzione 1 (interattiva):
kubectl edit secret -n <netapp_namespace> netapp_credential
Utilizza l'editor per modificare la password con il nuovo valore codificato in base64.
Opzione 2 (patch con dipendenza jq):
k get secret -n <netapp_namespace> netapp_credential -o json | jq '.data["password"]="<new-base64-encoded-password>"' | kubectl apply -f -
Ruota le credenziali di accesso di emergenza ONTAP
Durante la configurazione dell'archiviazione di file e blocchi, vengono creati quattro account utente di accesso di emergenza che possono essere utilizzati per accedere direttamente a ONTAP. Queste credenziali possono essere ottenute come secret nel server dell'API Management. Una volta utilizzate, queste credenziali devono essere ruotate.
Durante la configurazione vengono creati due tipi di secret: livello 1 e livello 2. Il livello 1 è
storage-root-level1 and storage-root-level1-backup
. Il livello 2 è
storage-root-level2 and storage-root-level2-backup
. I secret di livello 2 devono essere
memorizzati nella cassaforte e ogni livello ha due secret, normale e di backup. Sebbene il
software gestisca l'eliminazione simultanea dei secret normali e di backup, ti
consigliamo di ruotare solo uno di questi secret partner alla volta come livello
di sicurezza aggiuntivo.
Mentre i secret di livello 1 vengono ruotati automaticamente dopo un periodo di 90 giorni, quelli di livello 2 no. Se viene utilizzato, entrambi i tipi di secret devono essere ruotati manualmente seguendo la procedura riportata di seguito.
Prerequisiti
- Accesso richiesto: server API Management
Convalida
- La rotazione dei secret può essere convalidata controllando se il secret è ancora contrassegnato per l'eliminazione. In caso contrario, il secret è stato ruotato. Per verificare, segui il passaggio 1 delle istruzioni riportate di seguito.
Se il segreto è di livello 2, copialo su un supporto fisico e conservalo nella cassaforte. Il segreto deve quindi essere contrassegnato come persistente utilizzando l'annotazione
"disk.gdc.goog/persisted"
.kubectl annotate secrets <secret_name> -n gpc-system disk.gdc.goog/persisted=''
Segui queste istruzioni per ruotare manualmente il secret se riscontri errori durante la convalida.
Istruzioni
Controlla se un secret è contrassegnato per l'eliminazione:
Esegui questo comando:
kubectl get secret <secret_name> -n gpc-system -o yaml
Se il campo
deletionTimestamp
è presente nella risposta come in questo esempio, il segreto è contrassegnato per l'eliminazione. In caso contrario, non lo è.apiVersion: v1 data: password: KFZbQTJdYjIwSUtVVV1aNytJJVM= username: cm9vdC1sdmwy immutable: true kind: Secret metadata: annotations: cluster-name: aa-aa-stge01 creationTimestamp: "2022-12-21T05:03:02Z" deletionGracePeriodSeconds: 0 deletionTimestamp: "2022-12-21T14:42:13Z" finalizers: - ontap.storage.private.gdc.goog/breakglass-finalizer labels: breakglass-secret: "true" name: storage-root-level2 namespace: gpc-system resourceVersion: "591897" uid: 6f331f8a-bf48-4d59-9725-6c99c5e766f7 type: Opaque
Ruota il secret dopo averlo utilizzato per accedere a ONTAP:
- Verifica se le credenziali del partner esistono e non sono contrassegnate per l'eliminazione. Non procedere e torna a questi passaggi in futuro se è contrassegnato per l'eliminazione.
Se il segreto di livello 2 viene ruotato, il segreto del partner deve essere contrassegnato come persistente aggiungendo l'annotazione
disk.gdc.goog/persisted
:kubectl annotate secrets <secret_name> -n gpc-system disk.gdc.goog/persisted=''
Elimina il secret dal cluster utilizzando il seguente comando:
kubectl delete secret <secret_name> -n gpc-system
A questo punto, viene avviato il processo di eliminazione (che può essere confermato controllando se il secret è contrassegnato per l'eliminazione). L'eliminazione e la rigenerazione del secret possono richiedere quasi un'ora.
Ruota i certificati di amministratore dello spazio di archiviazione e SVM
Questi certificati sono i certificati server installati nel sistema ONTAP da GDC.
Esiste un certificato per l'amministratore dell'archiviazione, noto anche come account amministratore del cluster. Il suo nome ha come prefisso il nome host del sistema ONTAP e un hash univoco finale. Viene installato nel vserver di amministrazione del cluster. GDC utilizza questo certificato internamente per le attività amministrative.
Sono definiti anche diversi certificati lato server per le SVM ONTAP. Questi stabiliscono l'autenticità per i client che comunicano con le SVM.
Tutti i certificati possono essere ruotati utilizzando la stessa procedura. A causa di una mancata corrispondenza del certificato root-ca nel cluster root-admin, per i certificati del cluster e della SVM, elencati nelle tabelle seguenti, la rotazione richiede la rotazione di tutti i certificati all'interno dell'elenco corrispondente. Ciò significa che se è necessario ruotare un certificato del cluster, devono essere ruotati anche tutti gli altri certificati del cluster. Lo stesso vale per i certificati SVM. Questa limitazione verrà risolta una volta implementata la gestione automatica dei certificati.
Prerequisiti
- Accesso amministrativo al cluster ONTAP o alle SVM pertinenti
- Accesso kubectl ai cluster Kubernetes appropriati
- reinstalla i certificati client-ca descritti nei passaggi di installazione dei certificati client-ca.
Mapping tra certificati e secret Kubernetes
Per ogni certificato installato in ONTAP, esiste un secret Kubernetes corrispondente nel server API di gestione che contiene i dettagli del certificato. GDC genera i certificati e la procedura per sostituirne uno è semplice: elimina il secret corrispondente a un determinato certificato e il certificato verrà rigenerato immediatamente. Il nuovo certificato può quindi essere installato manualmente in ONTAP, sostituendo quello precedente.
Utilizza kubectl get secrets -n <namespace> -s <secret> -o yaml
per ispezionare il certificato in Kubernetes e verificare che corrisponda ai dettagli in ONTAP visualizzati da security certificate show -vserver <svm_name>
. Lo spazio dei nomi sarà sempre "gpc-system" e puoi fare riferimento alla tabella precedente per il nome del secret.
Puoi anche visualizzare la mappatura del certificato al secret controllando:
kubectl get certificates -n <namespace>
Certificati cluster pertinenti
Nome comune ONTAP | Vserver | Nome certificato K8S | Nome secret Kubernetes | Descrizione |
N/D | <hostname> | <hostname>-admin-cert | <hostname>-admin-cert-secret | Certificato di amministratore del cluster |
N/D | <hostname> | <hostname>-server-cert | <hostname>-server-cert-secret | Certificato del server firmato dall'emittente GDC utilizzato come certificato del server ONTAP |
N/D | <hostname> | <hostname>-read-only-cert | <hostname>-read-only-cert-secret | Accesso di monitoraggio di sola lettura |
Certificati SVM pertinenti
Vserver | Nome certificato K8S | Nome secret Kubernetes | Descrizione |
root-admin | root-admin-server-cert | root-admin-server-cert-secret | Certificato del server firmato dall'emittente GDC utilizzato come certificato del server SVM |
root-admin | root-admin-s3-server-cert | root-admin-s3-server-cert-secret | Certificato del server firmato dall'emittente GDC utilizzato come certificato del server ONTAP S3 |
root-admin | root-admin-client-cert | root-admin-client-cert-secret | Accesso amministratore SVM |
root-admin | root-admin-s3-identity-client-cert | root-admin-s3-identity-client-cert-secret | Accesso all'identità S3 |
Convalida
Certificato Vserver
Dopo la rotazione di tutti i certificati, verifica che il backend di Trident sia ancora connesso correttamente per ogni cluster associato al certificato del server ruotato.
Esegui questo comando:
export KUBECONFIG= #path to root-admin kubeconfig
kubectl get tridentbackendconfigs -n netapp-trident
L'output dovrebbe essere simile al seguente:
NAME BACKEND NAME BACKEND UUID PHASE STATUS netapp-trident-backend-tbc-ontap-san iscsi-san a46ce1c7-26da-42c9-b475-e5e37a0911f8 Bound Success
Verifica che
PHASE
sia Bound e cheStatus
sia Success.
Certificato amministratore radice
Per testare il certificato amministratore, possiamo creare una nuova StorageVirtualMachine di test e verificare che GDC sia in grado di riconciliarla in modo appropriato. I passaggi da seguire sono i seguenti:
- Elenca le StorageVirtualMachine esistenti e scegli quella da clonare come test.
- Estrai le specifiche Kubernetes.
- Modifica la definizione per cambiare il nome ed eliminare i campi non necessari.
- Applica la definizione del test.
- Attendi che lo stato di StorageVirtualMachine diventi
Ready
. - Elimina StorageVirtualMachine di test.
- Elimina l'SVM effettiva da ONTAP.
Esempio
Questo esempio utilizza uno spazio dei nomi GDC NetApp gpc-system
e clona
temporaneamente organization-root-user
in una nuova SVM chiamata test-svm
.
Elenca SVM:
kubectl get storagevirtualmachines -n ngpc-system
Output:
NAME AGE organization-root-admin 13d
Estrai la specifica:
kubectl get storagevirtualmachines -n gpc-system -o yaml > svm.yaml
Modifica la specifica in modo che sia simile alla seguente:
apiVersion: system.gpc.gke.io/v1alpha1 kind: StorageVirtualMachine metadata: labels: ontap.storage.gpc.gke.io/role: user name: test-svm namespace: netapp-alatl12-gpcstge02 spec: aggregates: - alatl12-gpcstge02-c1-aggr1 - alatl12-gpcstge02-c2-aggr1 clusterName: alatl12-gpcstge02 iscsiTarget: port: a0a-4 subnetName: root-svm-data nasServer: port: a0a-4 subnetName: root-svm-data svmNetwork: port: e0M subnetName: Default
Applica il file al cluster:
kubectl create -f svm.yaml
Attendi che la nuova SVM sia pronta. Osserva periodicamente l'output di:
kubectl get storagevirtualmachines -n gpc-system test-svm
Il successo è indicato da:
Conditions: Last Transition Time: 2022-03-30T21:30:27Z Message: Observed Generation: 1 Reason: SVMCreated Status: True Type: Ready
o
AnsibleJobSucceed
.Elimina la risorsa SVM:
kubectl delete storagevirtualmachines -n gpc-system test-svm
Eliminalo completamente da ONTAP. L'eliminazione della risorsa non la rimuove da ONTAP.
Accedi alla console NetApp ed elimina l'SVM:
alatl12-gpcstge02::> vserver delete test-svm
Output:
Warning: When Vserver "test-svm" is deleted, the following objects are automatically removed as well: LIFs: 7 Routes: 2 Admin-created login accounts: 2 Do you want to continue? {y|n}: y [Job 3633] Success
Segui queste istruzioni per ruotare manualmente il certificato ONTAP se riscontri errori durante la convalida.
Istruzioni
Se il nome del certificato ONTAP precedente non è applicabile, non è necessario ruotare nulla in ONTAP. Ispeziona il certificato e il secret in Kubernetes ed elimina il secret.
Genera un nuovo certificato, facendo riferimento alla tabella precedente per il nome del secret:
kubectl get certificates -n <namespace>
$ kubectl patch Certificates <cert_name> -n gpc-system \ --type=merge -p "{\"spec\":{\"privateKey\": {\"rotationPolicy\": \"Always\"}}}" $ kubectl delete secret -n <namespace> <secret_name>
Visualizza i certificati installati per un determinato vserver, per i certificati installati in ONTAP (non contrassegnati come non applicabili):
cluster::> security certificate show -vserver <svm_name> -type server
Ispeziona il secret corrispondente in Kubernetes (fai riferimento alla tabella precedente):
kubectl get certificates -n <namespace>
Quando la corrispondenza è soddisfacente, genera un nuovo certificato eliminando il segreto:
kubectl delete secret -n <namespace> <secret_name>
Ispeziona nuovamente il secret per verificare che sia stato rigenerato un nuovo certificato. Una volta confermato, crea un nuovo certificato server in ONTAP. Solo esegui i seguenti passaggi per i certificati precedenti con il suffisso "server-cert".
Estrai il corpo del nuovo certificato TLS utilizzando
kubectl
e altri strumenti direttamente e installalo in ONTAP:$ gdch_cert_details -n <namespace> -s <secret_name> cluster::> security certificate install -vserver <svm_name> -type server
Il primo prompt sarà:
Please enter Certificate: Press <Enter> when done
In cui devi inserire
tls.crt
. Se intls.crt
sono presenti più blocchi di certificati, inserisci il primo e mantieni i restanti blocchi di certificati come certificati intermedi per riferimento nel passaggio successivo.Il sistema ti chiederà:
Please enter Private Key: Press <Enter> when done
. Incolla i contenuti del filetls.key
e premi Invio.Successivamente, verrà visualizzato il prompt:
Do you want to continue entering root and/or intermediate certificates {y|n}:
Se il filetls.crt
contiene un solo certificato, digitaN
e premi Invio. In caso contrario, digitaY
e premi Invio.Se hai digitato
Y
: ti verrà chiesto di inserire i certificati intermedi. Incollali uno alla volta dal filetls.crt
, premendo Invio dopo ciascuno. Infine, incolla il certificato radice dal fileca.crt
e premi Invio.Se hai digitato
N
: (non sono necessarie ulteriori azioni in merito ai certificati in questa richiesta)ONTAP restituirà quindi un numero di serie. Prendi nota di questo numero, in quanto rappresenta il numero di serie del nuovo certificato e della nuova CA. Questo numero di serie verrà indicato come
<new\_server\_serial>
e<new\_ca>
nei passaggi successivi. Non seguire questi passaggi per il certificato se stai configurando un certificato server S3.Visualizza lo stato attuale delle configurazioni SSL per il vserver e il cluster. Tieni a portata di mano la CA di emissione del certificato server, il nome comune del certificato server e il numero di serie del certificato server, in quanto verranno indicati rispettivamente come
<old\_server\_common\_name>
,<old\_ca>
e<old\_server\_serial>
:cluster::> security ssl show -vserver <vserver>
Vengono restituite le informazioni SSL, con le informazioni del vecchio certificato del server. Puoi farvi riferimento in un secondo momento per assicurarti che siano state aggiornate, dopo aver modificato la configurazione SSL.
Modifica la configurazione SSL:
cluster::> security ssl modify -server-enabled -client-enabled true -vserver <svm_name> -serial <new_server_serial> -ca <new_ca>
Visualizza il nuovo stato delle configurazioni SSL per il vserver e il cluster. Dovrebbe essere presente il numero di serie aggiornato del certificato del server ora installato:
cluster::> security ssl show -vserver <vserver>
Elimina il vecchio certificato del server dopo aver verificato il passaggio precedente:
cluster::> security certificate delete -vserver <svm_name> -common-name <old_server_common_name> -ca <old_ca> -type server -serial <old_server_serial>
Certificati client-CA
Recupera tutti i certificati CA da ConfigMap
trust-store-internal-only
nello spazio dei nomigpc-system
utilizzando il seguente comando:kubectl get cm -n gpc-system trust-store-internal-only -o jsonpath='{.data.ca\.crt}'
Per ogni certificato CA recuperato nel passaggio precedente, esegui il seguente comando sul cluster ONTAP:
cluster::> security certificate install -vserver <svm_name> -type client-ca
Ti verrà chiesto:
Please enter Certificate: Press <Enter> when done.
Incolla ogni blocco di certificato recuperato nel passaggio 1 e premi Invio. Ripeti questo comando di installazione per ogni certificato CA.
Ruota i certificati Harvest
La generazione del certificato di raccolta dipende da <hostname>-read-only-cert-secret
.
Prima di procedere, assicurati che <hostname>-read-only-cert-secret
sia ruotato.
Visualizza i certificati installati per il pod Harvest:
export KUBECONFIG= #path to root-admin kubeconfig
cluster_name="$(kubectl get storagecluster -A -o jsonpath='{.items[0].metadata.name}')" secret_name="$cluster_name"-read-only-cert-secret
export TLS_CRT="$(kubectl get secret -n gpc-system $secret_name -o jsonpath='{.data.tls\.crt}')"
export TLS_KEY="$(kubectl get secret -n gpc-system $secret_name -o jsonpath='{.data.tls\.key}')"
export CA_CRT="$(kubectl get secret -n gpc-system $secret_name -o jsonpath='{.data.ca\.crt}')"
Applica una patch al secret delle credenziali Harvest per fornire i certificati aggiornati:
$ kubectl patch secret \ -n gpc-system netapp-harvest-configuration-credential \ -p "{\"data\":{\"tls.crt\":\"${TLS_CRT:?}\",\"tls.key\":\"${TLS_KEY:?}\",\"ca.crt\":\"${CA_CRT:?}\"}}"
Riavvia il servizio Harvest per caricare la configurazione aggiornata:
kubectl delete pod -n gpc-system -l 'app=harvest.netapp.io'
Ruota i certificati del file system
Esegui questo comando per rigenerare file-storage-webhooks-serving-cert
e
il certificato file-observability-backend-target-cert
kubectl delete secret file-storage-webhooks-serving-cert -n file-system
kubectl delete secret file-observability-backend-target-cert -n file-system
Riavvia i pod per caricare la configurazione aggiornata:
kubectl delete pod -n file-system -l 'app=file-observability-backend-controller'
kubectl delete pod file-storage-backend-controller -n file-system
Ruotare i certificati Trident e ONTAP
Trident deve comunicare con ONTAP. Questa opzione è configurata con il backend Trident, che utilizza il certificato client <svm\_name>-client-cert-secret>
definito in precedenza. La rotazione dei certificati client non fa parte di Trident, ma Trident
si basa su parti di questo certificato, che devono essere aggiornate.
Istruzioni
Per l'aggiornamento del certificato CA:
Esporta
KUBECONFIG
in modo che punti al file kubeconfig per il cluster specifico dei componenti Trident in questione. Su ogni cluster verrà configurato Trident.Recupera il certificato CA con codifica Base64 dal secret client-cert e memorizzalo come variabile:
ca_cert=$(kubectl get secrets -n "${ns}" "${secret}" -o jsonpath='{.data.ca\.crt}')
Applica la patch all'oggetto tridentBackendConfig:
kubectl patch tridentBackendConfigs netapp-trident-backend-tbc-ontap-san -n netapp-trident --type=merge -p "{\"spec\":{\"trustedCACertificate\":\"$ca_cert\"}}"
Per il certificato e la chiave del client effettivi:
Recupera il certificato TLS, con codifica Base64 dal secret client-cert e memorizzalo come variabile:
tls_cert=$(kubectl get secrets -n "${ns}" "${secret}" -o jsonpath='{.data.tls\.crt}')
Recupera la chiave TLS, con doppia codifica Base64 dal secret client-cert e memorizzala come variabile:
tls_key=$(kubectl get secrets -n "${ns}" "${secret}" -o jsonpath='{.data.tls\.key}' | base64 -w 0)
Aggiorna il secret di backend con la chiave privata:
kubectl patch secrets netapp-trident-backend-tbc-ontap -n netapp-trident --type=merge -p "{\"data\":{\"clientPrivateKey\": \"$tls_key\"}}"
Applica la patch alla configurazione del backend con il certificato TLS:
kubectl patch tridentBackendConfigs netapp-trident-backend-tbc-ontap-san -n netapp-trident --type=merge -p "{\"spec\":{\"clientCertificate\":\"$tls_cert\"}}"
Ruota i certificati del controller Trident
I container Trident devono comunicare con l'operatore Trident. Questa comunicazione viene eseguita tramite HTTPS e i certificati server e client devono essere gestiti nell'ambito di questa operazione.
Convalida
Verifica che sia il DaemonSet sia il deployment (se applicabile) siano in uno stato integro.
Segui queste istruzioni per ruotare manualmente i certificati del server e del client se trovi errori durante la convalida.
Istruzioni
Nessuno dei certificati server e client ha un certificato corrispondente sul lato ONTAP. Questi sono strettamente contenuti nei cluster.
Elimina il secret corrispondente al certificato in scadenza.
kubectl delete secret -n netapp-trident <secret_name>
Riavvia il daemonset netapp-trident-csi:
kubectl rollout restart daemonset netapp-trident-csi -n netapp-trident
Per le rotazioni dei certificati server, dovrai anche riavviare il deployment di netapp-trident-csi:
kubectl rollout restart deployments netapp-trident-csi -n netapp-trident
Certificato CA Trident
Il certificato CA viene utilizzato per fornire l'autorità di certificazione per la firma dei certificati server e client Trident.
Nome certificato | Spazio dei nomi | Secret | Descrizione |
netapp-trident-csi-cert | netapp-trident | netapp-trident-csi-cert | Certificato CA Trident |
Convalida
Viene visualizzato il secret rigenerato. Affinché i certificati client e server abbiano effetto, puoi anche seguire la rotazione dei certificati del controller Trident nelle istruzioni precedenti dopo aver ruotato questo certificato.
Segui le istruzioni riportate di seguito per ruotare manualmente il certificato CA se trovi errori durante la convalida.
Istruzioni
Per ruotare questa chiave, devi solo eliminare il secret da Kubernetes:
kubectl delete secret -n netapp-trident <secret_name>
Nodi CSI Trident e SVM (dati)
Si tratta di un insieme di credenziali iSCSI CHAP a livello di SVM per consentire l'accesso al piano dati per l'accesso a blocchi. Questa limitazione non si applica ai protocolli di file.
Server API Management
Spazio dei nomi | Secret | Descrizione |
gpc-system | <organization>-<type>-svm-credential | Configurazione SVM necessaria per la configurazione di Trident |
Server API di amministrazione e gestione dell'organizzazione
Spazio dei nomi | Secret | Descrizione |
gpc-system | <organization>-<type>-svm-credential | Configurazione SVM necessaria per la configurazione di Trident |
netapp-trident | netapp-trident-backend-tbc-ontap | Secret necessario per gestire il backend di Trident |
Convalida
Verifica che il backend sia ancora configurato correttamente:
#export kubeconfig of org cluster export KUBECONFIG= #path to root-admin kubeconfig kubectl get tridentBackendConfigs -n netapp-trident
Verifica che lo stato del backend sia
Success
.
Segui le istruzioni riportate di seguito per ruotare manualmente i secret se riscontri errori durante la convalida.
Istruzioni
Genera una nuova stringa casuale di 16 caratteri senza caratteri speciali per il secret dell'iniziatore e il secret dell'iniziatore di destinazione:
#export kubeconfig of Management API server
export KUBECONFIG= #path to root-admin kubeconfig
initiator_secret=$(head /dev/random | tr -dc A-Za-z0-9 | head -c16 | base64)
target_secret=$(head /dev/random | tr -dc A-Za-z0-9 | head -c16 | base64)
kubectl patch secrets -n gpc-system "$org-$type-svm-credential" --type=merge -p "{\"data\":{\"initiatorSecret\": \"$initiator_secret\", \"targetSecret\": \"$target_secret\"}}"
#export kubeconfig of org cluster
export KUBECONFIG= #path to root-admin kubeconfig
kubectl patch secrets -n netapp-trident netapp-trident-backend-tbc-ontap --type=merge -p "{\"data\":{\"chapInitiatorSecret\": \"$initiator_secret\", \"chapTargetInitiatorSecret\": \"$target_secret\"}}"
Chiave AES Trident
La chiave AES viene utilizzata internamente da Trident per criptare le credenziali iSCSI CHAP per l'uso interno di Trident. Si tratta di una sequenza casuale di caratteri che deve avere una lunghezza di 32 byte.
Cluster che eseguono Trident (potrebbero essere cluster root/org-admin/user/system)
Spazio dei nomi | Secret | Descrizione |
netapp-trident | netapp-trident-aes-key | Chiave AES necessaria a Trident per criptare le credenziali CHAP iSCSI |
Convalida
Verifica che il backend sia ancora configurato correttamente:
#export kubeconfig of org cluster export KUBECONFIG= #path to root-admin kubeconfig kubectl get tridentBackendConfigs -n netapp-trident
Verifica che lo stato del backend sia
Success
.Tentativo di creare un volume di test:
Crea un file YAML con le informazioni PVC:
echo " kind: PersistentVolumeClaim apiVersion: v1 metadata: name: block-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 5Gi storageClassName: standard-rwo" > pvc.yaml
Applica il file al cluster Kubernetes:
kubectl apply -f pvc.yaml
Verifica che non ci siano errori nei log CSI dovuti alla crittografia iSCSI:
kubectl logs deploy/netapp-trident-csi -n netapp-trident -c trident-main | grep "Error encrypting"
Se non si sono verificati errori, non vengono restituiti log.
Pulisci il file e il PVC:
kubectl delete -f pvc.yaml rm -f pvc.yaml
Segui queste istruzioni per ruotare manualmente la chiave se riscontri errori durante la convalida.
Istruzioni
Prima di ruotare questa chiave, assicurati che non ci siano pod in attesa con PV nel cluster. In caso affermativo, attendi il completamento del provisioning prima di ruotare la chiave.
Genera una nuova stringa casuale di 32 caratteri senza caratteri speciali per aesKey:
#export kubeconfig of org cluster
export KUBECONFIG= #path to root-admin kubeconfig
aes_key=$(head /dev/random | tr -dc A-Za-z0-9 | head -c32 | base64)
#save old key just in case of errors
old_key=$(kubectl get secrets -n netapp-trident "netapp-trident-aes-key" -o jsonpath='{.data.aesKey}')
kubectl patch secrets -n netapp-trident "netapp-trident-aes-key" --type=merge -p "{\"data\":{\"aesKey\": \"$aes_key\"}}"
kubectl rollout restart deployment netapp-trident-csi -n netapp-trident
Esegui il rollback
Esegui il rollback alle credenziali utilizzate l'ultima volta se si verificano errori:
kubectl patch secrets -n netapp-trident "netapp-trident-aes-key" --type=merge -p "{\"data\":{\"aesKey\": \"$old_key\"}}" kubectl rollout restart deployment netapp-trident-csi -n netapp-trident
Ripeti i passaggi di verifica.