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 dipasang di Pod Kubernetes.

Proses ini melibatkan langkah-langkah berikut:

  1. Aktifkan add-on Secret Manager di cluster GKE baru atau yang sudah ada.
  2. Konfigurasikan aplikasi untuk mengautentikasi ke Secret Manager API.
  3. Tentukan secret yang akan dipasang ke Pod Kubernetes menggunakan file YAML SecretProviderClass.
  4. Buat volume tempat secret akan dipasang. Setelah volume dilampirkan, aplikasi dalam penampung dapat mengakses data dalam sistem file penampung.

Add-on Secret Manager berasal dari Driver CSI Kubernetes Secrets Store open source dan penyedia Google Secret Manager. Jika 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 secret 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 melakukan hal ini, 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 penampung dalam bentuk volume yang terpasang.
  • Add-on Secret Manager didukung di cluster Standard dan cluster Autopilot.
  • Add-on Secret Manager mendukung node yang menggunakan Container-Optimized OS atau image node Ubuntu.

Batasan

Add-on Secret Manager memiliki batasan berikut:

Sebelum memulai

  • Enable the Secret Manager and Google Kubernetes Engine APIs.

    Enable the APIs

  • Jika Anda 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 membuat cluster, lakukan hal berikut:

Konsol

  1. Buka halaman Google Kubernetes Engine di konsol Google Cloud.

    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 tertentu 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 flag --release-channel untuk memilih saluran rilis yang menyertakannya.
  • PROJECT_ID: ID project Google Cloud 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 tertentu 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 dalam 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 tindakan berikut:

Konsol

  1. Buka halaman Google Kubernetes Engine di konsol Google Cloud.

    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 Enable 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 ^

Memverifikasi penginstalan add-on Pengelola Secret

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 1

Ganti kode berikut:

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

Mengonfigurasi aplikasi untuk mengautentikasi ke Secret Manager API

Penyedia Google Secret Manager menggunakan identitas workload Pod tempat secret dipasang 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 akun utama IAM yang sesuai dengan ServiceAccount Kubernetes saat mengakses Secret Manager API.

Membuat 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 Kubernetes ServiceAccount baru dan beri 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: nomor project Google Cloud numerik Anda
    • PROJECT_ID: project ID project Google Cloud yang berisi cluster GKE Anda
    • NAMESPACE: nama namespace Kubernetes untuk ServiceAccount
    • KSA_NAME: nama Akun Layanan Kubernetes yang ada

Menggunakan Akun Layanan Kubernetes yang ada

Buat kebijakan izin IAM yang mereferensikan Kubernetes ServiceAccount yang ada dan beri 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: nomor project Google Cloud numerik Anda
  • PROJECT_ID: project ID project Google Cloud yang berisi cluster GKE Anda
  • NAMESPACE: nama namespace Kubernetes untuk ServiceAccount
  • KSA_NAME: nama Akun Layanan Kubernetes yang ada

Menentukan secret yang akan dipasang

Untuk menentukan secret yang akan dipasang sebagai file di Pod Kubernetes, buat manifes YAML SecretProviderClass dan cantumkan secret yang akan dipasang dan nama file untuk memasang secret tersebut. 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 dipasang. Anda dapat membuat beberapa file menggunakan variabel resourceName dan path.
  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 untuk 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 berfungsi sebagai penyedia.

Bermigrasi dari Driver CSI Secrets Store yang ada

Jika Anda bermigrasi ke add-on Secret Manager dari penginstalan Driver CSI Secrets Store yang ada, perbarui manifes Pod 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 ada atau di cluster Autopilot, jalankan perintah berikut:

Konsol

  1. Buka halaman Google Kubernetes Engine di konsol Google Cloud.

    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 Enable 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 ^