Dokumen ini menjelaskan akun layanan di Google Kubernetes Engine (GKE) dan cara akun layanan tersebut memberikan identitas untuk aplikasi. Anda akan mempelajari berbagai jenis akun layanan dan kapan harus menggunakan setiap jenis untuk mengautentikasi akses ke resource dalam GKE tanpa mengandalkan kredensial pribadi.
Dokumen ini ditujukan untuk Spesialis keamanan dan Operator yang membuat dan mengelola akun layanan untuk berinteraksi dengan aplikasi GKE. Untuk mempelajari lebih lanjut peran umum dan contoh tugas yang kami referensikan dalam konten Google Cloud , lihat Peran dan tugas pengguna GKE umum.
Akun layanan Kubernetes dan akun layanan IAM
Tabel berikut menjelaskan perbedaan utama antara akun layanan Kubernetes dan akun layanan IAM:
| Jenis akun layanan di GKE | |
|---|---|
| Kubernetes ServiceAccount |
|
| Akun Layanan IAM |
|
ServiceAccount Kubernetes
Akun layanan Kubernetes dikelola di tingkat cluster dan ada di server Kubernetes API sebagai objek ServiceAccount. Dokumentasi Kubernetes dan dokumentasi GKE sering menggunakan istilah ServiceAccount untuk membedakan resource Kubernetes ini dari akun layanan di lingkungan lain seperti IAM.
Anda membuat ServiceAccount Kubernetes di namespace, lalu menetapkan ServiceAccount tersebut ke Pod menggunakan kolom serviceAccountName dalam manifes Pod. Proses kubelet di node mendapatkan token pembawa yang berumur pendek untuk
ServiceAccount yang ditetapkan dan memasang token sebagai volume yang diproyeksikan di
Pod. Secara default, volume yang diproyeksikan ini memiliki nama yang diawali dengan
prefiks kube-api-access-. Semua volume yang dimulai dengan awalan ini dikelola
oleh GKE, yang berarti Anda tidak dapat mengubah ukuran volume
ini. Untuk pemantauan penggunaan disk yang lebih akurat, kecualikan volume yang dimulai dengan awalan kube-api-access- dari konfigurasi pemantauan Anda.
Token pemilik jangka pendek adalah token web JSON (JWT) yang ditandatangani oleh server API, yang merupakan penyedia OpenID Connect (OIDC). Untuk memvalidasi token
pembawa, dapatkan kunci validasi publik untuk cluster dengan memanggil
metode projects.locations.clusters.getJwks
di GKE API.
- Untuk mempelajari dasar-dasar ServiceAccount Kubernetes, lihat Service Accounts dalam dokumentasi Kubernetes.
- Untuk mempelajari cara membuat ServiceAccount baru, memberikan izin menggunakan kontrol akses berbasis peran (RBAC), dan menetapkan ServiceAccount ke Pod, lihat Mengonfigurasi Akun Layanan untuk Pod.
- Untuk praktik terbaik saat mengelola ServiceAccount Kubernetes, lihat Praktik terbaik untuk RBAC.
- Untuk membaca konfigurasi OIDC server Kubernetes API untuk cluster,
panggil metode
projects.locations.clusters.well-known.getOpenid-configurationdi GKE API.
Kredensial ServiceAccount Kubernetes yang disusupi
Jika kredensial akun layanan Kubernetes disusupi, gunakan salah satu opsi berikut untuk mencabut kredensial:
- Buat ulang Pod Anda: Token pembawa terikat ke setiap UID Pod yang unik, sehingga membuat ulang Pod akan membatalkan kredensial sebelumnya.
- Buat ulang akun layanan Kubernetes: Token pembawa terikat ke UID objek ServiceAccount di Kubernetes API. Hapus ServiceAccount dan buat ServiceAccount baru dengan nama yang sama. Token sebelumnya menjadi tidak valid karena UID ServiceAccount baru berbeda.
- Lakukan rotasi kredensial: Operasi ini akan mencabut semua kredensial akun layanan Kubernetes di cluster Anda. Rotasi ini juga mengubah sertifikat CA dan alamat IP cluster Anda. Untuk mengetahui detailnya, lihat rotasi kredensial.
Akun Layanan IAM
Akun layanan IAM dikelola di tingkat project menggunakan IAM API. Anda dapat menggunakan akun layanan ini untuk melakukan tindakan seperti memanggil API secara terprogram dan mengelola izin untuk aplikasi yang berjalan di produk. Google CloudGoogle Cloud
Untuk mempelajari lebih lanjut, lihat ringkasan akun layanan IAM.
Agen layanan GKE
Agen layanan IAM adalah akun layanan IAM yang Google Cloud mengelola. GKE menggunakan dua agen layanan berikut:
Kubernetes Engine Service Agent
GKE menggunakan Agen Layanan Kubernetes Engine untuk mengelola siklus proses resource cluster atas nama Anda, seperti node, disk, dan load balancer. Agen layanan ini memiliki domain
container-engine-robot.iam.gserviceaccount.com dan diberi
peran
Kubernetes Engine Service Agent (roles/container.serviceAgent) di project Anda saat Anda mengaktifkan
GKE API.
ID agen layanan ini adalah sebagai berikut:
service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com
CLUSTER_PROJECT_NUMBER adalah
nomor project
numerik dari project yang berisi cluster GKE Anda.
Kubernetes Engine Default Node Service Agent
GKE menggunakan Agen Layanan Node Default Kubernetes Engine untuk mendukung logging dan pemantauan node Kubernetes untuk cluster yang menggunakan Kubernetes versi 1.33 dan yang lebih baru. Agen layanan ini memiliki domain gcp-sa-gkenode.iam.gserviceaccount.com dan diberi peran Kubernetes Engine Default Node Service Agent (roles/container.defaultNodeServiceAgent) di project Anda saat Anda mengaktifkan GKE API.
ID agen layanan ini adalah sebagai berikut:
service-CLUSTER_PROJECT_NUMBER@gcp-sa-gkenode.iam.gserviceaccount.com
CLUSTER_PROJECT_NUMBER adalah
nomor project
numerik dari project yang berisi cluster GKE Anda.
Jika menghapus izin agen layanan di project Anda, Anda dapat memulihkannya dengan mengikuti petunjuk di Error 400/403: Izin edit tidak ada di akun.
Akun layanan node
GKE menggunakan akun layanan IAM yang terlampir ke node Anda untuk menjalankan tugas sistem seperti logging dan pemantauan. Setidaknya, akun layanan node ini harus memiliki peran
Kubernetes Engine Default Node Service Account
(roles/container.defaultNodeServiceAccount) di project Anda. Secara default,
GKE menggunakan
akun layanan default Compute Engine,
yang otomatis dibuat di project Anda, sebagai akun layanan node.
Jika organisasi Anda menerapkan
batasan kebijakan organisasi iam.automaticIamGrantsForDefaultServiceAccounts, akun layanan Compute Engine default di project Anda mungkin
tidak otomatis mendapatkan izin yang diperlukan untuk GKE.
Jika Anda menggunakan akun layanan default Compute Engine untuk fungsi lain di project atau organisasi Anda, akun layanan tersebut mungkin memiliki lebih banyak izin daripada yang dibutuhkan GKE, yang dapat membuat Anda berisiko keamanan.
Jangan menonaktifkan akun layanan Compute Engine default, kecuali jika Anda bermigrasi ke akun layanan yang dikelola pengguna.
Alamat email akun layanan node
Alamat email akun layanan node Anda bergantung pada jenis akun layanan, sebagai berikut:
Akun layanan Compute Engine default:
CLUSTER_PROJECT_NUMBER-compute@developer.gserviceaccount.comGanti
CLUSTER_PROJECT_NUMBERdengan nomor project yang berisi cluster Anda, seperti1234567890.Akun layanan kustom:
SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.comGanti kode berikut:
SERVICE_ACCOUNT_NAME: nama akun layanan.SERVICE_ACCOUNT_PROJECT_ID: ID project Google Cloud project yang berisi akun layanan.
Akun layanan node dan agen layanan project
Saat Anda membuat cluster atau node pool, agen layanan di project cluster menggunakan akun layanan yang terlampir ke node untuk melakukan tugas seperti penarikan image. Secara default, agen layanan di project cluster memiliki akses berikut ke akun layanan node dalam project tersebut:
- Agen layanan Compute Engine dalam project dapat membuat token akses untuk akun layanan node dalam project yang sama.
- Agen layanan GKE dalam project dapat meniru identitas akun layanan node dalam project yang sama.
Beberapa organisasi menggunakan project khusus untuk mengelola semua akun layanan. Jika akun layanan node Anda tidak ada di project cluster, agen layanan di project cluster tidak dapat membuat token atau meniru identitas akun layanan tersebut. Anda harus memberikan peran berikut kepada agen layanan di project cluster pada akun layanan:
- Service Account Token Creator
(
roles/iam.serviceAccountTokenCreator) di akun layanan untuk agen layanan Compute Engine di project cluster Anda. - Pengguna Akun Layanan
(
roles/iam.serviceAccountUser) di akun layanan ke agen layanan GKE di project cluster Anda.
Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi penggunaan akun layanan di seluruh project.
Kapan harus menggunakan akun layanan tertentu
Jenis akun layanan yang Anda gunakan bergantung pada jenis identitas yang ingin Anda berikan untuk aplikasi Anda, sebagai berikut:
- Memberikan identitas untuk digunakan Pod Anda di cluster: Gunakan
ServiceAccount Kubernetes. Setiap namespace Kubernetes memiliki ServiceAccount
default, tetapi sebaiknya Anda membuat ServiceAccount baru dengan hak istimewa minimal untuk setiap workload di setiap namespace. - Menyediakan identitas untuk digunakan Pod Anda di luar cluster: Gunakan Workload Identity Federation for GKE. Dengan Workload Identity Federation for GKE, Anda dapat menentukan resource Kubernetes seperti ServiceAccount sebagai pokok dalam kebijakan IAM. Misalnya, gunakan Workload Identity Federation untuk GKE saat memanggil API seperti Secret Manager atau Spanner dari Pod Anda. Google Cloud
- Menyediakan identitas default untuk node Anda: Gunakan akun layanan IAM dengan hak istimewa minimal kustom saat Anda membuat cluster atau node GKE. Jika Anda tidak menggunakan akun layanan IAM kustom, GKE akan menggunakan akun layanan default Compute Engine.
Langkah berikutnya
- Pelajari cara menggunakan akun layanan Google dengan hak istimewa minimal.
- Pelajari cara memberikan peran kepada akun utama.