Halaman ini menjelaskan akun layanan di Google Kubernetes Engine (GKE), yang menyediakan identitas untuk aplikasi.
Akun layanan adalah identitas yang dimaksudkan untuk digunakan oleh aplikasi, bukan orang. Di GKE, Anda berinteraksi dengan akun layanan Kubernetes dan akun layanan Identity and Access Management.
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 | |
---|---|
ServiceAccount Kubernetes |
|
Akun Layanan IAM |
|
ServiceAccounts 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.
Token pembawa 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, dalam dokumentasi Kubernetes, lihat Akun Layanan.
- Untuk mempelajari cara membuat ServiceAccount baru, memberikan izin menggunakan role-based access control (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-configuration
di GKE API.
Merotasi kredensial Akun Layanan Kubernetes
Jika kredensial akun layanan Kubernetes disusupi, gunakan salah satu opsi berikut untuk mencabut kredensial:
- Buat ulang Pod: Token pembawa terikat dengan setiap UID Pod unik, sehingga membuat ulang Pod akan membatalkan kredensial sebelumnya.
- Buat ulang akun layanan Kubernetes: Token pembawa terikat dengan 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.
- Melakukan rotasi kredensial: Operasi ini mencabut semua kredensial akun layanan Kubernetes di cluster Anda. Rotasi juga akan mengubah sertifikat CA dan alamat IP cluster Anda. Untuk mengetahui detailnya, lihat rotasi kredensial.
Akun Layanan IAM
Akun layanan IAM dikelola di level project menggunakan IAM API. Anda dapat menggunakan akun layanan ini untuk melakukan tindakan seperti memanggil Google Cloud API secara terprogram dan mengelola izin untuk aplikasi yang berjalan di produk Google Cloud.
Untuk mempelajari lebih lanjut, lihat ringkasan akun layanan IAM.
Agen layanan GKE
Agen layanan IAM adalah akun layanan IAM yang dikelola Google Cloud.
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-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com
PROJECT_NUMBER
adalah nomor project
angka Anda.
Jika menghapus izin agen layanan di project, Anda dapat memulihkannya dengan mengikuti petunjuk dalam Error 400/403: Tidak ada izin edit di akun.
Akun layanan node GKE default
GKE menggunakan akun layanan IAM yang dilampirkan ke node Anda untuk
menjalankan tugas sistem seperti logging dan pemantauan. Setidaknya, akun layanan node ini
harus memiliki
peran Akun Layanan Node Default Kubernetes Engine
(roles/container.defaultNodeServiceAccount
) di project Anda. Secara default, GKE menggunakan akun layanan default Compute Engine, yang dibuat secara otomatis 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, akun layanan tersebut mungkin memiliki lebih banyak izin daripada yang diperlukan GKE, yang dapat mengekspos Anda pada risiko keamanan.
Untuk memberikan peran roles/container.defaultNodeServiceAccount
ke akun layanan default Compute Engine, selesaikan langkah-langkah berikut:
console
- Buka halaman Sambutan:
- Di kolom Project number, klik Copy to clipboard.
- Buka halaman IAM:
- Klik Berikan akses.
- Di kolom New principals, tentukan nilai berikut:
GantiPROJECT_NUMBER-compute@developer.gserviceaccount.com
PROJECT_NUMBER
dengan nomor project yang Anda salin. - Di menu Select a role, pilih peran Kubernetes Engine Default Node Service Account.
- Klik Simpan.
gcloud
- Temukan nomor project Google Cloud Anda:
gcloud projects describe PROJECT_ID \ --format="value(projectNumber)"
Ganti
PROJECT_ID
dengan project ID Anda.Outputnya mirip dengan hal berikut ini:
12345678901
- Berikan peran
roles/container.defaultNodeServiceAccount
ke akun layanan default Compute Engine:gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" \ --role="roles/container.defaultNodeServiceAccount"
Ganti
PROJECT_NUMBER
dengan nomor project dari langkah sebelumnya.
Jangan menonaktifkan akun layanan Compute Engine default, kecuali jika Anda bermigrasi ke akun layanan yang dikelola pengguna.
Kapan harus menggunakan akun layanan tertentu
Jenis akun layanan yang Anda gunakan bergantung pada jenis identitas yang ingin Anda berikan untuk aplikasi, sebagai berikut:
- Berikan identitas untuk digunakan Pod Anda di cluster: Gunakan
Akun Layanan Kubernetes. Setiap namespace Kubernetes memiliki ServiceAccount
default
, tetapi sebaiknya Anda membuat ServiceAccount baru dengan hak istimewa minimal untuk setiap beban kerja di setiap namespace. - Berikan identitas untuk digunakan Pod Anda di luar cluster: Gunakan Workload Identity Federation untuk GKE. Workload Identity Federation for GKE memungkinkan Anda menentukan resource Kubernetes seperti ServiceAccounts sebagai akun utama dalam kebijakan IAM. Misalnya, gunakan Workload Identity Federation untuk GKE saat memanggil Google Cloud API seperti Secret Manager atau Spanner dari Pod Anda.
- Berikan identitas default untuk node Anda: Gunakan akun layanan IAM kustom dengan hak istimewa minimal saat Anda membuat cluster atau node GKE. Jika Anda tidak menggunakan akun layanan IAM kustom, GKE akan menggunakan akun layanan default Compute Engine.
Langkah selanjutnya
- Pelajari cara menggunakan akun layanan Google dengan hak istimewa minimal.
- Pelajari cara memberikan peran kepada akun utama.