Workload Identity Federation untuk GKE adalah cara yang direkomendasikan untuk workload yang berjalan di Google Kubernetes Engine (GKE) untuk mengakses layanan Google Cloud secara aman dan lebih mudah dikelola.
Workload Identity Federation untuk GKE tersedia melalui IAM Workload Identity Federation, yang menyediakan identitas untuk workload yang berjalan di lingkungan di dalam dan di luar Google Cloud. Anda dapat menggunakan IAM Workload Identity Federation untuk melakukan autentikasi secara aman ke Google Cloud API yang didukung dari workload yang berjalan di, misalnya, AWS, Azure, dan Kubernetes yang dikelola sendiri. Di GKE, Google Cloud mengelola kumpulan workload identity dan penyedia untuk Anda dan tidak memerlukan penyedia identitas eksternal.
- Untuk mempelajari Workload Identity Federation di lingkungan lain, lihat Workload Identity Federation.
- Untuk mengaktifkan dan menggunakan Workload Identity Federation untuk GKE, lihat Mengakses Google Cloud API dari workload GKE.
- Untuk memberikan dukungan Workload Identity Federation untuk cluster di fleet, gunakan identitas workload armada.
Terminologi
Halaman ini membedakan antara Akun layanan Kubernetes dan akun layanan Identity and Access Management (IAM).
- Akun layanan Kubernetes
- Resource Kubernetes yang memberikan identitas untuk proses yang berjalan di pod GKE Anda.
- Akun layanan IAM
- Resource Google Cloud yang memungkinkan aplikasi melakukan panggilan yang sah ke Google Cloud API.
Apa itu Workload Identity Federation untuk GKE?
Aplikasi yang berjalan di GKE mungkin memerlukan akses ke Google Cloud API seperti Compute Engine API, BigQuery Storage API, atau Machine Learning API.
Workload Identity Federation for GKE memungkinkan Anda menggunakan kebijakan IAM untuk memberikan Akses workload Kubernetes di cluster GKE Anda ke Google Cloud API tanpa memerlukan konfigurasi manual atau kurang aman metode seperti file kunci akun layanan. Menggunakan Workload Identity Federation for GKE memungkinkan Anda menetapkan untuk setiap aplikasi di cluster Anda.
Workload Identity Federation untuk GKE menggantikan kebutuhan penggunaan Penyembunyian metadata. {i>Metadata<i} sensitif yang dilindungi oleh penyembunyian {i>metadata <i}juga dilindungi oleh Workload Identity Federation untuk GKE.
Cara kerja Workload Identity Federation untuk GKE
Saat Anda mengaktifkan Workload Identity Federation untuk GKE pada cluster, GKE melakukan berikut ini:
Membuat kumpulan identitas beban kerja tetap untuk Google Cloud cluster project dengan format berikut:
PROJECT_ID.svc.id.goog
Kumpulan workload identity menyediakan format penamaan yang memungkinkan IAM untuk memahami dan memercayai kredensial Kubernetes.
Mendaftarkan cluster GKE sebagai penyedia identitas di workload identity pool.
Men-deploy server metadata GKE, yang mencegat permintaan kredensial dari workload, di setiap node.
Membuat kebijakan izin IAM pada resource Google Cloud
Untuk memberikan akses dengan Workload Identity Federation untuk GKE, Anda membuat IAM
izinkan kebijakan yang memberikan akses ke resource Google Cloud tertentu
ke akun utama yang sesuai dengan identitas aplikasi Anda. Misalnya,
Anda dapat memberikan izin akses baca
di bucket Cloud Storage ke semua Pod yang
gunakan database-reader
Kubernetes ServiceAccount.
Untuk daftar referensi yang mendukung kebijakan izinkan, lihat Jenis resource yang menerima kebijakan izinkan.
Menggunakan kondisi dalam kebijakan IAM
Anda juga dapat membatasi cakupan akses dengan menetapkan kondisi di izinkan kebijakan. Kondisi adalah metode yang dapat diperluas yang menetapkan kapan izin kebijakan harus diterapkan. Misalnya, Anda bisa menggunakan kondisi untuk memberikan akses ke workload di resource Google Cloud tertentu, sehingga menghilangkan perlu mengelola akses tersebut secara manual.
Kondisi mungkin juga berguna jika Anda menetapkan kebijakan izin pada project, folder, atau level organisasi, bukan pada resource tertentu seperti secret Secret Manager atau bucket Cloud Storage.
Untuk menambahkan kondisi ke kebijakan yang diizinkan, gunakan referensi berikut:
- Mengelola binding peran bersyarat: Menambahkan, mengubah, atau menghapus binding peran bersyarat.
- Mengonfigurasi akses sementara: Gunakan syarat untuk menetapkan akses berbatas waktu ke resource Google Cloud yang diizinkan kebijakan izin yang relevan.
- Tag dan akses bersyarat: Menggunakan kondisi untuk hanya menerapkan kebijakan izinkan saat sumber daya memiliki tag tertentu.
Contoh ekspresi berikut adalah untuk skenario umum saat Anda mungkin menggunakan kondisi tertentu. Untuk daftar atribut yang tersedia dalam ekspresi, lihat Referensi atribut untuk Ketentuan IAM.
Contoh ekspresi kondisi | ||
---|---|---|
Izinkan akses sebelum waktu yang ditentukan | request.time < timestamp(' Ganti |
|
Izinkan akses jika resource dalam permintaan memiliki tag yang ditentukan | resource.matchTag(' Ganti kode berikut:
|
Mereferensikan resource Kubernetes dalam kebijakan IAM
Dalam kebijakan IAM, Anda merujuk ke resource Kubernetes dengan menggunakan ID utama IAM untuk memilih resource. Ini ID memiliki sintaksis berikut:
PREFIX://iam.googleapis.com/projects/1234567890/locations/global/workloadIdentityPools/example-project.svc.id.goog/SELECTOR
Dalam contoh ini, pertimbangkan kolom berikut:
PREFIX
: harusprincipal
atauprincipalSet
bergantung pada resource yang Anda pilih.principal
ditujukan untuk resource tertentu, seperti satu Akun Layanan.principalSet
adalah untuk beberapa resource milik resource yang ditentukan, seperti semua Pod dalam cluster tertentu.SELECTOR
: string yang memilih jenis utama. Sebagai contoh,kubernetes.serviceaccount.uid/SERVICEACCOUNT_UID
memilih ServiceAccount berdasarkan UID-nya.
Tabel berikut menunjukkan jenis utama yang didukung di GKE:
Jenis ID utama | Sintaks |
---|---|
Semua Pod yang menggunakan ServiceAccount Kubernetes tertentu | Pilih ServiceAccount berdasarkan nama:
principal://iam.googleapis.com/projects/ Ganti kode berikut:
Pilih ServiceAccount berdasarkan UID: principal://iam.googleapis.com/projects/ Ganti kode berikut:
|
Semua Pod dalam namespace, apa pun akun layanan atau cluster | principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/namespace/NAMESPACE Ganti kode berikut:
|
Semua Pod dalam cluster tertentu | principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/kubernetes.cluster/https://container.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/clusters/CLUSTER_NAME Ganti kode berikut:
|
Alur kredensial
Misalnya, saat beban kerja mengirim permintaan untuk mengakses Google Cloud API, saat menggunakan library klien Google Cloud, autentikasi berikut langkah terjadi:
- Kredensial default aplikasi (ADC) meminta token akses Google Cloud dari Compute Engine server metadata yang berjalan di VM.
- Server metadata GKE mencegat permintaan token dan meminta server Kubernetes API untuk token ServiceAccount Kubernetes yang mengidentifikasi workload permintaan. Kredensial ini adalah token web JSON (JWT) yang ditandatangani oleh server API.
- Server metadata GKE menggunakan Security Token Service untuk menukar JWT dengan token akses Google Cloud gabungan berumur pendek yang mereferensikan identitas workload Kubernetes.
- Server metadata GKE menyediakan token akses gabungan terhadap beban kerja.
Selanjutnya, workload dapat mengakses Google Cloud API mana pun yang ID utama IAM dari workload yang dapat diakses.
Kesamaan identitas
Jika metadata di ID utama Anda sama untuk workload di beberapa cluster yang berbagi kumpulan workload identity karena mereka termasuk dalam di project Google Cloud yang sama, IAM mengidentifikasi workload tersebut sama saja. Misalnya, jika Anda memiliki namespace yang sama dalam dua kelompok dan Anda memberikan akses ke namespace tersebut di IAM, workload di dalam di kedua cluster mendapatkan akses tersebut. Anda dapat membatasi akses ini ke cluster tertentu dengan menggunakan kebijakan IAM bersyarat.
Misalnya, perhatikan diagram berikut. Cluster A dan B termasuk dalam
kumpulan workload identity yang sama. Google Cloud mengidentifikasi aplikasi yang menggunakan
ServiceAccount back-ksa
di namespace backend
baik Cluster A maupun
Kluster B dengan identitas yang sama. IAM tidak membedakan antara
cluster yang melakukan panggilan.
Kesamaan identitas ini juga berarti bahwa Anda harus dapat memercayai setiap cluster dalam workload identity pool tertentu. Misalnya, jika sebuah cluster baru, Cluster C
dalam contoh sebelumnya dimiliki oleh tim yang tidak
tepercaya, mereka dapat membuat
Namespace backend
dan mengakses Google Cloud API menggunakan back-ksa
ServiceAccount, seperti Cluster A dan Cluster B.
Untuk menghindari akses yang tidak tepercaya, tempatkan cluster Anda dalam project terpisah untuk memastikan mendapatkan kumpulan workload identity yang berbeda, atau memastikan bahwa namespace nama berbeda satu sama lain untuk menghindari pengidentifikasi utama yang sama.
Memahami server metadata GKE
Setiap node di GKE dengan Workload Identity Federation for GKE yang aktif menyimpan metadata di server metadata GKE. Server metadata GKE adalah subset endpoint server metadata Compute Engine yang diperlukan untuk workload Kubernetes.
Server metadata GKE berjalan sebagai DaemonSet, dengan satu Pod di
setiap node Linux atau layanan Windows native di setiap node Windows di
cluster. Server metadata mencegat permintaan HTTP ke http://metadata.google.internal
(169.254.169.254:80
). Misalnya, permintaan GET
/computeMetadata/v1/instance/service-accounts/default/token
mengambil token untuk akun layanan IAM yang telah dikonfigurasi oleh Pod untuk ditiru.
Traffic ke server metadata GKE tidak pernah keluar dari instance VM yang menghosting Pod.
Tabel berikut menjelaskan subset endpoint server metadata Compute Engine yang tersedia dengan server metadata GKE. Untuk mengetahui daftar lengkap endpoint yang tersedia di server metadata Compute Engine, baca Nilai metadata VM default.
Metadata instance
Metadata instance disimpan di direktori berikut ini.
http://metadata.google.internal/computeMetadata/v1/instance/
Entri | Deskripsi |
---|---|
hostname |
Nama host node Anda. |
id |
ID unik node Anda. |
service-accounts/ |
Direktori akun layanan yang terkait dengan node. Untuk setiap akun layanan, tersedia informasi berikut:
|
zone |
Zona Compute Engine dari node GKE Anda. |
Atribut instance
Atribut instance disimpan di direktori berikut.
http://metadata.google.internal/computeMetadata/v1/instance/attributes/
Entri | Deskripsi |
---|---|
cluster-location |
Zona atau region Compute Engine dari cluster Anda. |
cluster-name |
Nama cluster GKE Anda. |
cluster-uid |
UID cluster GKE Anda. |
Metadata project
Metadata project cluster disimpan di direktori berikut.
http://metadata.google.internal/computeMetadata/v1/project/
Entri | Deskripsi |
---|---|
project-id |
ID Project Google Cloud Anda. |
numeric-project-id |
Nomor project Google Cloud Anda. |
Pembatasan Workload Identity Federation untuk GKE
Anda tidak dapat mengubah nama workload identity pool yang dibuat GKE untuk project Google Cloud.
Saat GKE mengaktifkan server metadata GKE pada suatu node pool, Pod tidak dapat lagi mengakses server metadata Compute Engine. Sebagai gantinya, server metadata GKE mencegat permintaan yang dibuat dari pod ini ke endpoint metadata, kecuali Pod yang berjalan di jaringan host.
Server metadata GKE memerlukan waktu beberapa detik untuk mulai menerima permintaan pada Pod yang baru dibuat. Oleh karena itu, upaya untuk melakukan otentikasi dengan menggunakan Workload Identity Federation for GKE dalam beberapa detik pertama sejak masa aktif Pod gagal. Mencoba kembali panggilan akan menyelesaikan masalah. Baca artikel Pemecahan masalah untuk mengetahui detail selengkapnya.
Agen logging dan pemantauan bawaan GKE terus menggunakan akun layanan node.
Workload Identity Federation for GKE memerlukan penyiapan manual untuk inferensi Knative untuk terus merilis metrik permintaan.
Workload Identity Federation untuk GKE menetapkan batas 200 koneksi ke GKE server metadata untuk setiap {i>node<i} untuk menghindari masalah memori. Anda mungkin akan mengalami waktu tunggu jika node Anda melebihi batas ini.
Workload Identity Federation untuk GKE untuk node Windows Server tersedia di GKE versi 1.18.16-gke.1200, 1.19.8-gke.1300, 1.20.4-gke.1500 dan yang lebih baru.
Server metadata GKE menggunakan resource memori yang sebanding dengan total jumlah akun layanan Kubernetes di cluster Anda. Jika cluster Anda memiliki lebih dari 3.000 akun layanan Kubernetes, kubelet mungkin akan menghentikan Pod server metadata. Untuk melakukan mitigasi, lihat Pemecahan masalah.
Alternatif selain Workload Identity Federation untuk GKE
Anda dapat menggunakan salah satu alternatif berikut dari Workload Identity Federation for GKE untuk mengakses Google Cloud API dari GKE. Sebaiknya gunakan Workload Identity Federation for GKE karena alternatif ini mengharuskan Anda memastikan penyusupan keamanan.
Gunakan akun layanan default Compute Engine untuk node Anda. Anda dapat menjalankan node pool sebagai akun layanan IAM apa pun dalam project. Jika Anda tidak menentukan akun layanan selama kumpulan node pembuatan, GKE menggunakan akun layanan default Compute Engine untuk proyek tersebut. Akun layanan Compute Engine digunakan bersama oleh semua beban kerja yang di-deploy pada node tersebut. Hal ini dapat mengakibatkan penyediaan izin yang berlebihan, sehingga melanggar prinsip hak istimewa terendah dan tidak sesuai untuk cluster multi-tenant.
Ekspor kunci akun layanan dan simpan mereka sebagai Secret Kubernetes yang dipasang ke Pod sebagai volume.
Langkah selanjutnya
- Pelajari cara mengaktifkan dan mengonfigurasi Workload Identity Federation untuk GKE.
- Pelajari server metadata Compute Engine lebih lanjut.