Ringkasan
Prosedur ini menjelaskan cara memutar kredensial Cassandra dalam Hashicorp Vault. Untuk memutar kredensial di secret Kubernetes di cluster Anda, lihat Memutar kredensial Cassandra di secret Kubernetes.
Fitur ini memungkinkan administrator platform untuk:
- Memutar kredensial Cassandra di Hashicorp Vault.
- Lakukan roll back ke kredensial Cassandra sebelumnya di Vault jika terjadi masalah selama rotasi sandi.
- Putar sandi Cassandra untuk satu region pada satu waktu, sehingga Anda dapat memastikan dampak minimal pada ketersediaan layanan dan mempertahankan kontrol atas proses rotasi.
- Melacak awal, progres, dan penyelesaian rotasi untuk satu region.
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 untuk memastikan pemulihan dapat dilakukan ke kredensial yang telah dirotasi sebelumnya.
- Pastikan cluster dalam status baik (yaitu semua resource Apigee berjalan, tidak ada perubahan status yang tertunda).
Penyiapan satu region
-
Buat resource Kubernetes
SecretProviderClass
baru di namespace Apigee 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
SecretRotation
baru 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 menetapkan
metadata.name
ke nilai unik untuk tugas prapemeriksaan rotasi dan lagi untuk tugas rotasi. Misalnya,sr-1-precheck
diikuti dengansr-1
. - ROTATION_ID: Tetapkan
spec.rotationId
ke ID kustom, misalnyarotation-1-precheck
. - NEW_SPC_NAME: Tetapkan
spec.cassandra.newSecretProviderClass
ke nama class penyedia secret baru yang Anda buat di langkah sebelumnya. - OLD_SPC_NAME: Tetapkan
spec.cassandra.oldSecretProviderClass
ke nama SPC yang saat ini digunakan olehApigeeDatastore
.
- ROTATION_PROCESS_NAME: Nama unik untuk tugas rotasi. Anda harus menetapkan
-
Picu tugas prapemeriksaan rotasi dengan menerapkan file
rotation.yaml
.kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml
-
Periksa status tugas untuk memverifikasi kapan tugas prapemeriksaan selesai.
kubectl -n APIGEE_NAMESPACE get job sr-(rotationId)-(rotate|rollback|cleanup)-job
-
Setelah tugas prapemeriksaan rotasi selesai, ubah nilai
metadata.name
dan tetapkanspec.precheck
kefalse
. Terapkan file lagi untuk melakukan rotasi.kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml
-
Setelah tugas rotasi selesai dan Anda memvalidasi bahwa traffic masih mengalir dengan benar, bersihkan prosesnya dengan dua langkah berikut:
-
Perbarui nilai
metadata.name
dan tetapkanspec.cassandra.jobType
keCLEANUP
. -
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 untuk memastikan pemulihan dapat dilakukan ke kredensial pasca-rotasi.
- 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 region pertama sebelum memulai region berikutnya.
-
Buat resource Kubernetes
SecretProviderClass
baru di namespaceAPIGEE_NAMESPACE
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
SecretRotation
baru 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 menetapkan
metadata.name
ke nilai unik untuk tugas prapemeriksaan rotasi dan lagi untuk tugas rotasi. Misalnya,sr-1-precheck
diikuti dengansr-1
. - ROTATION_ID: Tetapkan
spec.rotationId
ke ID kustom, misalnyarotation-1-precheck
. - NEW_SPC_NAME: Tetapkan
spec.cassandra.newSecretProviderClass
ke nama class penyedia secret baru yang Anda buat di langkah sebelumnya. - OLD_SPC_NAME: Tetapkan
spec.cassandra.oldSecretProviderClass
ke nama SPC yang saat ini digunakan olehApigeeDatastore
.
- ROTATION_PROCESS_NAME: Nama unik untuk tugas rotasi. Anda harus menetapkan
-
Picu tugas prapemeriksaan rotasi dengan menerapkan file
rotation.yaml
.kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml
-
Periksa status tugas untuk memverifikasi kapan tugas prapemeriksaan selesai.
kubectl -n APIGEE_NAMESPACE get job sr-(rotationId)-(rotate|rollback|cleanup)-job
-
Setelah tugas prapemeriksaan rotasi selesai:
- Ubah nilai
metadata.name
, misalnya darisr-1-precheck
menjadisr-1
. - Tetapkan
spec.precheck
kefalse
untuk menonaktifkan prapemeriksaan dan melakukan rotasi. - Tetapkan
spec.rotationId
ke ID baru, misalnyarotation-1
.
- Ubah nilai
-
Terapkan file lagi untuk melakukan rotasi.
kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml
-
Periksa status
SecretRotation
dan tunggu hingga menjadicomplete
.kubectl -n APIGEE_NAMESPACE get sr SR_NAME
-
Buat resource Kubernetes
-
Di setiap wilayah berikutnya, selesaikan langkah-langkah berikut:
- Buat resource Kubernetes
SecretProviderClass
baru di namespace Apigee untuk kredensial Cassandra baru. Lihat Menyimpan secret Cassandra di Hashicorp Vault untuk mengetahui template yang akan digunakan. Definisi ini harus sama dengan langkah 1a. - Perbarui
overrides.yaml
dan tetapkancassandra.auth.secretProviderClass
agar cocok dengan nilaispec.cassandra.newSecretProviderClass
dalam filerotation.yaml
.cassandra: auth: secretProviderClass: NEW_SPC_NAME
- Terapkan diagram operator:
helm upgrade operator apigee-operator/ \ --namespace APIGEE_NAMESPACE \ --atomic \ -f OVERRIDES_FILE
-
ReplicaSet
baru akan dibuat. Pastikan pod pengontrol-pengelola 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.newSecretProviderClass
dirotation.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 berstatus dirilis. Tunggu hingga datastore selesai dirilis dan dalam status berjalan.
kubectl -n APIGEE_NAMESPACE get apigeedatastore DATASTORE_NAME
DATASTORE_NAME adalah
default
di sebagian besar penginstalan. - Pastikan 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.newSecretProviderClass
dirotation.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 dirilis dan kembali ke status berjalan.
kubectl -n APIGEE_NAMESPACE get apigeeorg ORG_NAME
kubectl -n APIGEE_NAMESPACE get apigeeenv ENV_NAME
- Pastikan 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_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}'
Hasilnya harus cocok dengan nilai yang Anda tetapkan untuk
spec.cassandra.newSecretProviderClass
dirotation.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 region dan memvalidasi bahwa traffic masih mengalir dengan benar, bersihkan proses di region pertama dengan dua langkah berikut:
-
Di region pertama, perbarui nilai
metadata.name
dan tetapkanspec.cassandra.jobType
keCLEANUP
. -
Picu tugas pembersihan dengan menerapkan file.
kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml
- Periksa status tugas dan amati log tugas untuk memverifikasi kapan tugas pembersihan selesai.
Setelah tugas pembersihan selesai, proses rotasi selesai.
-
Di region pertama, perbarui nilai
- Cadangkan database Cassandra Anda. Pencadangan ini untuk memastikan pemulihan dapat dilakukan ke kredensial pasca-rotasi.
- Hapus kredensial, peran, dan kebijakan Cassandra lama dari Vault.
Me-roll back rotasi
Untuk multi-region, lakukan rollback di setiap region.
-
Buat resource kustom SecretRotation baru menggunakan template berikut:
# rollback-rotation.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: oldSecretProviderClass: OLD_SPC_NAME # Must match the previous oldSecretProviderClass. newSecretProviderClass: NEW_SPC_NAME # Must match the previous newSecretProviderClass. jobType: ROLLBACK
Dengan keterangan:
- ROLLBACK_NAME: Nama untuk tugas rollback, misalnya:
sr-1-rollback
. - APIGEE_NAMESPACE: namespace Apigee Anda.
- APIGEE_ORG: ID organisasi Apigee Anda.
- ROTATION_ID: ID rotasi saat ini yang Anda rollback, misalnya:
rot-1
. - TIMEOUT_MINUTES: Opsional. Mengganti nilai default (480m == 8 jam). <=0 berarti waktu tunggu tak terbatas.
- OLD_SPC_NAME: Nama ini harus cocok dengan nama secret untuk
oldSecretProviderClass:
dalam file YAML rotasi yang Anda gunakan dalam prosedur Penyiapan satu region atau Penyiapan multi-region. - NEW_SPC_NAME: ini harus cocok dengan nama secret untuk
newSecretProviderClass:
dalam file YAML rotasi yang Anda gunakan dalam prosedur Penyiapan satu region atau Penyiapan multi-region.
- ROLLBACK_NAME: Nama untuk tugas rollback, misalnya:
-
Terapkan rollback:
kubectl -n APIGEE_NAMESPACE apply -f ROLLBACK_YAML_FILE
-
Periksa status tugas dan tunggu hingga selesai.
kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
- Setelah rollback selesai, pastikan traffic masih mengalir dengan benar.
- Untuk penginstalan multi-region, saat traffic mengalir dengan benar, ulangi proses rollback di setiap region.
-
Setelah Anda menyelesaikan rollback dan memverifikasi bahwa traffic masih mengalir dengan benar di semua region, mulai proses pembersihan.
Buat perubahan berikut dalam file YAML rotasi:
- Ubah
metadata.name
menjadi nama yang menunjukkan bahwa ini adalah tugas pembersihan, misalnya:sr-1-cleanup-rollback
. - Ubah
spec.cassandra.jobType
menjadiCLEANUP_ROLLBACK
.
- Ubah
-
Terapkan file untuk memicu tugas pembersihan:
kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
- Untuk penginstalan multi-region, ulangi proses pembersihan di setiap region.