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:
- Aktifkan add-on Secret Manager di cluster GKE baru atau yang sudah ada.
- Konfigurasikan aplikasi untuk mengautentikasi ke Secret Manager API.
- Tentukan secret yang akan dipasang ke Pod Kubernetes menggunakan file YAML
SecretProviderClass
. - 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:
Add-on Secret Manager tidak mendukung fitur berikut yang tersedia di Driver CSI Secrets Store open source:
Add-on Pengelola Secret tidak mendukung node Windows Server.
Sebelum memulai
-
Enable the Secret Manager and Google Kubernetes Engine 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
-
Buka halaman Google Kubernetes Engine di konsol Google Cloud.
Klik add_box Create .
Pada dialog Create cluster, klik Configure.
Di menu navigasi, di bagian Cluster, klik Security.
Centang kotak Enable Secret Manager.
Pilih kotak centang Enable Workload Identity.
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
-
Buka halaman Google Kubernetes Engine di konsol Google Cloud.
Di daftar cluster, klik nama cluster yang ingin diubah.
Di halaman detail cluster, di bagian Security, klik
Secret Manager.Pada dialog Edit Secret Manager, centang kotak Enable Secret Manager.
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 clusterLOCATION
: lokasi cluster Anda, sepertius-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
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 AndaNAMESPACE
: nama namespace Kubernetes untuk ServiceAccount
Terapkan manifes:
kubectl apply -f service-account.yaml
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 ManagerPROJECT_NUMBER
: nomor project Google Cloud numerik AndaPROJECT_ID
: project ID project Google Cloud yang berisi cluster GKE AndaNAMESPACE
: nama namespace Kubernetes untuk ServiceAccountKSA_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 ManagerPROJECT_NUMBER
: nomor project Google Cloud numerik AndaPROJECT_ID
: project ID project Google Cloud yang berisi cluster GKE AndaNAMESPACE
: nama namespace Kubernetes untuk ServiceAccountKSA_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:
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
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 variabelresourceName
danpath
.
Terapkan manifes:
kubectl apply -f app-secrets.yaml
Pastikan objek
SecretProviderClass
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: 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:
POD_NAME
: nama Pod Kubernetes tempat secret dipasangNAMESPACE
: nama namespace Kubernetes untuk ServiceAccountKSA_NAME
: ServiceAccount Kubernetes yang Anda siapkan pada langkah Mengonfigurasi aplikasi untuk melakukan autentikasi ke Secret Manager APIIMAGE_NAME
: nama image containerSECRET_PROVIDER_CLASS_NAME
: nama untuk objekSecretProviderClass
Anda
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"
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:
Perbarui 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"
Perbarui
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 Standard yang ada atau di cluster Autopilot, jalankan perintah berikut:
Konsol
-
Buka halaman Google Kubernetes Engine di konsol Google Cloud.
Di daftar cluster, klik nama cluster yang ingin diubah.
Di halaman detail cluster, di bagian Security, klik
Secret Manager.Dalam dialog Edit Secret Manager, hapus centang pada kotak Enable Secret Manager.
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 ^