Merotasi kredensial Cassandra di Hashicorp Vault

Ringkasan

Prosedur ini menjelaskan cara merotasi kredensial Cassandra dalam Hashicorp Vault. Untuk merotasi kredensial di secret Kubernetes di cluster Anda, lihat Merotasi kredensial Cassandra di secret Kubernetes.

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 pra-rotasi.
  • Pastikan cluster dalam kondisi baik (yaitu semua resource Apigee berjalan, tidak ada perubahan status yang menunggu persetujuan).

Penyiapan satu wilayah

  1. Buat resource Kubernetes SecretProviderClass baru 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.
  2. 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 pra-pemeriksaan rotasi dan lagi untuk tugas rotasi. Misalnya, sr-1-precheck diikuti dengan sr-1.
    • ROTATION_ID: Tetapkan spec.rotationId ke ID kustom, misalnya rotation-1-precheck.
    • NEW_SPC_NAME: Setel 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 oleh ApigeeDatastore.
  3. Picu tugas pra-pemeriksaan rotasi dengan menerapkan file rotation.yaml.
    kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml
  4. Periksa status tugas untuk memverifikasi kapan tugas pra-pemeriksaan selesai.
    kubectl -n APIGEE_NAMESPACE get job sr-(rotationId)-(rotate|rollback|cleanup)-job
  5. Setelah tugas prapengecekan rotasi selesai, ubah nilai metadata.name dan tetapkan spec.precheck ke false. Terapkan file lagi untuk melakukan rotasi.
    kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml
  6. Setelah tugas rotasi selesai dan Anda telah memvalidasi bahwa traffic masih mengalir dengan benar, bersihkan proses dengan dua langkah berikut:
    1. Perbarui nilai metadata.name dan tetapkan spec.cassandra.jobType ke CLEANUP.
    2. Picu tugas pembersihan dengan menerapkan file.
      kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml

    Setelah tugas pembersihan selesai, proses rotasi selesai.

  7. Perbarui file penggantian Anda dan tetapkan cassandra.auth.secretProviderClass ke class penyedia rahasia baru (newSecretProviderClass).
    cassandra:
      auth:
        secretProviderClass: NEW_SPC_NAME
  8. Cadangkan database Cassandra Anda. Pencadangan ini dilakukan untuk memastikan pemulihan dapat dilakukan ke kredensial setelah dirotasi.
  9. 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.

  1. Selesaikan langkah-langkah berikut di wilayah pertama sebelum memulai wilayah berikutnya.
    1. Buat resource Kubernetes SecretProviderClass baru di namespace APIGEE_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.
    2. 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 pra-pemeriksaan rotasi dan lagi untuk tugas rotasi. Misalnya, sr-1-precheck diikuti dengan sr-1.
      • ROTATION_ID: Tetapkan spec.rotationId ke ID kustom, misalnya rotation-1-precheck.
      • NEW_SPC_NAME: Setel 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 oleh ApigeeDatastore.
    3. Picu tugas pra-pemeriksaan rotasi dengan menerapkan file rotation.yaml.
      kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml
    4. Periksa status tugas untuk memverifikasi kapan tugas pra-pemeriksaan selesai.
      kubectl -n APIGEE_NAMESPACE get job sr-(rotationId)-(rotate|rollback|cleanup)-job
    5. Setelah tugas prapengecekan rotasi selesai:
      • Ubah nilai metadata.name, misalnya dari sr-1-precheck menjadi sr-1.
      • Setel spec.precheck ke false untuk menonaktifkan pra-pemeriksaan dan melakukan rotasi.
      • Tetapkan spec.rotationId ke ID baru, misalnya rotation-1.
    6. Terapkan file lagi untuk melakukan rotasi.
      kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml
    7. Periksa status SecretRotation dan tunggu hingga statusnya complete.
      kubectl -n APIGEE_NAMESPACE get sr SR_NAME
  2. Di setiap wilayah berikutnya, selesaikan langkah-langkah berikut:
    1. Buat resource Kubernetes SecretProviderClass baru 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.
    2. Perbarui overrides.yaml dan tetapkan cassandra.auth.secretProviderClass agar cocok dengan nilai spec.cassandra.newSecretProviderClass dalam file rotation.yaml.
      cassandra:
        auth:
          secretProviderClass: NEW_SPC_NAME
    3. Terapkan diagram operator:
      helm upgrade operator apigee-operator/ \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f OVERRIDES_FILE
    4. ReplicaSet baru 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.newSecretProviderClass di rotation.yaml, misalnya:

      kubectl -n apigee get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'
      
      my-new-spc
    5. Terapkan diagram penyimpanan data:
      helm upgrade datastore apigee-datastore/ \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f OVERRIDES_FILE
    6. 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 default di sebagian besar penginstalan.

    7. 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.newSecretProviderClass di rotation.yaml, misalnya:

      kubectl -n apigee get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'
      
      my-new-spc
    8. 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
    9. 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_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 di rotation.yaml, misalnya:

      kubectl -n apigee get pods $POD -o jsonpath='{.spec.volumes[?(@.name=="apigee-external-secrets")].csi.volumeAttributes.secretProviderClass}'
      
      my-new-spc
  3. Setelah menyelesaikan langkah-langkah di setiap wilayah dan memvalidasi bahwa traffic masih mengalir dengan benar, bersihkan proses di wilayah pertama dengan dua langkah berikut:
    1. Di wilayah pertama, perbarui nilai metadata.name dan tetapkan spec.cassandra.jobType ke CLEANUP.
    2. Picu tugas pembersihan dengan menerapkan file.
      kubectl -n APIGEE_NAMESPACE apply -f rotation.yaml
    3. Periksa status tugas dan lihat log tugas untuk memverifikasi kapan tugas pembersihan selesai.

    Setelah tugas pembersihan selesai, proses rotasi selesai.

  4. Perbarui file penggantian Anda dan tetapkan cassandra.auth.secretProviderClass ke class penyedia rahasia baru (newSecretProviderClass).
    cassandra:
      auth:
        secretProviderClass: NEW_SPC_NAME
  5. Cadangkan database Cassandra Anda. Pencadangan ini dilakukan untuk memastikan pemulihan dapat dilakukan ke kredensial setelah dirotasi.
  6. Hapus kredensial, peran, dan kebijakan Cassandra lama dari Vault.

Me-roll back rotasi

Untuk multi-region, lakukan rollback di setiap region.

  1. 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:

    • 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 batalkan, misalnya: rot-1.
    • TIMEOUT_MINUTES: Opsional. Mengganti nilai default (480m == 8 jam). <=0 berarti waktu tunggu tak terbatas.
    • OLD_SPC_NAME: Ini harus cocok dengan nama rahasia untuk oldSecretProviderClass: dalam file YAML rotasi yang Anda gunakan dalam prosedur Penyiapan satu region atau Penyiapan multi-region.
    • NEW_SPC_NAME: harus cocok dengan nama rahasia untuk newSecretProviderClass: dalam file YAML rotasi yang Anda gunakan dalam prosedur Penyiapan satu region atau Penyiapan multi-region.
  2. Terapkan rollback:
    kubectl -n APIGEE_NAMESPACE apply -f ROLLBACK_YAML_FILE
    
  3. Periksa status tugas dan tunggu hingga selesai.
    kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
    
  4. Setelah rollback selesai, pastikan traffic masih berjalan dengan benar.
  5. Untuk penginstalan multi-region, saat traffic mengalir dengan benar, ulangi proses rollback di setiap region.
  6. 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 menjadi CLEANUP_ROLLBACK.
  7. Terapkan file untuk memicu tugas pembersihan:
    kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
    
  8. Periksa status tugas dan tunggu hingga selesai.
    kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
    

    Setelah tugas pembersihan selesai, proses rollback selesai.

  9. Perbarui file penggantian Anda dan tetapkan cassandra.auth.secretProviderClass ke class penyedia secret lama (oldSecretProviderClass).
    cassandra:
      auth:
        secretProviderClass: OLD_SPC_NAME