Dokumen ini menunjukkan cara mengakses Google Cloud API dengan lebih aman dari workload Anda yang berjalan di cluster Google Kubernetes Engine (GKE) menggunakan Workload Identity Federation for GKE. Untuk mempelajari lebih lanjut, lihat Tentang Workload Identity Federation untuk GKE.
Sebelum memulai
Sebelum memulai, pastikan Anda telah menjalankan tugas berikut:
- Aktifkan Google Kubernetes Engine API. Aktifkan Google Kubernetes Engine API
- Jika 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
gcloud components update
.
- Pastikan Google Cloud API yang ingin Anda akses didukung oleh Workload Identity Federation for GKE. Untuk daftar API yang didukung, lihat Produk dan batasan yang didukung. Jika API tidak didukung atau jika kasus penggunaan Anda terhalang oleh batasan Workload Identity Federation untuk layanan tersebut, lihat Alternatif: tautkan ServiceAccounts Kubernetes ke IAM di dokumen ini.
Pastikan Anda telah mengaktifkan Service Account Credentials API IAM.
Pastikan Anda memiliki peran IAM berikut:
roles/container.admin
roles/iam.serviceAccountAdmin
Pastikan Anda memahami batasan Workload Identity Federation untuk GKE.
Mengaktifkan Workload Identity Federation untuk GKE pada cluster dan node pool
Di Autopilot, Workload Identity Federation for GKE diaktifkan secara default. Lanjutkan ke bagian Configure Applications to use Workload Identity Federation for GKE.
Pada mode Standar, Anda mengaktifkan Workload Identity Federation for GKE pada cluster dan kumpulan node menggunakan Google Cloud CLI atau Konsol Google Cloud. Workload Identity Federation untuk GKE harus diaktifkan pada level cluster sebelum Anda dapat mengaktifkan Workload Identity Federation untuk GKE di kumpulan node.
Buat cluster baru
Anda dapat mengaktifkan Workload Identity Federation for GKE pada cluster Standar baru menggunakan gcloud CLI atau Konsol Google Cloud.
gcloud
-
Di konsol Google Cloud, aktifkan Cloud Shell.
Di bagian bawah Google Cloud Console, Cloud Shell sesi akan terbuka dan menampilkan perintah command line. Cloud Shell adalah lingkungan shell dengan Google Cloud CLI yang sudah terinstal, dan dengan nilai yang sudah ditetapkan untuk project Anda saat ini. Diperlukan waktu beberapa detik untuk melakukan inisialisasi sesi.
Untuk mengaktifkan Workload Identity Federation for GKE pada cluster baru, jalankan perintah berikut:
gcloud container clusters create CLUSTER_NAME \ --location=LOCATION \ --workload-pool=PROJECT_ID.svc.id.goog
Ganti kode berikut:
CLUSTER_NAME
: nama cluster baru.LOCATION
: lokasi Compute Engine untuk cluster.PROJECT_ID
: Project ID Google Cloud Anda.
Konsol
Untuk mengaktifkan Workload Identity Federation for GKE pada cluster baru, lakukan langkah berikut:
Buka halaman Google Kubernetes Engine di konsol Google Cloud.
Klik add_box Create.
Pada dialog Create cluster, untuk GKE Standard, klik Configure.
Di menu navigasi, di bagian Cluster, klik Security.
Pilih kotak centang Enable Workload Identity.
Lanjutkan konfigurasi cluster, lalu klik Create.
Mengupdate cluster yang ada
Anda dapat mengaktifkan Workload Identity Federation for GKE pada cluster Standar yang ada menggunakan gcloud CLI atau Konsol Google Cloud. Kumpulan node yang ada tidak akan terpengaruh, tetapi kumpulan node baru dalam cluster akan menggunakan Workload Identity Federation for GKE.
gcloud
-
Di konsol Google Cloud, aktifkan Cloud Shell.
Di bagian bawah Google Cloud Console, Cloud Shell sesi akan terbuka dan menampilkan perintah command line. Cloud Shell adalah lingkungan shell dengan Google Cloud CLI yang sudah terinstal, dan dengan nilai yang sudah ditetapkan untuk project Anda saat ini. Diperlukan waktu beberapa detik untuk melakukan inisialisasi sesi.
Untuk mengaktifkan Workload Identity Federation for GKE pada cluster yang ada, jalankan perintah berikut:
gcloud container clusters update CLUSTER_NAME \ --location=LOCATION \ --workload-pool=PROJECT_ID.svc.id.goog
Ganti kode berikut:
CLUSTER_NAME
: nama cluster yang ada.LOCATION
: lokasi Compute Engine cluster Anda.PROJECT_ID
: Project ID Google Cloud Anda.
Konsol
Untuk mengaktifkan Workload Identity Federation for GKE pada cluster yang ada, lakukan langkah berikut:
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
Edit Workload Identity.Pada dialog Edit Workload Identity, pilih kotak centang Enable Workload Identity
Klik Simpan perubahan.
Memigrasikan workload yang ada ke Workload Identity Federation untuk GKE
Setelah mengaktifkan Workload Identity Federation for GKE pada cluster yang ada, sebaiknya migrasikan beban kerja yang berjalan agar menggunakan Workload Identity Federation for GKE. Pilih strategi migrasi yang ideal untuk lingkungan Anda. Anda dapat membuat node pool baru dengan Workload Identity Federation for GKE, atau mengupdate node pool yang ada untuk mengaktifkan Workload Identity Federation untuk GKE.
Sebaiknya buat node pool baru jika Anda juga perlu memodifikasi aplikasi agar kompatibel dengan Workload Identity Federation for GKE.
Membuat node pool baru
Semua kumpulan node baru yang Anda buat secara default akan menggunakan Workload Identity Federation for GKE, jika cluster telah mengaktifkan Workload Identity Federation for GKE. Untuk membuat node pool baru dengan Workload Identity Federation for GKE yang diaktifkan, jalankan perintah berikut:
gcloud container node-pools create NODEPOOL_NAME \
--cluster=CLUSTER_NAME \
--region=COMPUTE_REGION \
--workload-metadata=GKE_METADATA
Ganti kode berikut:
NODEPOOL_NAME
: nama node pool baru.CLUSTER_NAME
: nama cluster yang ada yang mengaktifkan Workload Identity Federation for GKE.
Flag --workload-metadata=GKE_METADATA
mengonfigurasi node pool untuk menggunakan server metadata GKE. Sebaiknya Anda menyertakan flag tersebut agar pembuatan kumpulan node gagal jika Workload Identity Federation for GKE tidak diaktifkan di cluster.
Memperbarui node pool yang ada
Anda dapat mengaktifkan Workload Identity Federation for GKE secara manual pada kumpulan node yang ada setelah mengaktifkan Workload Identity Federation for GKE di cluster.
gcloud
-
Di konsol Google Cloud, aktifkan Cloud Shell.
Di bagian bawah Google Cloud Console, Cloud Shell sesi akan terbuka dan menampilkan perintah command line. Cloud Shell adalah lingkungan shell dengan Google Cloud CLI yang sudah terinstal, dan dengan nilai yang sudah ditetapkan untuk project Anda saat ini. Diperlukan waktu beberapa detik untuk melakukan inisialisasi sesi.
Untuk mengubah kumpulan node yang ada agar menggunakan Workload Identity Federation for GKE, jalankan perintah berikut:
gcloud container node-pools update NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --region=COMPUTE_REGION \ --workload-metadata=GKE_METADATA
Jika cluster mengaktifkan Workload Identity Federation for GKE, Anda dapat menonaktifkannya secara selektif di kumpulan node tertentu dengan menentukan
--workload-metadata=GCE_METADATA
secara eksplisit. Lihat Melindungi metadata cluster untuk mengetahui informasi selengkapnya.
Konsol
Untuk mengubah kumpulan node yang ada agar dapat menggunakan Workload Identity Federation for GKE, lakukan langkah-langkah berikut:
Buka halaman Google Kubernetes Engine di Konsol Google Cloud.
Di daftar cluster, klik nama cluster yang ingin diubah.
Klik tab Nodes.
Di bagian Node Pools, klik nama node pool yang ingin Anda ubah.
Di halaman Detail node pool, klik
Edit.Di halaman Edit node pool, pada bagian Security, pilih kotak centang Enable GKE Metadata Server.
Klik Save.
Mengonfigurasi aplikasi untuk menggunakan Workload Identity Federation for GKE
Agar aplikasi GKE Anda dapat mengautentikasi ke Google Cloud API menggunakan Workload Identity Federation for GKE, Anda harus membuat kebijakan IAM untuk API tertentu. Akun utama dalam kebijakan ini adalah ID utama IAM yang sesuai dengan beban kerja, namespace, atau ServiceAccounts.
Mengonfigurasi otorisasi dan akun utama
Dapatkan kredensial untuk cluster Anda:
gcloud container clusters get-credentials CLUSTER_NAME \ --location=LOCATION
Ganti kode berikut:
CLUSTER_NAME
: nama cluster Anda yang mengaktifkan Workload Identity Federation for GKE.LOCATION
: lokasi cluster Anda.
Buat namespace yang akan digunakan untuk akun layanan Kubernetes. Anda juga dapat menggunakan namespace
default
atau namespace yang sudah ada.kubectl create namespace NAMESPACE
Membuat ServiceAccount Kubernetes yang akan digunakan aplikasi Anda. Anda juga dapat menggunakan ServiceAccount Kubernetes yang ada di namespace apa pun. Jika Anda tidak menetapkan ServiceAccount ke workload, Kubernetes akan menetapkan ServiceAccount
default
dalam namespace.kubectl create serviceaccount KSA_NAME \ --namespace NAMESPACE
Ganti kode berikut:
KSA_NAME
: nama Akun Layanan Kubernetes baru Anda.NAMESPACE
: nama namespace Kubernetes untuk ServiceAccount.
Buat kebijakan izin IAM yang merujuk ke ServiceAccount Kubernetes. Sebagai praktik yang baik, berikan izin ke resource Google Cloud tertentu yang perlu diakses oleh aplikasi Anda. Anda harus memiliki izin IAM yang relevan untuk membuat kebijakan izin di project Anda.
Misalnya, perintah berikut memberikan peran Kubernetes Engine Cluster Viewer (
roles/container.clusterViewer
) ke ServiceAccount yang Anda buat:gcloud projects add-iam-policy-binding projects/PROJECT_ID \ --role=roles/container.clusterViewer \ --member=principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KSA_NAME \ --condition=None
Ganti kode berikut:
PROJECT_ID
: Project ID Google Cloud Anda.PROJECT_NUMBER
: nomor project Google Cloud numerik Anda.
Anda dapat memberikan peran pada resource Google Cloud apa pun yang mendukung kebijakan izin IAM. Sintaksis ID utama bergantung pada resource Kubernetes. Untuk mengetahui daftar ID yang didukung, lihat ID utama untuk Workload Identity Federation for GKE.
Memverifikasi penyiapan Workload Identity Federation for GKE
Di bagian ini, Anda akan membuat bucket Cloud Storage dan memberikan akses lihat pada bucket ke ServiceAccount Kubernetes yang Anda buat di bagian sebelumnya. Kemudian, Anda akan men-deploy beban kerja dan menguji apakah container tersebut dapat membuat daftar cluster dalam project.
Buat bucket Cloud Storage kosong:
gcloud storage buckets create gs://BUCKET
Ganti
BUCKET
dengan nama untuk bucket baru Anda.Berikan peran Storage Object Viewer (
roles/storage.objectViewer
) ke ServiceAccount yang Anda buat:gcloud storage buckets add-iam-policy-binding gs://BUCKET \ --role=roles/storage.objectViewer \ --member=principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KSA_NAME \ --condition=None
Ganti kode berikut:
PROJECT_ID
: Project ID Google Cloud Anda.PROJECT_NUMBER
: nomor project Google Cloud numerik Anda.NAMESPACE
: namespace Kubernetes yang berisi ServiceAccount.KSA_NAME
: nama ServiceAccount.
Simpan manifes berikut sebagai
test-app.yaml
:apiVersion: v1 kind: Pod metadata: name: test-pod namespace: NAMESPACE spec: serviceAccountName: KSA_NAME containers: - name: test-pod image: google/cloud-sdk:slim command: ["sleep","infinity"] resources: requests: cpu: 500m memory: 512Mi ephemeral-storage: 10Mi
Hanya di cluster Standar, tambahkan baris berikut ke kolom
template.spec
untuk menempatkan Pod di kumpulan node yang menggunakan Workload Identity Federation for 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 test-app.yaml
Tunggu hingga Pod siap. Untuk memeriksa status Pod, jalankan perintah berikut:
kubectl get pods --namespace=NAMESPACE
Saat Pod sudah siap, output-nya akan terlihat seperti berikut:
NAME READY STATUS RESTARTS AGE test-pod 1/1 Running 0 5m27s
Buka sesi shell dalam Pod:
kubectl exec -it pods/test-pod --namespace=NAMESPACE -- /bin/bash
Mendapatkan daftar objek dalam bucket:
curl -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://storage.googleapis.com/storage/v1/b/BUCKET/o"
Output-nya adalah sebagai berikut:
{ "kind": "storage#objects" }
Output ini menunjukkan bahwa Pod Anda dapat mengakses objek di dalam bucket.
Alternatif: menautkan ServiceAccounts Kubernetes ke IAM
Sebaiknya gunakan ID utama IAM untuk mengonfigurasi Workload Identity Federation for GKE. Namun, identitas gabungan ini memiliki batasan khusus untuk setiap Google Cloud API yang didukung. Untuk daftar batasan, lihat Produk dan batasan yang didukung.
Jika batasan ini berlaku untuk Anda, gunakan langkah-langkah berikut untuk mengonfigurasi akses ke API tersebut dari beban kerja GKE Anda:
Membuat namespace Kubernetes:
kubectl create namespace NAMESPACE
Buat ServiceAccount Kubernetes:
kubectl create serviceaccount KSA_NAME \ --namespace=NAMESPACE
Membuat akun layanan IAM. Anda juga dapat menggunakan akun layanan IAM yang ada dalam project apa pun di organisasi Anda.
gcloud iam service-accounts create IAM_SA_NAME \ --project=IAM_SA_PROJECT_ID
Ganti kode berikut:
IAM_SA_NAME
: nama untuk akun layanan IAM baru Anda.IAM_SA_PROJECT_ID
: project ID untuk akun layanan IAM Anda.
Untuk mendapatkan informasi tentang cara melakukan otorisasi akun layanan IAM untuk mengakses Google Cloud API, lihat Memahami akun layanan.
Beri akun layanan IAM Anda peran yang diperlukan pada Google Cloud API tertentu:
gcloud projects add-iam-policy-binding IAM_SA_PROJECT_ID \ --member "serviceAccount:IAM_SA_NAME@IAM_SA_PROJECT_ID.iam.gserviceaccount.com" \ --role "ROLE_NAME"
Ganti
ROLE_NAME
dengan nama peran, sepertiroles/spanner.viewer
.Buat kebijakan IAM yang memberi Kubernetes ServiceAccount akses untuk meniru akun layanan IAM:
gcloud iam service-accounts add-iam-policy-binding IAM_SA_NAME@IAM_SA_PROJECT_ID.iam.gserviceaccount.com \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:PROJECT_ID.svc.id.goog[NAMESPACE/KSA_NAME]"
Anotasikan ServiceAccount Kubernetes sehingga GKE melihat link antar-akun layanan:
kubectl annotate serviceaccount KSA_NAME \ --namespace NAMESPACE \ iam.gke.io/gcp-service-account=IAM_SA_NAME@IAM_SA_PROJECT_ID.iam.gserviceaccount.com
Menggunakan Workload Identity Federation untuk GKE dari kode Anda
Autentikasi ke layanan Google Cloud dari kode Anda sama dengan proses autentikasi menggunakan server metadata Compute Engine. Saat menggunakan Workload Identity Federation for GKE, permintaan Anda ke server metadata instance akan dirutekan ke server metadata GKE. Kode yang sudah ada yang melakukan autentikasi menggunakan server metadata instance (seperti kode yang menggunakan library klien Google Cloud) seharusnya dapat berfungsi tanpa modifikasi.
Menggunakan kuota dari project yang berbeda dengan Workload Identity Federation for GKE
Pada cluster yang menjalankan GKE versi 1.24 atau yang lebih baru, secara opsional Anda dapat mengonfigurasi akun layanan Kubernetes agar menggunakan kuota dari project Google Cloud yang berbeda saat melakukan panggilan ke metode GenerateAccessToken
dan GenerateIdToken
di file Service Account Credentials API IAM. Dengan begitu, Anda dapat menghindari penggunaan seluruh kuota di project utama, dan menggunakan kuota dari project lain untuk layanan ini di cluster Anda.
Untuk mengonfigurasi project kuota dengan Workload Identity Federation for GKE, lakukan langkah berikut:
Berikan izin
serviceusage.services.use
pada project kuota ke akun layanan Kubernetes.gcloud projects add-iam-policy-binding QUOTA_PROJECT_ID \ --role=roles/serviceusage.serviceUsageConsumer \ --member='principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/serviceaccount/NAMESPACE/KSA_NAME' \
Ganti
QUOTA_PROJECT_ID
dengan project ID project kuota.Anotasikan akun layanan Kubernetes dengan project kuota:
kubectl annotate serviceaccount KSA_NAME \ --namespace NAMESPACE \ iam.gke.io/credential-quota-project=QUOTA_PROJECT_ID
Untuk memastikan konfigurasi berfungsi dengan benar, lakukan hal berikut:
Membuat Pod dan memulai sesi shell. Lihat dokumentasi Kubernetes untuk Mendapatkan Shell ke Container yang Berjalan.
Buat permintaan ke server metadata:
curl -H "Metadata-Flavor: Google" http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/token
Buka halaman Service Accounts Credentials API IAM di Konsol Google Cloud untuk project kuota Anda:
Periksa perubahan lalu lintas.
Pembersihan
Untuk berhenti menggunakan Workload Identity Federation for GKE, cabut akses ke akun layanan IAM dan nonaktifkan Workload Identity Federation for GKE pada cluster.
Cabut akses
Untuk mencabut akses ke akun utama, hapus kebijakan izin IAM yang Anda buat di bagian Configure application to use Workload Identity Federation for GKE.
Misalnya, untuk mencabut akses ke repositori Artifact Registry, jalankan perintah berikut:
gcloud artifacts repositories remove-iam-policy-binding REPOSITORY_NAME \
--location=REPOSITORY_LOCATION \
--member='principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/serviceaccount/NAMESPACE/KSA_NAME' \
--role='roles/artifactregistry.reader' \
--all
Menonaktifkan Workload Identity Federation untuk GKE
Anda hanya dapat menonaktifkan Workload Identity Federation untuk GKE di cluster Standar.
gcloud
-
Di konsol Google Cloud, aktifkan Cloud Shell.
Di bagian bawah Google Cloud Console, Cloud Shell sesi akan terbuka dan menampilkan perintah command line. Cloud Shell adalah lingkungan shell dengan Google Cloud CLI yang sudah terinstal, dan dengan nilai yang sudah ditetapkan untuk project Anda saat ini. Diperlukan waktu beberapa detik untuk melakukan inisialisasi sesi.
Nonaktifkan Workload Identity Federation untuk GKE di setiap kumpulan node:
gcloud container node-pools update NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --workload-metadata=GCE_METADATA
Ulangi perintah ini untuk setiap node pool dalam cluster.
Nonaktifkan Workload Identity Federation untuk GKE di cluster:
gcloud container clusters update CLUSTER_NAME \ --disable-workload-identity
Konsol
Buka halaman Google Kubernetes Engine di Konsol Google Cloud.
Di daftar cluster, klik nama cluster yang ingin diubah.
Klik tab Nodes.
Untuk menonaktifkan Workload Identity Federation for GKE di setiap kumpulan node, lakukan hal berikut untuk setiap kumpulan node di bagian Node Pools:
- Klik nama node pool yang ingin diubah.
- Di halaman Detail node pool, klik Edit.
- Di halaman Edit node pool, di bagian Security, hapus centang pada kotak Enable GKE Metadata Server.
- Klik Save.
Untuk menonaktifkan Workload Identity Federation for GKE bagi cluster, lakukan langkah-langkah berikut:
- Klik tab Details.
- Di bagian Keamanan, di samping Workload Identity, klik Edit.
- Pada dialog Edit Workload Identity, hapus centang pada kotak Enable Workload Identity.
- Klik Simpan perubahan.
Menonaktifkan Workload Identity Federation untuk GKE di organisasi Anda
Dari perspektif keamanan, Workload Identity Federation for GKE memungkinkan GKE menegaskan identitas akun layanan Kubernetes yang dapat diautentikasi dan diberi otorisasi ke resource Google Cloud. Jika Anda adalah administrator yang telah mengambil tindakan untuk mengisolasi workload dari resource Google Cloud, seperti menonaktifkan pembuatan akun layanan atau menonaktifkan pembuatan kunci akun layanan, Anda mungkin juga ingin menonaktifkan Workload Identity Federation for GKE bagi organisasi Anda.
Lihat petunjuk ini untuk menonaktifkan Workload Identity Federation for GKE bagi organisasi Anda.
Pemecahan masalah
Untuk mengetahui informasi pemecahan masalah, lihat Memecahkan Masalah Workload Identity Federation untuk GKE.
Langkah selanjutnya
- Pelajari Workload Identity Federation for GKE lebih lanjut.
- Baca ringkasan keamanan GKE.
- Pelajari cara Melindungi Metadata Cluster.
- Pelajari akun layanan IAM.