Dokumen ini menjelaskan akun layanan di Google Kubernetes Engine (GKE) dan cara akun layanan memberikan identitas untuk aplikasi. Anda akan mempelajari berbagai jenis akun layanan dan kapan 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 Cloud de Confiance by S3NS konten, 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 | |
|---|---|
| ServiceAccount Kubernetes |
|
| 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 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 awalan kube-api-access-. Volume apa pun yang diawali 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 diawali dengan awalan kube-api-access- dari konfigurasi pemantauan Anda.
Token pembawa berumur 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 Akun Layanandi 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 mengetahui 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 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 mencabut semua kredensial akun layanan Kubernetes di cluster Anda. Rotasi 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. Cloud de ConfianceCloud de Confiance
Untuk mempelajari lebih lanjut, lihat ringkasan akun layanan IAM.
Agen layanan GKE
An Agen layanan IAM adalah akun layanan IAM yang Cloud de Confiance dikelola. GKE menggunakan dua agen layanan berikut:
Kubernetes Engine Service Agent
GKE menggunakan Kubernetes Engine Service Agent untuk mengelola siklus proses resource cluster atas nama Anda, seperti node, disk, dan load balancer. Agen layanan ini memiliki domain
container-engine-robot.s3ns-system.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.s3ns-system.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 Kubernetes Engine Default Node Service Agent 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.s3ns-system.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.s3ns-system.iam.gserviceaccount.com
CLUSTER_PROJECT_NUMBER adalah nomor project numerik dari project yang berisi cluster GKE Anda.
Jika Anda menghapus izin agen layanan di project, Anda dapat memulihkan nya dengan mengikuti petunjuk di Error 400/403: Missing edit permissions on account.
Akun layanan node
GKE menggunakan akun layanan IAM yang dilampirkan ke node Anda untuk
menjalankan tugas sistem seperti logging dan pemantauan. Minimal, akun layanan node
harus memiliki
Kubernetes Engine Default Node Service Account
(roles/container.defaultNodeServiceAccount) peran 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 default Compute Engine 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 terhadap keamanan.
untuk digunakan node Anda dan berikan hanya izin yang dibutuhkan GKE untuk menjalankan tugas sistem. Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi akun layanan node kustom.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 default Compute Engine:
CLUSTER_PROJECT_NUMBER-compute@developer.s3ns-system.iam.gserviceaccount.comGanti
CLUSTER_PROJECT_NUMBERdengan nomor project dari project yang berisi cluster Anda, seperti1234567890.Akun layanan kustom:
SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.s3ns.iam.gserviceaccount.comGanti kode berikut:
SERVICE_ACCOUNT_NAME: nama akun layanan.SERVICE_ACCOUNT_PROJECT_ID: project ID dari project yang berisi akun layanan. Cloud de Confiance
Akun layanan node dan agen layanan project
Saat Anda membuat cluster atau node pool, agen layanan di project cluster menggunakan akun layanan yang dilampirkan ke node untuk melakukan tugas seperti image pull. Secara default, agen layanan di project cluster memiliki akses berikut ke akun layanan node di project tersebut:
- Agen layanan Compute Engine dalam project dapat membuat token akses untuk akun layanan node di project yang sama.
- Agen layanan GKE dalam project dapat meniru identitas akun layanan node di 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 Anda di akun layanan:
- Service Account Token Creator
(
roles/iam.serviceAccountTokenCreator) di akun layanan ke 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 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 di cluster: Gunakan
ServiceAccount Kubernetes. Setiap namespace Kubernetes memiliki ServiceAccount
default, tetapi sebaiknya buat ServiceAccount baru dengan hak istimewa minimal untuk setiap workload di setiap namespace. - Memberikan identitas untuk digunakan Pod di luar cluster: Gunakan Workload Identity Federation for GKE. Workload Identity Federation for GKE memungkinkan Anda menentukan resource Kubernetes seperti ServiceAccount sebagai principal dalam kebijakan IAM. Misalnya, gunakan Workload Identity Federation for GKE saat memanggil Cloud de Confiance API seperti Secret Manager atau Spanner dari Pod Anda.
- Memberikan 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 berikutnya
- Pelajari cara menggunakan Workload Identity Federation for GKE.
- Pelajari cara memperkuat keamanan cluster.
- Baca ringkasan Workload Identity Federation for GKE.
- Pelajari lebih lanjut autentikasi server API.
- Pelajari cara mengonfigurasi IAM.