Menggunakan add-on Secret Manager dengan Google Kubernetes Engine

Dengan integrasi antara Secret Manager dan Google Kubernetes Engine (GKE), Anda dapat 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 terpasang di Pod Kubernetes.

Proses ini melibatkan langkah-langkah berikut:

  1. Instal 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 yang akan dipasang ke Pod Kubernetes menggunakan file YAML SecretProviderClass.
  4. Buat volume tempat secret akan dipasang. Setelah volume terpasang, aplikasi dalam penampung dapat mengakses data dalam sistem file container.

Add-on Secret Manager berasal dari Kubernetes Secrets Store CSI Driver open source dan penyedia Google Secret Manager. Jika menggunakan Secret Store CSI Driver 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 dari pod GKE secara selektif menggunakan add-on Secret Manager. Dengan begitu, Anda dapat menggunakan fitur yang ditawarkan oleh Secret Manager seperti enkripsi CMEK, kontrol akses terperinci, rotasi terkelola, pengelolaan siklus proses, dan log audit, sekaligus menggunakan fitur Kubernetes seperti meneruskan secret ke container dalam bentuk volume yang terpasang.
  • Add-on Secret Manager didukung di Cluster Standar dan cluster Autopilot.
  • Add-on Secret Manager mendukung deployment linux/arm64 dan linux/amd64.

Batasan

Rilis Pratinjau add-on Secret Manager ini tidak mendukung fitur berikut yang tersedia di Driver CSI Secrets Store open source:

Sebelum memulai

  • Aktifkan API Secret Manager and Google Kubernetes Engine.

    Mengaktifkan API

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

  • Pastikan cluster Anda menjalankan GKE versi 1.29 atau yang lebih baru dengan image node Linux. Add-on Secret Manager tidak mendukung node Windows Server.

Menginstal add-on Secret Manager

Anda dapat menginstal add-on Secret Manager di cluster Standar maupun cluster Autopilot. Pastikan Workload Identity Federation for GKE diaktifkan di cluster Standar. Workload Identity Federation for GKE diaktifkan secara default pada cluster Autopilot. Pod Kubernetes menggunakan workload identity untuk melakukan autentikasi ke Secret Manager API.

Instal add-on Secret Manager di cluster GKE baru

Untuk menginstal add-on Secret Manager saat pembuatan cluster, ikuti langkah-langkah berikut:

Cluster standar

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

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

    Ganti kode berikut:

    • CLUSTER_NAME: nama cluster Anda.
    • LOCATION: region atau zona Compute Engine untuk cluster.
    • VERSION: versi GKE spesifik yang ingin Anda gunakan. Pastikan cluster Anda menjalankan GKE versi 1.29 atau yang lebih baru. Jika saluran rilis default tidak menyertakan versi ini, gunakan flag --release-channel untuk memilih saluran rilis yang menyertakan versi ini.
    • PROJECT_ID: ID project Google Cloud Anda.

Cluster Autopilot

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

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

    Ganti kode berikut:

    • CLUSTER_NAME: nama cluster Anda
    • VERSION: versi GKE spesifik yang ingin Anda gunakan. Pastikan cluster Anda menjalankan GKE versi 1.29 atau yang lebih baru. Jika saluran rilis default tidak menyertakan versi ini, gunakan flag --release-channel untuk memilih saluran rilis yang menyertakan versi ini.
    • LOCATION: region untuk cluster Anda, seperti us-central1.

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.

Instal add-on Secret Manager di cluster GKE yang sudah ada

Untuk mengaktifkan add-on Secret Manager di cluster yang ada, jalankan perintah berikut:

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

Ganti kode berikut:

  • CLUSTER_NAME: nama cluster yang ada
  • LOCATION: region untuk cluster Anda, seperti us-central1.

Mengonfigurasi aplikasi untuk melakukan autentikasi 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 for GKE, ikuti langkah-langkah berikut:

  • Gunakan kebijakan Identity and Access Management (IAM) untuk mengikat akun layanan IAM ke ServiceAccount Kubernetes. Anda dapat membuat ServiceAccount Kubernetes baru atau menggunakan ServiceAccount Kubernetes yang ada di namespace mana pun, termasuk ServiceAccount Kubernetes default.
  • Gunakan binding IAM untuk memberi akun layanan IAM akses ke secret di Secret Manager.

Pod yang menggunakan ServiceAccount Kubernetes yang dikonfigurasi akan otomatis melakukan autentikasi sebagai akun layanan IAM saat mengakses Secret Manager API.

Mengikat ServiceAccount Kubernetes ke akun layanan IAM

Izinkan Kubernetes ServiceAccount untuk meniru identitas akun layanan IAM dengan menambahkan binding kebijakan IAM antara kedua akun layanan tersebut.

Gunakan ServiceAccount Kubernetes baru

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

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: KSA_NAME
      namespace: NAMESPACE
      annotations:
        iam.gke.io/gcp-service-account: GSA_NAME@PROJECT_ID.iam.gserviceaccount.com
    

    Ganti kode berikut:

    • KSA_NAME: nama Akun Layanan Kubernetes baru Anda
    • NAMESPACE: nama namespace Kubernetes untuk ServiceAccount
    • GSA_NAME: nama akun layanan IAM
    • PROJECT_ID: ID project dari project Google Cloud untuk akun layanan IAM Anda
  2. Terapkan manifes:

    kubectl apply -f service-account.yaml
    
  3. Untuk mengikat akun layanan IAM ke ServiceAccount Kubernetes baru, jalankan perintah berikut:

    gcloud iam service-accounts add-iam-policy-binding \
        --role roles/iam.workloadIdentityUser \
        --member "serviceAccount:PROJECT_ID.svc.id.goog[NAMESPACE/KSA_NAME]" \
        GSA_NAME@PROJECT_ID.iam.gserviceaccount.com
    

Gunakan ServiceAccount Kubernetes yang ada

Untuk mengikat akun layanan IAM ke ServiceAccount Kubernetes yang ada, jalankan perintah berikut:

gcloud iam service-accounts add-iam-policy-binding \
    --role roles/iam.workloadIdentityUser \
    --member "serviceAccount:PROJECT_ID.svc.id.goog[NAMESPACE/KSA_NAME]" \
    GSA_NAME@PROJECT_ID.iam.gserviceaccount.com

Ganti kode berikut:

  • KSA_NAME: nama Akun Layanan Kubernetes yang ada
  • NAMESPACE: nama namespace Kubernetes untuk ServiceAccount
  • GSA_NAME: nama akun layanan IAM
  • PROJECT_ID: ID project dari project Google Cloud untuk akun layanan IAM Anda

Memberi akun layanan IAM izin untuk mengakses rahasia

Untuk memberikan izin kepada akun layanan agar dapat mengakses secret, jalankan perintah berikut:

gcloud secrets add-iam-policy-binding SECRET_NAME \
    --member=serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com \
    --role=roles/secretmanager.secretAccessor

Ganti kode berikut:

  • SECRET_NAME: nama rahasia di Secret Manager
  • GSA_NAME: nama akun layanan IAM
  • PROJECT_ID: ID project dari project Google Cloud untuk akun layanan IAM Anda

Menentukan secret yang akan dipasang

Untuk menentukan secret mana yang akan dipasang sebagai file di Pod Kubernetes, buat manifes YAML SecretProviderClass dan cantumkan secret yang akan dipasang serta nama file yang akan dipasang. 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 rahasia
    • SECRET_VERSION: versi rahasia
    • FILENAME.txt: nama file tempat nilai rahasia 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 sudah 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: default
    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:

    • POD_NAME: nama Pod Kubernetes tempat rahasia dipasang
    • KSA_NAME: Akun Layanan Kubernetes yang Anda siapkan pada langkah Menyiapkan akun layanan workload identity
    • IMAGE_NAME: nama image container
    • SECRET_PROVIDER_CLASS_NAME: nama untuk objek SecretProviderClass Anda
  2. 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 merujuk ke objek SecretProviderClass yang bertindak 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 sudah ada, update manifes Pod Anda sebagai berikut:

  1. Update 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. Update 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 Standar yang ada atau di cluster Autopilot, jalankan perintah berikut:

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

Ganti kode berikut:

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