Tentang akun layanan di GKE

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
  • Objek ServiceAccount di server Kubernetes API
  • Diberi cakupan ke namespace Kubernetes dalam cluster
  • Memberikan identitas untuk digunakan Pod di dalam cluster
Akun layanan IAM
  • Dikelola menggunakan IAM API
  • Diberi cakupan ke Cloud de Confiance project
  • 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 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.

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.

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

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

  • Akun layanan kustom:

    SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.s3ns.iam.gserviceaccount.com
    

    Ganti 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