Tentang akun layanan di GKE

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
  • ServiceAccount di server Kubernetes API
  • Ditetapkan ke namespace Kubernetes dalam cluster
  • Menyediakan identitas untuk digunakan Pod di dalam cluster
Akun Layanan IAM
  • Mengelola menggunakan IAM API
  • Ditetapkan ke project Google Cloud
  • Memberikan identitas untuk aplikasi dalam project

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.

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.com
    

    Ganti CLUSTER_PROJECT_NUMBER dengan nomor project yang berisi cluster Anda, seperti 1234567890.

  • Akun layanan kustom:

    SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com
    

    Ganti 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