Ringkasan
Dengan fitur ini, administrator platform dapat:
- Merotasi kredensial Cassandra di Hashicorp Vault.
- Lakukan roll back ke kredensial Cassandra sebelumnya di Vault jika terjadi masalah selama rotasi sandi.
- Ganti sandi Cassandra untuk satu region dalam satu waktu, sehingga Anda dapat memastikan dampak minimal pada ketersediaan layanan dan mempertahankan kontrol atas proses penggantian.
- Lacak awal, progres, dan penyelesaian rotasi untuk satu wilayah.
Fitur ini tersedia di Apigee Hybrid 1.13.1 dan yang lebih baru.
Sebelum memulai
Sebelum menyiapkan rotasi kredensial:
- Cadangkan database Cassandra Anda. Pencadangan ini dilakukan untuk memastikan pemulihan dapat dilakukan ke kredensial yang telah dirotasi sebelumnya.
- Pastikan cluster dalam kondisi baik (yaitu semua resource Apigee berjalan, tidak ada perubahan status yang menunggu persetujuan).
Penyiapan satu wilayah
-
Buat resource Kubernetes
SecretProviderClassbaru di namespace Apigee Anda untuk kredensial Cassandra baru. Lihat Menyimpan secret Cassandra di Hashicorp Vault untuk mengetahui template yang akan digunakan. Hal ini memungkinkan peran Vault mengakses secret dalam namespace Kubernetes. -
Buat resource kustom
SecretRotationbaru menggunakan template berikut:# 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: Nama unik untuk tugas rotasi. Anda harus menyetel
metadata.nameke nilai unik untuk tugas pra-pemeriksaan rotasi dan lagi untuk tugas rotasi. Misalnya,sr-1-precheckdiikuti dengansr-1. - ROTATION_ID: Tetapkan
spec.rotationIdke ID kustom, misalnyarotation-1-precheck. - NEW_SPC_NAME: Setel
spec.cassandra.newSecretProviderClasske nama class penyedia secret baru yang Anda buat di langkah sebelumnya. - OLD_SPC_NAME: Tetapkan
spec.cassandra.oldSecretProviderClasske nama SPC yang saat ini digunakan olehApigeeDatastore.
- ROTATION_PROCESS_NAME: Nama unik untuk tugas rotasi. Anda harus menyetel
-
Picu tugas prapengecekan rotasi dengan menerapkan file
rotation.yaml.kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml
-
Periksa status tugas untuk memverifikasi kapan tugas pra-pemeriksaan selesai.
kubectl -n APIGEE_NAMESPACE get job sr-(rotationId)-(rotate|rollback|cleanup)-job
-
Setelah tugas prapengecekan rotasi selesai, ubah nilai
metadata.namedan tetapkanspec.precheckkefalse. Terapkan file lagi untuk melakukan rotasi.kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml
-
Setelah tugas rotasi selesai dan Anda telah memvalidasi bahwa traffic masih mengalir dengan benar, bersihkan proses dengan dua langkah berikut:
-
Perbarui nilai
metadata.namedan tetapkanspec.cassandra.jobTypekeCLEANUP. -
Picu tugas pembersihan dengan menerapkan file.
kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml
Setelah tugas pembersihan selesai, proses rotasi selesai.
-
Perbarui nilai
- Cadangkan database Cassandra Anda. Pencadangan ini dilakukan untuk memastikan pemulihan dapat dilakukan ke kredensial setelah dirotasi.
- Hapus kredensial, peran, dan kebijakan Cassandra lama dari Vault.
Penyiapan multi-region
Prosedur penyiapan multi-region dibagi menjadi dua bagian: penyiapan untuk region pertama dan penyiapan untuk region lainnya.
- Selesaikan langkah-langkah berikut di wilayah pertama sebelum memulai wilayah berikutnya.
-
Buat resource Kubernetes
SecretProviderClassbaru di namespaceAPIGEE_NAMESPACEuntuk kredensial Cassandra baru. Lihat Menyimpan secret Cassandra di Hashicorp Vault untuk mengetahui template yang akan digunakan. Hal ini memungkinkan peran Vault mengakses secret dalam namespace Kubernetes. -
Buat resource kustom
SecretRotationbaru menggunakan template berikut:# 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: Nama unik untuk tugas rotasi. Anda harus menyetel
metadata.nameke nilai unik untuk tugas pra-pemeriksaan rotasi dan lagi untuk tugas rotasi. Misalnya,sr-1-precheckdiikuti dengansr-1. - ROTATION_ID: Tetapkan
spec.rotationIdke ID kustom, misalnyarotation-1-precheck. - NEW_SPC_NAME: Setel
spec.cassandra.newSecretProviderClasske nama class penyedia secret baru yang Anda buat di langkah sebelumnya. - OLD_SPC_NAME: Tetapkan
spec.cassandra.oldSecretProviderClasske nama SPC yang saat ini digunakan olehApigeeDatastore.
- ROTATION_PROCESS_NAME: Nama unik untuk tugas rotasi. Anda harus menyetel
-
Picu tugas prapengecekan rotasi dengan menerapkan file
rotation.yaml.kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml
-
Periksa status tugas untuk memverifikasi kapan tugas pra-pemeriksaan selesai.
kubectl -n APIGEE_NAMESPACE get job sr-(rotationId)-(rotate|rollback|cleanup)-job
-
Setelah tugas prapengecekan rotasi selesai:
- Ubah nilai
metadata.name, misalnya darisr-1-precheckmenjadisr-1. - Setel
spec.precheckkefalseuntuk menonaktifkan pra-pemeriksaan dan melakukan rotasi. - Tetapkan
spec.rotationIdke ID baru, misalnyarotation-1.
- Ubah nilai
-
Terapkan file lagi untuk melakukan rotasi.
kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml
-
Periksa status
SecretRotationdan tunggu hingga statusnyacomplete.kubectl -n APIGEE_NAMESPACE get sr SR_NAME
-
Buat resource Kubernetes
-
Di setiap wilayah berikutnya, selesaikan langkah-langkah berikut:
- Buat resource Kubernetes
SecretProviderClassbaru di namespace Apigee Anda untuk kredensial Cassandra baru. Lihat Menyimpan secret Cassandra di Hashicorp Vault untuk mengetahui template yang akan digunakan. Ini harus merupakan definisi yang sama dengan langkah 1a. - Perbarui
overrides.yamldan tetapkancassandra.auth.secretProviderClassagar cocok dengan nilaispec.cassandra.newSecretProviderClassdalam filerotation.yaml.cassandra: auth: secretProviderClass: NEW_SPC_NAME - Terapkan diagram operator:
helm upgrade operator apigee-operator/ \ --namespace APIGEE_NAMESPACE \ --atomic \ -f OVERRIDES_FILE
-
ReplicaSetbaru akan dibuat. Periksa apakah pod controller-manager baru menggunakan SPC baru: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}'Hasilnya harus cocok dengan nilai yang Anda tetapkan untuk
spec.cassandra.newSecretProviderClassdirotation.yaml, misalnya:kubectl -n apigee get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'my-new-spc - Terapkan diagram datastore:
helm upgrade datastore apigee-datastore/ \ --namespace APIGEE_NAMESPACE \ --atomic \ -f OVERRIDES_FILE
- Datastore akan memasuki status merilis. Tunggu hingga datastore selesai dilepaskan dan dalam status berjalan.
kubectl -n APIGEE_NAMESPACE get apigeedatastore DATASTORE_NAME
DATASTORE_NAME adalah
defaultdi sebagian besar penginstalan. - Periksa apakah pod datastore baru menggunakan SPC baru:
export POD=NEW_DATASTORE_POD_NAME
kubectl -n APIGEE_NAMESPACE get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'Hasilnya harus cocok dengan nilai yang Anda tetapkan untuk
spec.cassandra.newSecretProviderClassdirotation.yaml, misalnya:kubectl -n apigee get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'my-new-spc - Tunggu hingga organisasi dan lingkungan selesai merilis dan kembali ke status berjalan.
kubectl -n APIGEE_NAMESPACE get apigeeorg ORG_NAME
kubectl -n APIGEE_NAMESPACE get apigeeenv ENV_NAME - Periksa apakah pod MART, runtime, dan sinkronisasi baru menggunakan SPC baru:
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_NAMEkubectl -n APIGEE_NAMESPACE get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'export POD=NEW_SYNCHRONIZER_POD_NAMEkubectl -n APIGEE_NAMESPACE get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'Hasilnya harus cocok dengan nilai yang Anda tetapkan untuk
spec.cassandra.newSecretProviderClassdirotation.yaml, misalnya:kubectl -n apigee get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'my-new-spc
- Buat resource Kubernetes
-
Setelah menyelesaikan langkah-langkah di setiap wilayah dan memvalidasi bahwa traffic masih berjalan dengan benar, bersihkan proses di wilayah pertama dengan dua langkah berikut:
-
Di wilayah pertama, perbarui nilai
metadata.namedan tetapkanspec.cassandra.jobTypekeCLEANUP. -
Picu tugas pembersihan dengan menerapkan file.
kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml
- Periksa status tugas dan lihat log tugas untuk memverifikasi kapan tugas pembersihan selesai.
Setelah tugas pembersihan selesai, proses rotasi selesai.
-
Di wilayah pertama, perbarui nilai
- Cadangkan database Cassandra Anda. Pencadangan ini dilakukan untuk memastikan pemulihan dapat dilakukan ke kredensial setelah dirotasi.
- Hapus kredensial, peran, dan kebijakan Cassandra lama dari Vault.