Tentang akun layanan di GKE


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

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.

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

  1. Buka halaman Sambutan:

    Buka Selamat Datang

  2. Di kolom Project number, klik Copy to clipboard.
  3. Buka halaman IAM:

    Buka IAM

  4. Klik Berikan akses.
  5. Di kolom New principals, tentukan nilai berikut:
    PROJECT_NUMBER-compute@developer.gserviceaccount.com
    Ganti PROJECT_NUMBER dengan nomor project yang Anda salin.
  6. Di menu Select a role, pilih peran Kubernetes Engine Default Node Service Account.
  7. Klik Simpan.

gcloud

  1. 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
    
  2. 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