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:
- Instal add-on Secret Manager di cluster GKE baru atau yang sudah ada.
- Mengonfigurasi aplikasi untuk melakukan autentikasi ke Secret Manager API.
- Tentukan secret yang akan dipasang ke Pod Kubernetes menggunakan file YAML
SecretProviderClass
. - 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
danlinux/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.
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 AndaVERSION
: 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, sepertius-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 adaLOCATION
: region untuk cluster Anda, sepertius-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
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 AndaNAMESPACE
: nama namespace Kubernetes untuk ServiceAccountGSA_NAME
: nama akun layanan IAMPROJECT_ID
: ID project dari project Google Cloud untuk akun layanan IAM Anda
Terapkan manifes:
kubectl apply -f service-account.yaml
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 adaNAMESPACE
: nama namespace Kubernetes untuk ServiceAccountGSA_NAME
: nama akun layanan IAMPROJECT_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 ManagerGSA_NAME
: nama akun layanan IAMPROJECT_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:
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 objekSecretProviderClass
AndaPROJECT_ID
: project ID AndaSECRET_NAME
: nama rahasiaSECRET_VERSION
: versi rahasiaFILENAME.txt
: nama file tempat nilai rahasia akan dipasang. Anda dapat membuat beberapa file menggunakan variabelresourceName
danpath
.
Terapkan manifes:
kubectl apply -f app-secrets.yaml
Pastikan objek
SecretProviderClass
sudah dibuat:kubectl get SecretProviderClasses
Mengonfigurasi volume tempat secret akan dipasang
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 dipasangKSA_NAME
: Akun Layanan Kubernetes yang Anda siapkan pada langkah Menyiapkan akun layanan workload identityIMAGE_NAME
: nama image containerSECRET_PROVIDER_CLASS_NAME
: nama untuk objekSecretProviderClass
Anda
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:
Update nama
SecretProviderClass
danprovider
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"
Update
driver
dansecretProviderClass
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 AndaREGION
: region cluster Anda, sepertius-central1