Merotasi kredensial Cassandra di secret Kubernetes

Merotasi secret Cassandra di secret Kubernetes

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

Prosedur ini akan memungkinkan Anda merotasi kredensial Cassandra yang digunakan untuk layanan Apigee Hybrid produksi tanpa menyebabkan periode nonaktif dengan mengotomatiskan dan memicu tiga tugas:

  • Rotasi kredensial pengguna
  • Rollback rotasi
  • Pembersihan kredensial lama dan baru

Memutar secret Cassandra di secret Kubernetes

Ada enam pasangan nama pengguna-sandi kredensial Cassandra yang dapat Anda putar:

  • default (khusus rotasi sandi)
  • admin_user
  • ddl_user
  • dml_user
  • jmxuser
  • apigee

Bersiap untuk rotasi kredensial

Untuk melakukan langkah-langkah ini, Anda harus memiliki izin untuk menjalankan kubectl apply -f dalam cluster.

  1. Cadangkan database Cassandra. Pencadangan ini untuk memastikan pemulihan dapat dilakukan ke kredensial yang telah dirotasi sebelumnya. Lihat Ringkasan pencadangan Cassandra.
  2. Pastikan cluster dalam status yang baik, semua resource Apigee berjalan, dan tidak ada perubahan status yang tertunda.

Rotasi kredensial region tunggal

  1. Buat secret Kubernetes baru di namespace Apigee yang menyimpan kredensial pengguna Cassandra yang ingin Anda putar, dengan mengikuti Menetapkan nama pengguna dan sandi di secret Kubernetes.
  2. Lakukan prapemeriksaan rotasi.
    1. Buat resource kustom SecretRotation baru menggunakan template berikut:
      # rotation-k8s-secrets.yaml
      
      apiVersion: apigee.cloud.google.com/v1alpha1
      kind: SecretRotation
      metadata:
        name: ROTATION_NAME
        namespace: APIGEE_NAMESPACE
      spec:
        organizationId: APIGEE_ORG
        rotationId: ROTATION_ID
        timeoutMinutes: TIMEOUT_MINUTES # optional. 480 recommended.
        precheck: true
        cassandra:
          oldSecretRef: OLD_SECRET_REF
          newSecretRef: NEW_SECRET_REF
          jobType: ROTATE
      

      Dengan keterangan:

      • ROTATION_NAME: Nama untuk tugas rotasi, misalnya: sr-1-precheck.
      • APIGEE_NAMESPACE: namespace Apigee Anda.
      • APIGEE_ORG: ID organisasi Apigee Anda.
      • ROTATION_ID: ID kustom, misalnya: rot-1-precheck.
      • TIMEOUT_MINUTES: Opsional. Mengganti default (480m == 8hr). <=0 berarti waktu tunggu tak terbatas.
      • OLD_SECRET_REF: Nama secret yang saat ini digunakan oleh apigeedatastore. Anda dapat menemukannya menggunakan perintah berikut:
        kubectl -n APIGEE_NAMESPACE get apigeedatastore default -o jsonpath='{.spec.credentialRef}'
        
      • NEW_SECRET_REF: Nama secret yang dibuat di langkah sebelumnya.
    2. Picu tugas prapemeriksaan rotasi dengan menerapkan file YAML rotasi:
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
    3. Periksa status tugas dan tunggu hingga selesai.
      kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
      

      Setelah tugas selesai, output akan berisi:

      Status:
        Message:  rotation complete
        State:    complete
      kubectl -n APIGEE_NAMESPACE logs sr-ROTATION_ID-rotate-job-HASH
      
  3. Setelah tugas prapemeriksaan rotasi selesai, lakukan rotasi:
    1. Lakukan perubahan berikut dalam file YAML rotasi:
      • Ubah metadata.name menjadi nama yang menunjukkan bahwa ini bukan prapemeriksaan, misalnya: sr-1.
      • Tetapkan spec.precheck ke false.
      • Ubah spec.rotationId menjadi ID baru, misalnya: rot-1.
    2. Terapkan file lagi untuk melakukan rotasi.
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
  4. Setelah tugas rotasi selesai, validasikan bahwa traffic masih mengalir dengan benar.
  5. Setelah memvalidasi traffic, lakukan pembersihan secret lama.
    1. Lakukan perubahan berikut dalam file YAML rotasi:
      • Ubah metadata.name menjadi nama yang menunjukkan bahwa ini adalah tugas pembersihan, misalnya: sr-1-cleanup.
      • Tetapkan spec.cassandra.jobType ke CLEANUP.
    2. Terapkan file lagi untuk melakukan pembersihan.
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
    3. Periksa status tugas dan tunggu hingga selesai.
      kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
      

      Setelah tugas pembersihan selesai, proses rotasi selesai.

  6. Buat cadangan database Cassandra. Pencadangan ini untuk memastikan pemulihan dapat dilakukan ke kredensial pasca-rotasi.
  7. Hapus secret kredensial Cassandra lama.

Rotasi kredensial multi-region

  1. di setiap region, buat secret Kubernetes baru di namespace Apigee Anda yang menyimpan kredensial pengguna Cassandra yang ingin dirotasi, dengan mengikuti Menetapkan nama pengguna dan sandi di secret Kubernetes.

    Kredensial harus sama di setiap region.

  2. Lakukan prapemeriksaan rotasi.
    1. Buat resource kustom SecretRotation baru menggunakan template berikut:
      # rotation-k8s-secrets.yaml
      
      apiVersion: apigee.cloud.google.com/v1alpha1
      kind: SecretRotation
      metadata:
        name: ROTATION_NAME
        namespace: APIGEE_NAMESPACE
      spec:
        organizationId: APIGEE_ORG
        rotationId: ROTATION_ID
        timeoutMinutes: TIMEOUT_MINUTES # optional. 480 recommended.
        precheck: true
        cassandra:
          oldSecretRef: OLD_SECRET_REF
          newSecretRef: NEW_SECRET_REF
          jobType: ROTATE
      

      Dengan keterangan:

      • ROTATION_NAME: Nama untuk tugas rotasi, misalnya: sr-1-precheck.
      • APIGEE_NAMESPACE: namespace Apigee Anda.
      • APIGEE_ORG: ID organisasi Apigee Anda.
      • ROTATION_ID: ID kustom, misalnya: rot-1-precheck.
      • TIMEOUT_MINUTES: Opsional. Mengganti default (480m == 8hr). <=0 berarti waktu tunggu tak terbatas.
      • OLD_SECRET_REF: Nama secret yang saat ini digunakan oleh apigeedatastore. Anda dapat menemukannya menggunakan perintah berikut:
        kubectl -n APIGEE_NAMESPACE get apigeedatastore default -o jsonpath='{.spec.credentialRef}'
        
      • NEW_SECRET_REF: Nama secret yang dibuat di langkah sebelumnya.
    2. Di region pertama, picu tugas pra-pemeriksaan rotasi dengan menerapkan file YAML rotasi:
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
    3. Periksa status tugas dan tunggu hingga selesai.
      kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
      

      Setelah tugas selesai, output akan berisi:

      Status:
        Message:  rotation complete
        State:    complete
      kubectl -n APIGEE_NAMESPACE logs sr-ROTATION_ID-rotate-job-HASH
      
  3. Setelah tugas pra-pemeriksaan rotasi selesai, lakukan rotasi di region yang sama:
    1. Lakukan perubahan berikut dalam file YAML rotasi:
      • Ubah metadata.name menjadi nama yang menunjukkan bahwa ini bukan prapemeriksaan, misalnya: sr-1.
      • Tetapkan spec.precheck ke false.
      • Ubah spec.rotationId menjadi ID baru, misalnya: rot-1.
    2. Terapkan file lagi untuk melakukan rotasi.
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
  4. Setelah tugas rotasi selesai, validasikan bahwa traffic masih mengalir dengan benar.
  5. Ulangi langkah rotasi untuk wilayah lainnya.
  6. Setelah memvalidasi traffic, lakukan pembersihan secret lama. Anda hanya perlu melakukan pembersihan di satu region. Tidak masalah region mana yang Anda pilih.
    1. Lakukan perubahan berikut dalam file YAML rotasi:
      • Ubah metadata.name menjadi nama yang menunjukkan bahwa ini adalah tugas pembersihan, misalnya: sr-1-cleanup.
      • Tetapkan spec.cassandra.jobType ke CLEANUP.
    2. Terapkan file lagi untuk melakukan pembersihan.
      kubectl -n APIGEE_NAMESPACE apply -f ROTATION_YAML_FILE
      
    3. Periksa status tugas dan tunggu hingga selesai.
      kubectl -n APIGEE_NAMESPACE describe sr ROTATION_NAME
      

      Setelah tugas pembersihan selesai, proses rotasi selesai.

  7. Buat cadangan database Cassandra. Pencadangan ini untuk memastikan pemulihan dapat dilakukan ke kredensial pasca-rotasi.
  8. Hapus secret kredensial Cassandra lama.

Me-roll back rotasi

Lakukan langkah-langkah berikut di setiap region.

  1. Buat resource kustom SecretRotation baru menggunakan template berikut:
    # rollback-k8s-secrets.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:
        oldSecretRef: OLD_SECRET_REF # Must match the previous oldSecretRef.
        newSecretRef: NEW_SECRET_REF # Must match the previous newSecretRef.
        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 default (480m == 8hr). <=0 berarti waktu tunggu tak terbatas.
    • OLD_SECRET_REF: Nama ini harus cocok dengan nama secret untuk oldSecretRef: dalam file YAML rotasi yang Anda gunakan dalam prosedur Rotasi satu region atau Rotasi multi-region.
    • NEW_SECRET_REF: ini harus cocok dengan nama secret untuk newSecretRef: dalam file YAML rotasi yang Anda gunakan dalam prosedur Rotasi satu region atau Rotasi 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 mengalir dengan benar.
  5. Jika traffic mengalir dengan benar, ulangi proses rollback di setiap region yang tersisa.
  6. Setelah Anda menyelesaikan rollback dan memverifikasi bahwa traffic masih mengalir dengan benar, mulai proses pembersihan. Anda hanya perlu melakukan pembersihan di satu region. Tidak masalah region mana yang Anda pilih.

    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