Merotasi kredensial penyimpanan objek

Penyimpanan objek perangkat dengan air gap Google Distributed Cloud (GDC) disediakan oleh OTS (ONTAP Select). OTS memiliki sistem pengelolaan pengguna penyimpanan objeknya sendiri. Setiap kredensial pengguna penyimpanan objek OTS disimpan sebagai secret di cluster.

Dokumen ini menjelaskan langkah-langkah untuk merotasi kredensial pengguna penyimpanan objek OTS. Ganti kredensial pengguna penyimpanan objek dalam situasi berikut:

  • rotasi kunci yang dijadwalkan secara rutin untuk merotasi semua kunci pengguna.
  • mengurangi eksposur utama. Anda harus mengganti kunci pengguna yang terekspos sesegera mungkin.

Sebelum memulai

Selesaikan langkah-langkah berikut:

  1. Pastikan Anda memenuhi prasyarat laptop.
  2. Pastikan Anda dapat login ke cluster OTS dan menjalankan perintah CLI vserver object-store-server.
  3. Pastikan Anda dapat login sebagai administrator ke cluster infrastruktur dan cluster pengelolaan menggunakan kubectl.

Menerjemahkan UID

Setiap pengguna penyimpanan objek memiliki kunci akses dan kunci rahasia yang disimpan sebagai secret Kubernetes dan digunakan oleh workload Kubernetes untuk mengakses penyimpanan objek backend. Mengganti kunci pengguna mencakup memperbarui semua rahasia.

Anda bisa mendapatkan daftar pengguna penyimpanan objek dengan login ke salah satu dari tiga node menggunakan:

vserver object-store-server user show

Outputnya adalah daftar UID dan akan terlihat seperti:

[
    "root",
    "k8ssa_gpc-system_inventory-export-images",
    "k8ssa_gpc-system_inventory-export-hardware",
    "k8su_test-user@example.com"
]

Ada tiga jenis pengguna:

Pengguna penyimpanan objek
UID Jenis pengguna Nama rahasia Namespace rahasia
root Administrator sistem objectstorage-tenant-bucket-controller-standard-system-s3-sa gpc-system
objectstorage-tenant-bucket-controller-standard-user-s3-sa
objectstorage-tenant-bucket-controller-nearline-user-s3-sa
k8ssa_&ltnamespace>_&ltsa> Akun layanan Kubernetes object-storage-key-std-sa-&ltencoded-sa> &ltnamespace>
k8su_&ltusername> Pengguna Kubernetes object-storage-key-std-user-&ltencoded-username> object-storage-access-keys

Pengguna root memiliki tiga rahasia yang identik, yang mencerminkan struktur Pusat Data, yang mencakup beberapa kelas penyimpanan dan kategori tenant. Sebaliknya, Appliance hanya memiliki satu tingkat penyimpanan objek. Ketiga secret yang terkait dengan pengguna root harus diubah secara bersamaan.

Identifikasi pengguna (UID), tidak termasuk pengguna root, harus mematuhi format k8ssa_<namespace>_<sa> atau k8su_<username>. Dapatkan <encoded-sa> atau <encoded-username>:

echo -n 'UID_SUFFIX' | shasum -a 256 | cut -d " " -f 1 | xxd -r -p | base32 | awk '{print tolower($0)}' | sed 's/=*$//g'

Ganti UID_SUFFIX dengan <sa> di UID, dan Anda akan mendapatkan <encoded-sa>.

Ganti UID_SUFFIX dengan <username> di UID, dan Anda akan mendapatkan <encoded-username>.

Merotasi kunci pengguna

  1. Login ke cluster OTS.

  2. Mendapatkan daftar UID pengguna penyimpanan objek.

    vserver object-store-server user show
    

    Hasilnya adalah daftar UID. Contoh dapat ditemukan di Terjemahkan UID. Ulangi langkah-langkah berikut untuk setiap UID dalam daftar.

  3. Dapatkan kunci akses lama dan kunci rahasia untuk pengguna target.

    set -privilege advanced
    vserver object-store-server user show -user UID
    

    Ganti UID dengan UID pengguna target.

  4. Buat kunci akses dan kunci rahasia baru untuk pengguna target di penyimpanan objek. Kunci lama dan baru akan ada bersamaan setelah langkah ini, dan keduanya dapat digunakan untuk akses.

    vserver object-store-server user regenerate-keys -vserver root-admin -user UID
    
  5. Perbarui secret Kubernetes dengan kunci akses dan kunci rahasia baru. Anda hanya perlu memperbarui secret di cluster infra root atau cluster pengelolaan, dan secret akan di-propagasikan ke cluster lain jika diperlukan.

    kubectl --kubeconfig KUBECONFIG patch secret -n SECRET_NAMESPACE SECRET_NAME --type='json' -p='[{"op": "replace", "path": "/data/access-key-id", "value": "'"$(echo -n "ACCESS_KEY" | base64)"'"}, {"op": "replace", "path": "/data/secret-access-key", "value": "'"$(echo -n "ACCESS_KEY" | base64)"'"}]'
    

    Ganti kode berikut:

    • KUBECONFIG: jalur ke kubeconfig. Server API harus berupa server API bidang kontrol untuk pengguna root; jika tidak, server API harus berupa server API pengelolaan.
    • SECRET_NAME: nama rahasia untuk pengguna, yang dapat berasal dari bagian UID Terjemahan. Jika pengguna memiliki beberapa secret Kubernetes (yaitu, root user), ganti dengan setiap nama rahasia dan jalankan perintah.
    • SECRET_NAMESPACE: namespace rahasia untuk pengguna, yang dapat diperoleh dari bagian UID Terjemahan.
    • ACCESS_KEY: kunci akses baru yang dibuat pada langkah sebelumnya.
    • SECRET_KEY: kunci rahasia baru yang dibuat pada langkah sebelumnya.
  6. Workload yang menggunakan secret harus diimplementasikan untuk diperbarui secara otomatis. Jika tidak, Anda harus memulai ulang beban kerja untuk mencerminkan perubahan pada secret.

    Misalnya, untuk pengguna root, Anda perlu memulai ulang workload berikut di cluster infra:

    kubectl --kubeconfig KUBECONFIG rollout restart deployment obj-bucket-cm-backend-controller -n obj-system
    

Validasi

Ikuti langkah-langkah membuat bucket dan mengupload dan mendownload objek Object Storage untuk membuat bucket baru dan memberikan akses menggunakan RBAC. Rotasi kunci penyimpanan objek selesai jika bucket berhasil dibuat dan subjek memiliki izin yang diperlukan untuk mengaksesnya.