Halaman ini menunjukkan cara mengakses Google Cloud API dengan lebih aman dari workload yang berjalan di cluster Google Kubernetes Engine (GKE) menggunakan Workload Identity Federation untuk GKE.
Halaman ini ditujukan untuk Admin identitas dan akun, Operator, dan Developer yang membuat dan mengelola kebijakan terkait izin pengguna. Untuk mempelajari lebih lanjut peran umum dan contoh tugas yang kami referensikan dalam konten Google Cloud, lihat Peran dan tugas pengguna GKE Enterprise umum.
Sebelum membaca halaman ini, pastikan Anda memahami konsep 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
lakukan inisialisasi
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 untuk GKE. Untuk daftar API yang didukung, lihat Produk dan batasan yang didukung. Jika API tidak didukung atau jika kasus penggunaan Anda diblokir oleh batasan Workload Identity Federation untuk layanan tersebut, lihat Alternatif: menautkan Akun Layanan Kubernetes ke IAM di halaman 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 for GKE.
Mengaktifkan Workload Identity Federation for GKE di cluster dan node pool
Di Autopilot, Workload Identity Federation for GKE selalu diaktifkan. Lanjutkan ke bagian Mengonfigurasi aplikasi untuk menggunakan Workload Identity Federation for GKE.
Di Standard, Anda mengaktifkan Workload Identity Federation untuk GKE di cluster dan node pool menggunakan Google Cloud CLI atau Konsol Google Cloud. Workload Identity Federation for GKE harus diaktifkan di level cluster sebelum Anda dapat mengaktifkan Workload Identity Federation for GKE di kumpulan node.
Buat cluster baru
Anda dapat mengaktifkan Workload Identity Federation untuk GKE di cluster Standar baru menggunakan gcloud CLI atau Konsol Google Cloud.
gcloud
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Untuk mengaktifkan Workload Identity Federation untuk GKE di 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 untuk GKE di 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 Federasi Workload Identity untuk GKE di cluster Standar yang sudah ada menggunakan gcloud CLI atau Konsol Google Cloud. Node pool yang sudah ada tidak akan terpengaruh, tetapi semua node pool baru di cluster akan menggunakan Workload Identity Federation for GKE.
gcloud
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Untuk mengaktifkan Workload Identity Federation untuk 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 untuk GKE di 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 for GKE
Setelah mengaktifkan Workload Identity Federation for GKE di cluster yang ada, Anda dapat memigrasikan workload yang berjalan untuk menggunakan Workload Identity Federation for GKE. Pilih strategi migrasi yang ideal untuk lingkungan Anda. Anda dapat membuat node pool baru dengan mengaktifkan Workload Identity Federation untuk GKE, atau memperbarui node pool yang ada untuk mengaktifkan Workload Identity Federation untuk GKE.
Anda hanya dapat mengaktifkan Workload Identity Federation for GKE di node pool jika Workload Identity Federation for GKE diaktifkan di cluster.
Buat node pool baru jika Anda juga perlu memodifikasi aplikasi agar kompatibel dengan Workload Identity Federation for GKE.
Membuat node pool baru
Semua node pool baru yang Anda buat akan menggunakan Workload Identity Federation for GKE secara default jika cluster telah mengaktifkan Workload Identity Federation for GKE. Untuk membuat node pool baru dengan Workload Identity Federation untuk 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 telah mengaktifkan Workload Identity Federation untuk GKE.
Flag --workload-metadata=GKE_METADATA
mengonfigurasi node pool untuk menggunakan server metadata GKE.
Sertakan flag tersebut agar pembuatan node pool 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 node pool yang ada setelah mengaktifkan Workload Identity Federation for GKE di cluster.
gcloud
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Untuk mengubah node pool yang ada agar dapat menggunakan Workload Identity Federation untuk GKE, jalankan perintah berikut:
gcloud container node-pools update NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --region=COMPUTE_REGION \ --workload-metadata=GKE_METADATA
Jika sebuah cluster mengaktifkan Workload Identity Federation untuk GKE, Anda dapat menonaktifkannya secara selektif pada node pool tertentu dengan menentukan
--workload-metadata=GCE_METADATA
secara eksplisit. Lihat Melindungi metadata cluster untuk mengetahui informasi selengkapnya.
Konsol
Untuk mengubah node pool yang ada agar dapat menggunakan Workload Identity Federation untuk 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 Simpan.
Mengonfigurasi aplikasi untuk menggunakan Workload Identity Federation for GKE
Agar aplikasi GKE dapat melakukan autentikasi ke Google Cloud API menggunakan Workload Identity Federation untuk GKE, Anda harus membuat kebijakan IAM untuk API tertentu. Entitas utama dalam kebijakan ini adalah ID akun utama IAM yang sesuai dengan workload, namespace, atau ServiceAccount. Proses ini menampilkan token akses gabungan yang dapat digunakan beban kerja Anda dalam panggilan API.
Atau, Anda dapat mengonfigurasi ServiceAccount Kubernetes untuk meniru identitas akun layanan IAM, yang mengonfigurasi GKE untuk menukar token akses gabungan dengan token akses dari Service Account Credentials API IAM. Untuk mengetahui detailnya, lihat bagian Alternatif: menautkan ServiceAccount Kubernetes ke IAM.
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 telah mengaktifkan Workload Identity Federation untuk GKE.LOCATION
: lokasi cluster Anda.
Buat namespace yang akan digunakan untuk akun layanan Kubernetes. Anda juga dapat menggunakan namespace
default
atau namespace apa pun yang sudah ada.kubectl create namespace NAMESPACE
Buat Akun Layanan Kubernetes yang akan digunakan aplikasi Anda. Anda juga dapat menggunakan Akun Layanan Kubernetes yang sudah ada di namespace mana pun. Jika Anda tidak menetapkan ServiceAccount ke workload, Kubernetes akan menetapkan ServiceAccount
default
di namespace.kubectl create serviceaccount KSA_NAME \ --namespace NAMESPACE
Ganti kode berikut:
KSA_NAME
: nama ServiceAccount Kubernetes baru Anda.NAMESPACE
: nama namespace Kubernetes untuk ServiceAccount.
Buat kebijakan izin IAM yang mereferensikan Kubernetes ServiceAccount. Sebagai praktik yang baik, berikan izin ke resource Google Cloud tertentu yang perlu diakses 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 angka Anda.
Anda dapat memberikan peran di resource Google Cloud mana pun yang mendukung kebijakan izin IAM. Sintaksis ID akun utama bergantung pada resource Kubernetes. Untuk daftar ID yang didukung, lihat ID utama untuk Workload Identity Federation for GKE.
Opsional: Mengonfigurasi opsi mesh layanan
Jika Anda menggunakan Istio atau Cloud Service Mesh untuk mengelola lingkungan, tambahkan anotasi
berikut ke kolom metadata.annotations
dalam spesifikasi Pod:
metadata:
annotations:
proxy.istio.io/config: '{ "holdApplicationUntilProxyStarts": true }'
Anotasi ini mencegah penampung Anda dimulai hingga proxy mesh layanan siap mengalihkan traffic dari aplikasi Anda.
Memverifikasi penyiapan Workload Identity Federation for GKE
Di bagian ini, Anda akan membuat bucket Cloud Storage dan memberikan akses lihat di bucket ke ServiceAccount Kubernetes yang Anda buat di bagian sebelumnya. Kemudian, Anda men-deploy beban kerja dan menguji apakah penampung dapat mencantumkan 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 angka 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
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 test-app.yaml
Tunggu hingga Pod siap. Untuk memeriksa status Pod, jalankan perintah berikut:
kubectl get pods --namespace=NAMESPACE
Setelah Pod siap, output-nya akan mirip dengan berikut ini:
NAME READY STATUS RESTARTS AGE test-pod 1/1 Running 0 5m27s
Buka sesi shell di Pod:
kubectl exec -it pods/test-pod --namespace=NAMESPACE -- /bin/bash
Dapatkan daftar objek dalam bucket:
curl -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://storage.googleapis.com/storage/v1/b/BUCKET/o"
Outputnya adalah sebagai berikut:
{ "kind": "storage#objects" }
Output ini menunjukkan bahwa Pod Anda dapat mengakses objek di bucket.
Alternatif: menautkan Akun Layanan Kubernetes ke IAM
Gunakan ID akun utama IAM untuk mengonfigurasi Workload Identity Federation untuk GKE. Namun, identitas gabungan ini memiliki batasan tertentu untuk setiap Google Cloud API 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 Akun Layanan Kubernetes:
kubectl create serviceaccount KSA_NAME \ --namespace=NAMESPACE
Buat akun layanan IAM. Anda juga dapat menggunakan akun layanan IAM yang ada di 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.
Berikan peran yang diperlukan akun layanan IAM Anda di 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 izin IAM yang memberi Kubernetes ServiceAccount akses untuk meniru identitas 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]"
Nama anggota harus menyertakan namespace dan nama Akun Layanan Kubernetes. Misalnya,
serviceAccount:example-project.svc.id.goog[example-namespace/example-serviceaccount]
.Anotasikan ServiceAccount Kubernetes agar GKE melihat link antara 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
Kebijakan izin IAM dan anotasi diperlukan saat Anda menggunakan metode ini.
Menggunakan Workload Identity Federation for 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 untuk 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 untuk GKE, lakukan hal 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='principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/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:
Buat Pod dan mulai 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 di cluster.
Cabut akses
Untuk mencabut akses ke akun utama, hapus kebijakan izin IAM yang Anda buat di bagian Mengonfigurasi aplikasi untuk menggunakan Workload Identity Federation untuk 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='principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KSA_NAME' \
--role='roles/artifactregistry.reader' \
--all
Menonaktifkan Workload Identity Federation untuk GKE
Anda hanya dapat menonaktifkan Workload Identity Federation for GKE di cluster Standar.
gcloud
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Nonaktifkan Workload Identity Federation for GKE di setiap node pool:
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 for 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 untuk GKE di setiap node pool, lakukan hal berikut untuk setiap node pool 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 Simpan.
Untuk menonaktifkan Workload Identity Federation for GKE untuk cluster, lakukan langkah berikut:
- Klik tab Detail.
- 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 for GKE di organisasi Anda
Dari perspektif keamanan, Workload Identity Federation untuk GKE memungkinkan GKE menyatakan 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 untuk GKE untuk organisasi Anda.
Lihat petunjuk ini untuk menonaktifkan Workload Identity Federation for GKE untuk 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.