Perangkat Google Distributed Cloud (GDC) dengan air gap mengadopsi ONTAP Select (OTS) sebagai vendor penyimpanan software-defined. OTS memiliki sistem autentikasinya sendiri di mana setiap identitas (layanan inti atau klien) memiliki nama dan kunci terkait.
Dokumen ini menjelaskan langkah-langkah untuk mengganti kunci dan sertifikat autentikasi yang harus dilakukan untuk:
- rotasi kunci yang dijadwalkan secara rutin untuk memastikan bahwa perangkat tersebut mematuhi dan aman.
- paparan kunci. Anda harus merotasi kunci yang terekspos sesegera mungkin.
Sebelum memulai
Pastikan Anda memiliki akses berikut:
- Akses konsol Admin ke cluster ONTAP
- Kubeconfig untuk server Management API
Merotasi kredensial IPsec (PSK)
ONTAP mendukung autentikasi berbasis sertifikat untuk IPsec mulai dari 9.10.1. Rilis GDC ini menggunakan 9.14.1 dan menggunakan pre-shared key.
Untuk Appliance, IPsec diimplementasikan untuk dua jenis traffic OTS:
- Traffic eksternal antara host bare metal dan SVM.
- Traffic internal antar-node pekerja.
Kita akan membahasnya secara terpisah.
Prasyarat
- Akses konsol Admin ke cluster ONTAP
- Pre-shared key baru
- Kubeconfig untuk server Management API
- Akses ke host untuk memperbarui konfigurasi StrongSwan
Dampak
Saat kebijakan IPsec dirotasi, host akan mengalami hilangnya konektivitas IP ke sistem penyimpanan. Koneksi akan terhenti atau mungkin gagal bergantung pada perilaku aplikasi. Anda dapat menjeda beban kerja pengguna selama rotasi jika memungkinkan, tetapi hal ini tidak wajib. Koneksi akan pulih segera setelah secret direset.
Rotasi Kunci untuk Traffic Eksternal OTS
Untuk memvalidasi rotasi, gunakan perintah berikut dan bandingkan output Anda:
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
Pastikan kolom READY
bernilai benar untuk host tertentu tempat Anda
menjalankan skrip sebelumnya.
Putar PSK secara manual jika Anda menemukan error selama validasi.
Jalankan perintah berikut:
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)"
Lihat sandi dan salin ke papan klip:
echo $password
Login ke konsol ONTAP:
ssh $username@$mgmt_ip
Saat diminta memasukkan sandi, tempel sandi yang disalin dari langkah sebelumnya.
Gunakan skrip berikut untuk rotasi kredensial:
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
Untuk setiap host yang ingin Anda ganti, Anda dapat menjalankan perintah berikut:
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}')"
Sekarang, pastikan Anda melihat semua komponen koneksi enkripsi penyimpanan. Untuk koneksi cluster admin, baik root-admin maupun organization-admin, Anda harus menggunakan cluster root-admin.
kubectl get secrets -n "${ns}" "${secret}" kubectl get jobs -n "${ns}" "${job_name}"
Jika kedua item ini ada, Anda dapat melanjutkan ke langkah berikutnya. Jika tidak, hentikan dan jangan lanjutkan dengan mengubah ipsec. Hubungi dukungan teknis.
kubectl delete secrets -n "${ns}" "${secret}" kubectl delete jobs "${job_name}" -n "${ns}"
Sekarang gunakan server Management API untuk menghapus 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\"}]"
Rotasi Kunci untuk Traffic Internal OTS
Demikian pula, untuk memvalidasi rotasi, gunakan perintah berikut dan bandingkan output Anda:
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
Pastikan semua tugas berstatus 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
Pastikan kolom READY
bernilai benar untuk semua host.
Hapus semua CR di langkah 2 dengan urutan yang tercantum
Hapus secret untuk traffic internal
sh kubectl delete secret ots-internal-pre-shared-key -n gpc-system
Hapus ketiga tugas kebijakan OS
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
Hapus semua 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
Tunggu beberapa menit (~3-5 menit). Ulangi langkah 2 hingga setiap CR berstatus SIAP atau Selesai.
Merotasi tombol volume
Bagian ini menjelaskan langkah-langkah manual untuk mengganti kredensial volume OTS.
Sebelum memulai
Selesaikan langkah-langkah berikut:
- Pastikan Anda memenuhi prasyarat laptop.
- Pastikan Anda dapat login ke konsol cluster OTS melalui BM01 atau BM02.
Memulai rotasi tombol volume
Di konsol OTS, picu rotasi kunci satu kali:
volume encryption rekey start -vserver SVM_name -volume volume_name
Perintah berikut mengubah kunci enkripsi untuk vol1
di SVMvs1
:
cluster1::> volume encryption rekey start -vserver vs1 -volume vol1
Untuk melihat nama vserver dan volume, Anda dapat menggunakan perintah show
:
vserver show
volume show
Memverifikasi rotasi tombol volume
Setelah rotasi kunci dimulai, periksa status penggantian kunci:
volume encryption rekey show
Menampilkan status operasi penggantian kunci:
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.
Setelah operasi penggantian kunci selesai, pastikan volume diaktifkan untuk enkripsi:
volume show -is-encrypted true
Tampilkan volume terenkripsi di cluster1
:
cluster1::> volume show -is-encrypted true
Vserver Volume Aggregate State Type Size Available Used
------- ------ --------- ----- ---- ----- --------- ----
vs1 vol1 aggr2 online RW 200GB 160.0GB 20%
Merotasi sertifikat HSM eksternal
Bagian ini menjelaskan cara mengganti dan mengupdate sertifikat HSM eksternal untuk ONTAP.
Prasyarat
- Akses admin ke cluster ONTAP atau SVM yang relevan
- Sandi saat ini
- Akses kubectl ke cluster yang sesuai
Petunjuk
Mencadangkan sertifikat HSM lama:
kubectl get secret aa-aa-external-hsm-creds -n gpc-system -o yaml > external-hsm-creds-old.yaml
Perbarui secret sertifikat HSM di Kubernetes:
Salin file yaml secret lama:
sh cp external-hsm-creds-old.yaml external-hsm-creds-new.yaml
Perbarui file
external-hsm-creds-new.yaml
baru dengan kredensial HSM baru, termasuk sertifikat CA server, sertifikat klien publik, dan kunci pribadi untuk klien.Terapkan perubahan dan perbarui objek rahasia HSM.
kubectl apply -f external-hsm-creds-new.yaml
Perbarui sertifikat HSM di ONTAP:
Login ke ONTAP CLI.
Instal sertifikat CA server baru:
cluster::> security certificate install -type server-ca -vserver <>
Instal sertifikat klien baru:
cluster::> security certificate install -type client -vserver <>
Perbarui konfigurasi pengelola kunci untuk menggunakan sertifikat yang baru diinstal:
cluster::> security key-manager external modify -vserver <> -client-cert <> -server-ca-certs <>
Validasi
Verifikasi perubahan dengan status pengelola kunci:
cluster::> security key-manager external show-status
Periksa apakah server kunci masih dalam status
Available
.
Merotasi kredensial admin penyimpanan
Bagian ini menjelaskan cara mengganti dan menetapkan pengguna serta sandi admin penyimpanan.
Prasyarat
- Akses admin ke cluster ONTAP atau SVM yang relevan
- Sandi saat ini
- Akses kubectl ke cluster yang sesuai
Petunjuk
Mulai dengan perintah berikut, lalu ikuti perintah yang dihasilkan:
cluster::> security login password
Perbarui secret agar cocok:
Opsi 1 (Interaktif):
kubectl edit secret -n <netapp_namespace> netapp_credential
Gunakan editor untuk mengubah sandi ke nilai baru yang dienkode base64.
Opsi 2 (Patch dengan dependensi jq):
k get secret -n <netapp_namespace> netapp_credential -o json | jq '.data["password"]="<new-base64-encoded-password>"' | kubectl apply -f -
Merotasi kredensial akses darurat ONTAP
Selama penyiapan penyimpanan file dan blok, empat akun pengguna akses darurat dibuat yang dapat digunakan untuk mengakses ONTAP secara langsung. Kredensial ini dapat diperoleh sebagai secret di server Management API. Setelah kredensial tersebut digunakan, kredensial tersebut harus diubah.
Dua jenis rahasia dibuat selama penyiapan, tingkat 1 dan tingkat 2. Level 1 adalah
storage-root-level1 and storage-root-level1-backup
. Level 2 adalah
storage-root-level2 and storage-root-level2-backup
. Secret level 2 perlu disimpan di safe dan setiap level memiliki dua secret, yaitu normal dan cadangan. Meskipun software menangani penghapusan rahasia normal dan cadangan secara bersamaan, kami merekomendasikan untuk mengganti hanya salah satu rahasia partner ini dalam satu waktu sebagai lapisan keamanan tambahan.
Meskipun secret level 1 dirotasi secara otomatis setelah jangka waktu 90 hari, secret level 2 tidak. Kedua jenis rahasia harus diubah secara manual menggunakan proses berikut jika digunakan.
Prasyarat
- Akses yang diperlukan: Server Management API
Validasi
- Rotasi rahasia dapat divalidasi dengan memeriksa apakah rahasia masih ditandai untuk dihapus. Jika tidak, rahasia telah diubah. Ikuti langkah pertama dalam petunjuk berikut untuk memeriksa.
Jika rahasia adalah rahasia tingkat 2, salin rahasia tersebut ke media fisik dan simpan di brankas. Kemudian, rahasia harus ditandai sebagai persisten menggunakan anotasi
"disk.gdc.goog/persisted"
.kubectl annotate secrets <secret_name> -n gpc-system disk.gdc.goog/persisted=''
Gunakan petunjuk berikut untuk memutar rahasia secara manual jika Anda menemukan error selama validasi.
Petunjuk
Periksa apakah secret ditandai untuk dihapus:
Jalankan perintah berikut:
kubectl get secret <secret_name> -n gpc-system -o yaml
Jika kolom
deletionTimestamp
ada dalam respons seperti dalam contoh ini, secret akan ditandai untuk dihapus. Jika tidak, maka tidak.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
Ganti sandi setelah menggunakannya untuk mengakses ONTAP:
- Periksa apakah kredensial partner ada dan tidak ditandai untuk dihapus. Jangan lanjutkan dan kembali ke langkah-langkah ini pada masa mendatang jika ditandai untuk dihapus.
Jika secret level 2 sedang dirotasi, secret partner harus ditandai sebagai persisten dengan menambahkan anotasi
disk.gdc.goog/persisted
:kubectl annotate secrets <secret_name> -n gpc-system disk.gdc.goog/persisted=''
Hapus secret dari cluster menggunakan perintah berikut:
kubectl delete secret <secret_name> -n gpc-system
Pada tahap ini, proses penghapusan akan dimulai (dan dapat dikonfirmasi dengan memeriksa apakah secret ditandai untuk dihapus). Penghapusan dan pembuatan ulang rahasia dapat memerlukan waktu hampir satu jam.
Merotasi sertifikat admin penyimpanan dan SVM
Sertifikat ini adalah sertifikat server yang diinstal ke dalam sistem ONTAP oleh GDC.
Ada satu sertifikat untuk admin penyimpanan, yang juga dikenal sebagai akun admin cluster. Namanya diawali dengan nama host sistem ONTAP, dan memiliki hash unik di bagian akhir. Alat ini diinstal di vserver admin cluster. GDC menggunakan sertifikat ini secara internal untuk tugas administratif.
Ada juga beberapa sertifikat sisi server yang ditentukan untuk SVM ONTAP. Kredensial ini menetapkan keaslian untuk klien yang berkomunikasi dengan SVM.
Semua sertifikat dapat dirotasi menggunakan proses yang sama. Karena ketidakcocokan sertifikat CA root di cluster root-admin, untuk sertifikat cluster dan SVM, yang tercantum dalam tabel berikut, rotasi memerlukan rotasi semua sertifikat dalam daftar masing-masing. Artinya, jika ada sertifikat cluster yang perlu dirotasi, semua sertifikat cluster lainnya juga harus dirotasi. Hal yang sama berlaku untuk sertifikat SVM. Batasan ini akan diatasi setelah pengelolaan sertifikat otomatis diterapkan.
Prasyarat
- Akses admin ke cluster ONTAP atau SVM yang relevan
- Akses kubectl ke cluster Kubernetes yang sesuai
- menginstal ulang sertifikat client-ca yang diuraikan dalam langkah penginstalan sertifikat client-ca.
Pemetaan antara sertifikat dan secret Kubernetes
Untuk setiap sertifikat yang diinstal di ONTAP, ada secret Kubernetes yang sesuai di server Management API yang berisi detail sertifikat. GDC membuat sertifikat, dan proses penggantian sertifikat sangat sederhana: hapus secret yang sesuai dengan sertifikat tertentu, dan sertifikat akan segera dibuat ulang. Sertifikat baru tersebut kemudian dapat diinstal ke ONTAP secara manual, menggantikan sertifikat lama.
Gunakan kubectl get secrets -n <namespace> -s <secret> -o yaml
untuk memeriksa
sertifikat di Kubernetes dan memverifikasi bahwa sertifikat tersebut cocok dengan detail di ONTAP yang terlihat
dari security certificate show -vserver <svm_name>
. Namespace akan selalu
berupa "gpc-system" dan Anda dapat merujuk ke tabel berikutnya untuk mengetahui nama rahasia.
Anda juga dapat melihat pemetaan Sertifikat ke Rahasia dengan memeriksa:
kubectl get certificates -n <namespace>
Sertifikat Cluster yang Relevan
Nama Umum ONTAP | Vserver | Nama Sertifikat K8S | Nama Secret Kubernetes | Deskripsi |
T/A | <hostname> | <hostname>-admin-cert | <hostname>-admin-cert-secret | Sertifikat admin cluster |
T/A | <hostname> | <hostname>-server-cert | <hostname>-server-cert-secret | Sertifikat server yang ditandatangani oleh penerbit GDC yang digunakan sebagai sertifikat server ONTAP |
T/A | <hostname> | <hostname>-read-only-cert | <hostname>-read-only-cert-secret | Akses pemantauan hanya baca |
Sertifikat SVM yang Relevan
Vserver | Nama Sertifikat K8S | Nama Secret Kubernetes | Deskripsi |
admin-root | root-admin-server-cert | root-admin-server-cert-secret | Sertifikat server yang ditandatangani oleh penerbit GDC yang digunakan sebagai sertifikat server SVM |
admin-root | root-admin-s3-server-cert | root-admin-s3-server-cert-secret | Sertifikat server yang ditandatangani oleh penerbit GDC yang digunakan sebagai sertifikat server S3 ONTAP |
admin-root | root-admin-client-cert | root-admin-client-cert-secret | Akses administrator SVM |
admin-root | root-admin-s3-identity-client-cert | root-admin-s3-identity-client-cert-secret | Akses identitas S3 |
Validasi
Sertifikat Vserver
Setelah semua sertifikat dirotasi, pastikan backend Trident masih terhubung dengan berhasil untuk setiap cluster yang terkait dengan sertifikat server yang dirotasi.
Jalankan perintah berikut:
export KUBECONFIG= #path to root-admin kubeconfig
kubectl get tridentbackendconfigs -n netapp-trident
Output akan terlihat seperti:
NAME BACKEND NAME BACKEND UUID PHASE STATUS netapp-trident-backend-tbc-ontap-san iscsi-san a46ce1c7-26da-42c9-b475-e5e37a0911f8 Bound Success
Pastikan
PHASE
adalah Bound danStatus
adalah Success.
Sertifikat admin root
Untuk menguji sertifikat admin, kita dapat membuat StorageVirtualMachine pengujian baru dan melihat bahwa GDC dapat merekonsiliasinya dengan tepat. Langkah-langkahnya adalah sebagai berikut:
- Buat daftar StorageVirtualMachines yang ada dan pilih salah satunya untuk dikloning sebagai pengujian.
- Ekstrak spesifikasi Kubernetes untuknya.
- Edit definisi untuk mengubah nama dan menghapus kolom yang tidak diperlukan.
- Terapkan definisi pengujian.
- Tunggu hingga status StorageVirtualMachine menjadi
Ready
. - Hapus StorageVirtualMachine pengujian.
- Hapus SVM sebenarnya dari ONTAP.
Contoh
Contoh ini menggunakan namespace GDC NetApp gpc-system
dan meng-clone
organization-root-user
untuk sementara ke SVM baru bernama test-svm
.
Mencantumkan SVM:
kubectl get storagevirtualmachines -n ngpc-system
Output:
NAME AGE organization-root-admin 13d
Ekstrak spesifikasi:
kubectl get storagevirtualmachines -n gpc-system -o yaml > svm.yaml
Edit spesifikasi agar terlihat mirip dengan berikut:
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
Terapkan ke cluster:
kubectl create -f svm.yaml
Tunggu hingga SVM baru siap. Amati output secara berkala:
kubectl get storagevirtualmachines -n gpc-system test-svm
Keberhasilan ditunjukkan oleh:
Conditions: Last Transition Time: 2022-03-30T21:30:27Z Message: Observed Generation: 1 Reason: SVMCreated Status: True Type: Ready
atau
AnsibleJobSucceed
.Hapus resource SVM:
kubectl delete storagevirtualmachines -n gpc-system test-svm
Menghapusnya sepenuhnya dari ONTAP. Menghapus resource tidak akan menghapusnya dari ONTAP.
Login ke konsol NetApp dan hapus 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
Gunakan petunjuk berikut untuk memutar sertifikat ONTAP secara manual jika Anda menemukan error selama validasi.
Petunjuk
Jika nama sertifikat ONTAP sebelumnya tidak berlaku, tidak ada yang perlu diubah di ONTAP. Periksa sertifikat dan secret di Kubernetes, lalu hapus secret.
Buat sertifikat baru, dengan merujuk pada tabel sebelumnya untuk nama rahasia:
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>
Melihat sertifikat yang diinstal untuk vserver tertentu, untuk sertifikat yang diinstal di ONTAP (tidak ditandai sebagai tidak berlaku):
cluster::> security certificate show -vserver <svm_name> -type server
Periksa secret yang cocok di Kubernetes (lihat tabel sebelumnya):
kubectl get certificates -n <namespace>
Jika sudah puas dengan kecocokan, buat sertifikat baru dengan menghapus secret:
kubectl delete secret -n <namespace> <secret_name>
Periksa kembali secret untuk melihat bahwa sertifikat baru telah dibuat ulang. Setelah dikonfirmasi, buat sertifikat server baru di ONTAP. Hanya lakukan langkah-langkah berikut untuk sertifikat sebelumnya dengan sufiks "server-cert".
Ekstrak isi sertifikat TLS baru menggunakan
kubectl
dan alat lainnya secara langsung, lalu instal ke ONTAP:$ gdch_cert_details -n <namespace> -s <secret_name> cluster::> security certificate install -vserver <svm_name> -type server
Perintah pertama adalah:
Please enter Certificate: Press <Enter> when done
Di kolom tersebut, Anda harus memasukkan
tls.crt
. Jika ada beberapa blok sertifikat ditls.crt
, masukkan blok pertama, dan simpan blok sertifikat yang tersisa sebagai sertifikat perantara untuk referensi pada langkah berikutnya.Sistem akan meminta:
Please enter Private Key: Press <Enter> when done
. Tempelkan isi filetls.key
Anda, lalu tekan Enter.Selanjutnya, akan muncul perintah:
Do you want to continue entering root and/or intermediate certificates {y|n}:
Jika filetls.crt
Anda hanya berisi satu sertifikat, ketikN
, lalu tekan Enter. Jika tidak, ketikY
, lalu tekan Enter.Jika Anda mengetik
Y
: Anda akan diminta untuk memasukkan sertifikat perantara. Tempelkan satu per satu dari filetls.crt
Anda, tekan Enter setelah setiap kode. Terakhir, tempelkan sertifikat root dari fileca.crt
Anda, lalu tekan Enter.Jika Anda mengetik
N
: (Tidak ada tindakan lebih lanjut yang diperlukan terkait sertifikat pada perintah ini)Kemudian, ONTAP akan menampilkan nomor seri. Catat nomor ini, karena mewakili nomor seri sertifikat dan CA baru. Nomor seri ini akan disebut sebagai
<new\_server\_serial>
dan<new\_ca>
pada langkah-langkah berikutnya. Jangan ikuti langkah-langkah sertifikat ini jika Anda mengonfigurasi sertifikat server S3.Melihat status konfigurasi SSL saat ini untuk vserver dan cluster. Siapkan CA Penerbit Sertifikat Server, Nama Umum Sertifikat Server, dan Nomor Seri Sertifikat Server, karena ketiganya akan disebut sebagai
<old\_server\_common\_name>
,<old\_ca>
, dan<old\_server\_serial>
:cluster::> security ssl show -vserver <vserver>
Perintah ini akan menampilkan info SSL, dengan info sertifikat server lama. Anda dapat mereferensikannya nanti untuk memastikan info tersebut telah diperbarui, setelah Anda mengubah konfigurasi SSL.
Ubah konfigurasi ssl:
cluster::> security ssl modify -server-enabled -client-enabled true -vserver <svm_name> -serial <new_server_serial> -ca <new_ca>
Lihat status baru konfigurasi SSL untuk vserver dan cluster. Perintah ini akan menampilkan nomor seri yang telah diupdate untuk sertifikat server yang kini diinstal:
cluster::> security ssl show -vserver <vserver>
Hapus sertifikat server lama setelah memverifikasi langkah sebelumnya:
cluster::> security certificate delete -vserver <svm_name> -common-name <old_server_common_name> -ca <old_ca> -type server -serial <old_server_serial>
Sertifikat Client-CA
Ambil semua sertifikat CA dari ConfigMap
trust-store-internal-only
di namespacegpc-system
menggunakan perintah berikut:kubectl get cm -n gpc-system trust-store-internal-only -o jsonpath='{.data.ca\.crt}'
Untuk setiap sertifikat CA yang diambil pada langkah sebelumnya, jalankan perintah berikut di cluster ONTAP Anda:
cluster::> security certificate install -vserver <svm_name> -type client-ca
Anda akan diminta:
Please enter Certificate: Press <Enter> when done.
Tempel setiap blok sertifikat yang diambil pada langkah 1, lalu tekan Enter. Ulangi perintah penginstalan ini untuk setiap sertifikat CA.
Merotasi sertifikat Harvest
Pembuatan sertifikat Harvest bergantung pada <hostname>-read-only-cert-secret
.
Pastikan <hostname>-read-only-cert-secret
diputar sebelum melanjutkan.
Lihat sertifikat yang diinstal untuk 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}')"
Patch rahasia kredensial Harvest untuk menyediakan sertifikat yang diperbarui:
$ kubectl patch secret \ -n gpc-system netapp-harvest-configuration-credential \ -p "{\"data\":{\"tls.crt\":\"${TLS_CRT:?}\",\"tls.key\":\"${TLS_KEY:?}\",\"ca.crt\":\"${CA_CRT:?}\"}}"
Mulai ulang layanan Harvest untuk memuat konfigurasi yang diupdate:
kubectl delete pod -n gpc-system -l 'app=harvest.netapp.io'
Merotasi sertifikat sistem file
Jalankan perintah berikut untuk membuat ulang file-storage-webhooks-serving-cert
dan sertifikat 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
Mulai ulang pod untuk memuat konfigurasi yang diupdate:
kubectl delete pod -n file-system -l 'app=file-observability-backend-controller'
kubectl delete pod file-storage-backend-controller -n file-system
Merotasi sertifikat Trident dan ONTAP
Trident harus berkomunikasi dengan ONTAP. Hal ini dikonfigurasi dengan backend
Trident yang menggunakan sertifikat klien <svm\_name>-client-cert-secret>
yang ditentukan sebelumnya. Rotasi sertifikat klien bukan bagian dari Trident, tetapi Trident mengandalkan bagian dari sertifikat ini, yang perlu diupdate.
Petunjuk
Untuk update sertifikat CA:
Ekspor
KUBECONFIG
untuk mengarah ke kubeconfig untuk cluster tertentu ke komponen Trident yang dimaksud. Setiap cluster akan dikonfigurasi dengan Trident.Ambil sertifikat CA, yang dienkode base64 dari secret client-cert dan simpan sebagai variabel:
ca_cert=$(kubectl get secrets -n "${ns}" "${secret}" -o jsonpath='{.data.ca\.crt}')
Patch objek tridentBackendConfig:
kubectl patch tridentBackendConfigs netapp-trident-backend-tbc-ontap-san -n netapp-trident --type=merge -p "{\"spec\":{\"trustedCACertificate\":\"$ca_cert\"}}"
Untuk sertifikat dan kunci klien sebenarnya:
Ambil sertifikat TLS, yang dienkode base64 dari secret client-cert, lalu simpan sebagai variabel:
tls_cert=$(kubectl get secrets -n "${ns}" "${secret}" -o jsonpath='{.data.tls\.crt}')
Ambil kunci TLS, yang dienkode ganda base64 dari secret client-cert dan simpan sebagai variabel:
tls_key=$(kubectl get secrets -n "${ns}" "${secret}" -o jsonpath='{.data.tls\.key}' | base64 -w 0)
Perbarui secret backend dengan kunci pribadi:
kubectl patch secrets netapp-trident-backend-tbc-ontap -n netapp-trident --type=merge -p "{\"data\":{\"clientPrivateKey\": \"$tls_key\"}}"
Patch konfigurasi backend dengan sertifikat TLS:
kubectl patch tridentBackendConfigs netapp-trident-backend-tbc-ontap-san -n netapp-trident --type=merge -p "{\"spec\":{\"clientCertificate\":\"$tls_cert\"}}"
Merotasi sertifikat pengontrol Trident
Kontainer Trident harus berkomunikasi dengan Operator Trident. Komunikasi ini dilakukan melalui HTTPs, dan sertifikat server serta klien harus dikelola sebagai bagian dari proses ini.
Validasi
Pastikan daemonset dan deployment (jika berlaku) berada dalam kondisi baik.
Gunakan petunjuk berikut untuk memutar sertifikat server dan klien secara manual jika Anda menemukan error selama validasi.
Petunjuk
Sertifikat server dan klien tidak memiliki sertifikat yang sesuai di sisi ONTAP. Data ini hanya terdapat dalam cluster.
Hapus rahasia yang sesuai dengan sertifikat yang akan segera berakhir.
kubectl delete secret -n netapp-trident <secret_name>
Mulai ulang daemonset netapp-trident-csi:
kubectl rollout restart daemonset netapp-trident-csi -n netapp-trident
Untuk rotasi sertifikat server, Anda juga perlu memulai ulang deployment netapp-trident-csi:
kubectl rollout restart deployments netapp-trident-csi -n netapp-trident
Sertifikat CA Trident
Sertifikat CA digunakan untuk menyediakan certificate authority untuk menandatangani sertifikat server dan klien Trident.
Nama Sertifikat | Namespace | Secret | Deskripsi |
netapp-trident-csi-cert | netapp-trident | netapp-trident-csi-cert | Sertifikat CA Trident |
Validasi
Anda akan melihat bahwa secret telah dibuat ulang. Agar sertifikat klien dan server diterapkan, Anda juga dapat mengikuti cara merotasi sertifikat pengontrol Trident dalam petunjuk sebelumnya setelah merotasi sertifikat ini.
Gunakan petunjuk berikut untuk memutar sertifikat CA secara manual jika Anda menemukan error selama validasi.
Petunjuk
Untuk merotasi kunci ini, Anda hanya perlu menghapus secret dari Kubernetes:
kubectl delete secret -n netapp-trident <secret_name>
Node CSI Trident dan SVM (data)
Ini adalah kumpulan kredensial CHAP iSCSI di seluruh SVM untuk mengaktifkan akses ke bidang data untuk akses blok. Hal ini tidak berlaku untuk protokol file.
Server Management API
Namespace | Secret | Deskripsi |
gpc-system | <organization>-<type>-svm-credential | Konfigurasi SVM yang diperlukan untuk penyiapan Trident |
Server Management API dan admin org.
Namespace | Secret | Deskripsi |
gpc-system | <organization>-<type>-svm-credential | Konfigurasi SVM yang diperlukan untuk penyiapan Trident |
netapp-trident | netapp-trident-backend-tbc-ontap | Secret yang diperlukan untuk mengelola backend Trident |
Validasi
Verifikasi bahwa backend masih berhasil dikonfigurasi:
#export kubeconfig of org cluster export KUBECONFIG= #path to root-admin kubeconfig kubectl get tridentBackendConfigs -n netapp-trident
Verifikasi bahwa status backend adalah
Success
.
Gunakan petunjuk berikut untuk memutar rahasia secara manual jika Anda menemukan error selama validasi.
Petunjuk
Buat string acak baru dengan panjang 16 tanpa karakter khusus untuk secret inisiasi dan secret inisiasi target:
#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\"}}"
Kunci AES Trident
Kunci AES digunakan secara internal oleh Trident untuk mengenkripsi kredensial CHAP iSCSI untuk penggunaan internal Trident. ID ini adalah urutan karakter acak yang harus memiliki panjang 32 byte.
Cluster yang menjalankan Trident (dapat berupa cluster root/org-admin/user/system)
Namespace | Secret | Deskripsi |
netapp-trident | netapp-trident-aes-key | Kunci AES yang diperlukan oleh Trident untuk mengenkripsi kredensial CHAP iSCSI |
Validasi
Verifikasi bahwa backend masih berhasil dikonfigurasi:
#export kubeconfig of org cluster export KUBECONFIG= #path to root-admin kubeconfig kubectl get tridentBackendConfigs -n netapp-trident
Verifikasi bahwa status backend adalah
Success
.Mencoba membuat volume pengujian:
Buat file YAML dengan info PVC di dalamnya:
echo " kind: PersistentVolumeClaim apiVersion: v1 metadata: name: block-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 5Gi storageClassName: standard-rwo" > pvc.yaml
Terapkan ke cluster Kubernetes:
kubectl apply -f pvc.yaml
Pastikan tidak ada error di log CSI karena enkripsi iSCSI:
kubectl logs deploy/netapp-trident-csi -n netapp-trident -c trident-main | grep "Error encrypting"
Anda tidak akan melihat log yang ditampilkan jika tidak ada error.
Bersihkan file dan pvc:
kubectl delete -f pvc.yaml rm -f pvc.yaml
Gunakan petunjuk berikut untuk memutar kunci secara manual jika Anda menemukan error selama validasi.
Petunjuk
Sebelum merotasi kunci ini, pastikan tidak ada pod yang tertunda dengan PV di cluster. Jika ada, tunggu hingga penyediaannya selesai sebelum mengganti kunci.
Buat string acak baru sepanjang 32 karakter tanpa karakter khusus untuk 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
Rollback
Lakukan rollback ke kredensial yang terakhir digunakan jika terjadi error:
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
Ulangi langkah-langkah verifikasi.