Menggunakan add-on Secret Manager dengan Google Kubernetes Engine

Integrasi antara Secret Manager dan Google Kubernetes Engine (GKE) memungkinkan Anda menyimpan data sensitif seperti sandi dan sertifikat yang digunakan oleh cluster GKE sebagai secret di Secret Manager.

Halaman ini menjelaskan cara menggunakan add-on Secret Manager untuk mengakses secret yang disimpan di Secret Manager sebagai volume yang di-mount di Pod Kubernetes.

Proses ini melibatkan langkah-langkah berikut:

  1. Aktifkan add-on Secret Manager di cluster GKE baru atau yang sudah ada.
  2. Mengonfigurasi aplikasi untuk melakukan autentikasi ke Secret Manager API.
  3. Tentukan secret mana yang akan dipasang ke Pod Kubernetes menggunakan file YAML SecretProviderClass. Add-on Secret Manager mendukung secret global dan regional.
  4. Buat volume tempat secret akan dipasang. Setelah volume terpasang, aplikasi dalam container dapat mengakses data dalam sistem file container.

Add-on Secret Manager berasal dari Driver CSI Kubernetes Secret Store open source dan penyedia Google Secret Manager. Jika Anda menggunakan Driver CSI Secrets Store open source untuk mengakses secret, Anda dapat bermigrasi ke add-on Secret Manager. Untuk mengetahui informasinya, lihat Bermigrasi dari Driver CSI Secrets Store yang ada.

Manfaat

Add-on Secret Manager memberikan manfaat berikut:

  • Anda dapat menggunakan solusi yang terkelola sepenuhnya dan didukung untuk mengakses rahasia Secret Manager dari dalam GKE tanpa overhead operasional.
  • Anda tidak perlu menulis kode kustom untuk mengakses secret yang disimpan di Secret Manager.
  • Anda dapat menyimpan dan mengelola semua secret secara terpusat di Secret Manager dan mengakses secret secara selektif dari pod GKE menggunakan add-on Secret Manager. Dengan melakukannya, Anda dapat menggunakan fitur yang ditawarkan oleh Secret Manager seperti enkripsi CMEK, kontrol akses terperinci, rotasi terkelola, pengelolaan siklus proses, dan log audit, serta menggunakan fitur Kubernetes seperti meneruskan secret ke container dalam bentuk volume yang di-mount.
  • Add-on Secret Manager didukung di cluster Standard dan cluster Autopilot.
  • Add-on Secret Manager mendukung node yang menggunakan image node Container-Optimized OS atau Ubuntu.

Batasan

Add-on Secret Manager memiliki batasan berikut:

  • Add-on Secret Manager tidak mendukung fitur berikut yang tersedia di Driver CSI Secrets Store open source:

  • Add-on Secret Manager tidak mendukung node Windows Server.

Sebelum memulai

  • Enable the Secret Manager and Google Kubernetes Engine APIs.

    Enable the APIs

  • Jika ingin menggunakan Google Cloud CLI untuk tugas ini, instal lalu lakukan inisialisasi gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan perintah gcloud components update.

    Anda tidak dapat menyiapkan add-on Secret Manager secara manual menggunakan Google Cloud SDK atau konsol Google Cloud .

  • Pastikan cluster Anda menjalankan GKE versi 1.27.14-gke.1042001 atau yang lebih baru dengan image node Linux.

  • Jika Anda menggunakan cluster GKE Standard, pastikan cluster Anda telah mengaktifkan Workload Identity Federation untuk GKE. Workload Identity Federation for GKE diaktifkan secara default di cluster Autopilot. Pod Kubernetes menggunakan Workload Identity Federation untuk GKE guna mengautentikasi ke Secret Manager API.

Mengaktifkan add-on Secret Manager

Anda dapat mengaktifkan add-on Secret Manager di cluster Standard dan cluster Autopilot.

Mengaktifkan add-on Secret Manager di cluster GKE baru

Untuk mengaktifkan add-on Secret Manager saat pembuatan cluster, lakukan hal berikut:

Konsol

  1. Di konsol Google Cloud , buka halaman Google Kubernetes Engine.

    Buka Google Kubernetes Engine

  2. Klik Create .

  3. Pada dialog Create cluster, klik Configure.

  4. Di menu navigasi, di bagian Cluster, klik Security.

  5. Centang kotak Enable Secret Manager.

  6. Pilih kotak centang Enable Workload Identity.

  7. Lanjutkan konfigurasi cluster, lalu klik Create.

gcloud

{ Standard cluster}

Untuk mengaktifkan add-on Secret Manager di cluster Standard baru, jalankan perintah berikut:

Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:

  • CLUSTER_NAME: nama cluster Anda.
  • LOCATION: region Compute Engine untuk cluster, seperti us-central1.
  • VERSION: versi GKE spesifik yang ingin Anda gunakan. Pastikan cluster Anda menjalankan GKE versi 1.27.14-gke.1042001 atau yang lebih baru. Jika saluran rilis default tidak menyertakan versi ini, gunakan tanda --release-channel untuk memilih saluran rilis yang menyertakannya.
  • PROJECT_ID: ID Google Cloud project Anda.

Jalankan perintah berikut:

Linux, macOS, atau Cloud Shell

gcloud container clusters create CLUSTER_NAME \
    --enable-secret-manager \
    --location=LOCATION \
    --cluster-version=VERSION \
    --workload-pool=PROJECT_ID.svc.id.goog

Windows (PowerShell)

gcloud container clusters create CLUSTER_NAME `
    --enable-secret-manager `
    --location=LOCATION `
    --cluster-version=VERSION `
    --workload-pool=PROJECT_ID.svc.id.goog

Windows (cmd.exe)

gcloud container clusters create CLUSTER_NAME ^
    --enable-secret-manager ^
    --location=LOCATION ^
    --cluster-version=VERSION ^
    --workload-pool=PROJECT_ID.svc.id.goog

{ Autopilot cluster}

Untuk mengaktifkan add-on Secret Manager di cluster Autopilot baru, jalankan perintah berikut:

Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:

  • CLUSTER_NAME: nama cluster Anda.
  • VERSION: versi GKE spesifik yang ingin Anda gunakan. Pastikan cluster Anda menjalankan GKE versi 1.27.14-gke.1042001 atau yang lebih baru. Untuk menetapkan versi tertentu, lihat Menetapkan versi dan saluran rilis cluster Autopilot baru.
  • LOCATION: region Compute Engine untuk cluster, seperti us-central1.

Jalankan perintah berikut:

Linux, macOS, atau Cloud Shell

gcloud container clusters create-auto CLUSTER_NAME \
    --enable-secret-manager \
    --cluster-version=VERSION \
    --location=LOCATION

Windows (PowerShell)

gcloud container clusters create-auto CLUSTER_NAME `
    --enable-secret-manager `
    --cluster-version=VERSION `
    --location=LOCATION

Windows (cmd.exe)

gcloud container clusters create-auto CLUSTER_NAME ^
    --enable-secret-manager ^
    --cluster-version=VERSION ^
    --location=LOCATION

Setelah mengaktifkan add-on Secret Manager, Anda dapat menggunakan Driver CSI Secrets Store di volume Kubernetes menggunakan nama driver dan penyedia: secrets-store-gke.csi.k8s.io.

Mengaktifkan add-on Secret Manager di cluster GKE yang ada

Untuk mengaktifkan add-on Secret Manager di cluster yang ada, lakukan langkah-langkah berikut:

Konsol

  1. Di konsol Google Cloud , buka halaman Google Kubernetes Engine.

    Buka Google Kubernetes Engine

  2. Di daftar cluster, klik nama cluster yang ingin diubah.

  3. Di halaman detail cluster, di bagian Security, klik Secret Manager.

  4. Pada dialog Edit Secret Manager, centang kotak Aktifkan Secret Manager.

  5. Klik Simpan perubahan.

gcloud

Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:

  • CLUSTER_NAME: nama cluster Anda
  • LOCATION: region Compute Engine untuk cluster, seperti us-central1

Jalankan perintah berikut:

Linux, macOS, atau Cloud Shell

gcloud container clusters update CLUSTER_NAME \
    --enable-secret-manager \
    --location=LOCATION \

Windows (PowerShell)

gcloud container clusters update CLUSTER_NAME `
    --enable-secret-manager `
    --location=LOCATION `

Windows (cmd.exe)

gcloud container clusters update CLUSTER_NAME ^
    --enable-secret-manager ^
    --location=LOCATION ^

Mengonfigurasi rotasi secret otomatis

Anda dapat mengonfigurasi add-on Secret Manager untuk merotasi secret secara otomatis sehingga secret yang diupdate di Secret Manager setelah deployment pod awal akan otomatis dan secara berkala dikirim ke pod. Rotasi otomatis secret yang terpasang memungkinkan aplikasi menerima secret yang diupdate secara otomatis tanpa memerlukan mulai ulang atau intervensi manual. Fitur ini memastikan bahwa aplikasi selalu menggunakan secret terbaru.

Perhatikan hal-hal berikut terkait konfigurasi rotasi otomatis secret:

  • Rotasi otomatis secret adalah konfigurasi opsional.
  • Anda dapat mengonfigurasi fitur ini saat membuat cluster baru atau mengupdate cluster yang ada.
  • Rotasi otomatis rahasia didukung di GKE versi 1.32.2-gke.1059000 atau yang lebih baru.

Untuk mengonfigurasi rotasi otomatis secret, Anda harus mengaktifkan fitur enable-secret-manager-rotation dan mengonfigurasi interval rotasi dengan menetapkan secret-manager-rotation-interval.

Misalnya, untuk mengonfigurasi rotasi otomatis pada cluster GKE yang ada, gunakan perintah berikut:

  gcloud beta container clusters update CLUSTER_NAME \
      --enable-secret-manager \
      --location=LOCATION \
      --enable-secret-manager-rotation \
      --secret-manager-rotation-interval=ROTATION_INTERVAL

Ganti kode berikut:

  • CLUSTER_NAME: nama cluster
  • LOCATION: lokasi cluster Anda, seperti us-central1
  • ROTATION_INTERVAL: interval rotasi dalam detik. Interval rotasi default adalah 120 detik.

Memverifikasi penginstalan add-on Secret Manager

Untuk memverifikasi bahwa add-on Secret Manager diinstal di cluster Kubernetes, jalankan perintah berikut:

  gcloud container clusters describe CLUSTER_NAME --location LOCATION | grep secretManagerConfig -A 4

Ganti kode berikut:

  • CLUSTER_NAME: nama cluster
  • LOCATION: lokasi cluster Anda, seperti us-central1

Mengonfigurasi aplikasi untuk melakukan autentikasi ke Secret Manager API

Penyedia Google Secret Manager menggunakan workload identity Pod tempat secret di-mount saat melakukan autentikasi ke Secret Manager API. Agar aplikasi Anda dapat melakukan autentikasi ke Secret Manager API menggunakan Workload Identity Federation untuk GKE, ikuti langkah-langkah berikut:

  • Buat Kubernetes ServiceAccount baru atau gunakan Kubernetes ServiceAccount yang ada di namespace yang sama dengan Pod tempat Anda ingin memasang secret.

  • Buat kebijakan izin Identity and Access Management (IAM) untuk secret di Secret Manager.

Pod yang menggunakan ServiceAccount Kubernetes yang dikonfigurasi akan otomatis melakukan autentikasi sebagai ID entity utama IAM yang sesuai dengan ServiceAccount Kubernetes saat mengakses Secret Manager API.

Buat Akun Layanan Kubernetes baru

  1. Simpan manifes berikut sebagai service-account.yaml:

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: KSA_NAME
      namespace: NAMESPACE
    

    Ganti kode berikut:

    • KSA_NAME: nama ServiceAccount Kubernetes baru Anda
    • NAMESPACE: nama namespace Kubernetes untuk ServiceAccount
  2. Terapkan manifes:

    kubectl apply -f service-account.yaml
    
  3. Buat kebijakan izin IAM yang mereferensikan ServiceAccount Kubernetes baru dan berikan izin untuk mengakses secret:

    gcloud secrets add-iam-policy-binding SECRET_NAME \
        --role=roles/secretmanager.secretAccessor \
        --member=principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KSA_NAME
    

    Ganti kode berikut:

    • SECRET_NAME: nama secret di Secret Manager
    • PROJECT_NUMBER: Google Cloud nomor project numerik Anda
    • PROJECT_ID: project ID Google Cloud project yang berisi cluster GKE Anda
    • NAMESPACE: nama namespace Kubernetes untuk ServiceAccount
    • KSA_NAME: nama ServiceAccount Kubernetes yang ada

Menggunakan Akun Layanan Kubernetes yang ada

Buat kebijakan izinkan IAM yang mereferensikan ServiceAccount Kubernetes yang ada dan berikan izin untuk mengakses secret:

gcloud secrets add-iam-policy-binding SECRET_NAME \
    --role=roles/secretmanager.secretAccessor \
    --member=principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KSA_NAME

Ganti kode berikut:

  • SECRET_NAME: nama secret di Secret Manager
  • PROJECT_NUMBER: Google Cloud nomor project numerik Anda
  • PROJECT_ID: project ID Google Cloud project yang berisi cluster GKE Anda
  • NAMESPACE: nama namespace Kubernetes untuk ServiceAccount
  • KSA_NAME: nama ServiceAccount Kubernetes yang ada

Tentukan secret yang akan dipasang

Untuk menentukan rahasia mana yang akan dipasang sebagai file di Pod Kubernetes, buat manifes YAML SecretProviderClass dan cantumkan rahasia yang akan dipasang dan nama file yang akan digunakan untuk memasangnya. Ikuti langkah-langkah berikut:

  1. Simpan manifes berikut sebagai app-secrets.yaml:

    apiVersion: secrets-store.csi.x-k8s.io/v1
    kind: SecretProviderClass
    metadata:
      name: SECRET_PROVIDER_CLASS_NAME
    spec:
      provider: gke
      parameters:
        secrets: |
          - resourceName: "projects/PROJECT_ID/secrets/SECRET_NAME/versions/SECRET_VERSION"
            path: "FILENAME.txt"
    

    Ganti kode berikut:

    • SECRET_PROVIDER_CLASS_NAME: nama untuk objek SecretProviderClass Anda.
    • PROJECT_ID: project ID Anda.
    • SECRET_NAME: nama secret.
    • SECRET_VERSION: versi secret.
    • FILENAME.txt: nama file tempat nilai secret akan di-mount. Anda dapat membuat beberapa file menggunakan variabel resourceName dan path.

    Untuk secret regional, resourceName adalah jalur lengkap ke resource secret yang mencakup lokasi secret regional. Misalnya, "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_NAME/versions/SECRET_VERSION"

  2. Terapkan manifes:

    kubectl apply -f app-secrets.yaml
    
  3. Pastikan objek SecretProviderClass dibuat:

    kubectl get SecretProviderClasses
    

Mengonfigurasi volume tempat secret akan dipasang

  1. Simpan konfigurasi berikut sebagai my-pod.yaml:

    apiVersion: v1
    kind: Pod
    metadata:
      name: POD_NAME
      namespace: NAMESPACE
    spec:
      serviceAccountName: KSA_NAME
      containers:
      - image: IMAGE_NAME
        imagePullPolicy: IfNotPresent
        name: POD_NAME
        resources:
          requests:
            cpu: 100m
        stdin: true
        stdinOnce: true
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        tty: true
        volumeMounts:
          - mountPath: "/var/secrets"
            name: mysecret
      volumes:
      - name: mysecret
        csi:
          driver: secrets-store-gke.csi.k8s.io
          readOnly: true
          volumeAttributes:
            secretProviderClass: SECRET_PROVIDER_CLASS_NAME
    

    Ganti kode berikut:

  2. Khusus di cluster Standard, tambahkan kode berikut ke kolom template.spec untuk menempatkan Pod di node pool yang menggunakan Workload Identity Federation untuk GKE.

    Lewati langkah ini di cluster Autopilot, yang menolak nodeSelector ini karena setiap node menggunakan Workload Identity Federation for GKE.

    spec:
      nodeSelector:
        iam.gke.io/gke-metadata-server-enabled: "true"
    
  3. Terapkan konfigurasi ke cluster Anda.

    kubectl apply -f my-pod.yaml
    

Langkah ini memasang volume mysecret di /var/secrets menggunakan driver CSI (secrets-store-gke.csi.k8s.io). Volume ini mereferensikan objek SecretProviderClass yang bertindak sebagai penyedia.

Bermigrasi dari Driver CSI Secrets Store yang ada

Jika Anda bermigrasi ke add-on Secret Manager dari penginstalan Secrets Store CSI Driver yang ada, perbarui manifes Pod Anda sebagai berikut:

  1. Perbarui nama SecretProviderClass dan provider seperti yang dijelaskan dalam manifes berikut:

    apiVersion: secrets-store.csi.x-k8s.io/v1
    kind: SecretProviderClass
    metadata:
      name: app-secrets-gke
    spec:
      provider: gke
      parameters:
        secrets: |
          - resourceName: "projects/<project_id>/secrets/<secret_name>/versions/<secret_version>"
            path: "good1.txt"
    
  2. Perbarui driver dan secretProviderClass untuk volume Kubernetes Anda seperti yang dijelaskan dalam manifes berikut:

    volumes:
      - name: mysecret
        csi:
          driver: secrets-store-gke.csi.k8s.io
          readOnly: true
          volumeAttributes:
            secretProviderClass: "app-secrets-gke"
    

Menonaktifkan add-on Secret Manager

Untuk menonaktifkan add-on Secret Manager di cluster Standard yang sudah ada atau di cluster Autopilot, jalankan perintah berikut:

Konsol

  1. Di konsol Google Cloud , buka halaman Google Kubernetes Engine.

    Buka Google Kubernetes Engine

  2. Di daftar cluster, klik nama cluster yang ingin diubah.

  3. Di halaman detail cluster, di bagian Security, klik Secret Manager.

  4. Dalam dialog Edit Secret Manager, hapus centang pada kotak Aktifkan Secret Manager.

  5. Klik Simpan perubahan.

gcloud

Sebelum menggunakan salah satu data perintah di bawah, lakukan penggantian berikut:

  • CLUSTER_NAME: nama cluster Anda
  • REGION: region Compute Engine untuk cluster, seperti us-central1

Jalankan perintah berikut:

Linux, macOS, atau Cloud Shell

gcloud container clusters update CLUSTER_NAME \
    --no-enable-secret-manager \
    --region=REGION \

Windows (PowerShell)

gcloud container clusters update CLUSTER_NAME `
    --no-enable-secret-manager `
    --region=REGION `

Windows (cmd.exe)

gcloud container clusters update CLUSTER_NAME ^
    --no-enable-secret-manager ^
    --region=REGION ^