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:
- Aktifkan add-on Secret Manager di cluster GKE baru atau yang sudah ada.
- Mengonfigurasi aplikasi untuk melakukan autentikasi ke Secret Manager API.
- Tentukan secret mana yang akan dipasang ke Pod Kubernetes menggunakan file YAML
SecretProviderClass
. Add-on Secret Manager mendukung secret global dan regional. - 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.
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
-
Di konsol Google Cloud , buka halaman Google Kubernetes Engine.
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 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
-
Di konsol Google Cloud , buka halaman Google Kubernetes Engine.
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 Aktifkan 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 ^
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 clusterLOCATION
: lokasi cluster Anda, sepertius-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 clusterLOCATION
: lokasi cluster Anda, sepertius-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
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 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 ManagerPROJECT_NUMBER
: Google Cloud nomor project numerik AndaPROJECT_ID
: project ID Google Cloud project yang berisi cluster GKE AndaNAMESPACE
: nama namespace Kubernetes untuk ServiceAccountKSA_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 ManagerPROJECT_NUMBER
: Google Cloud nomor project numerik AndaPROJECT_ID
: project ID Google Cloud project yang berisi cluster GKE AndaNAMESPACE
: nama namespace Kubernetes untuk ServiceAccountKSA_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:
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 di-mount. Anda dapat membuat beberapa file menggunakan variabelresourceName
danpath
.
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"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
: Kubernetes ServiceAccount yang Anda siapkan di 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 for 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 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:
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 sudah ada atau di cluster Autopilot, jalankan perintah berikut:
Konsol
-
Di konsol Google Cloud , buka halaman Google Kubernetes Engine.
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 Aktifkan 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 ^