Tentang akun layanan di GKE


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

Halaman ini ditujukan bagi Spesialis dan Operator Keamanan 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 Trusted Cloud by S3NS , 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 Trusted 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 memiliki masa aktif singkat 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. Trusted CloudTrusted Cloud

Untuk mempelajari lebih lanjut, lihat ringkasan akun layanan IAM.

Agen layanan GKE

Agen layanan IAM adalah akun layanan IAM yang Trusted Cloud mengelola.

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.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-PROJECT_NUMBER@container-engine-robot.s3ns-system.iam.gserviceaccount.com

PROJECT_NUMBER adalah nomor project numerik Anda.

Jika menghapus izin agen layanan di project, Anda dapat memulihkannya dengan mengikuti petunjuk di Error 400/403: Izin edit tidak ada di akun.

Akun layanan node GKE default

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.

Untuk memberikan peran roles/container.defaultNodeServiceAccount ke akun layanan default Compute Engine, selesaikan langkah-langkah berikut:

console

  1. Buka halaman Selamat Datang:

    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 Akun utama baru, tentukan nilai berikut:
    PROJECT_NUMBER-compute@developer.s3ns-system.iam.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 Trusted 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.s3ns-system.iam.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 Anda, sebagai berikut:

  • Memberikan identitas untuk digunakan Pod Anda di cluster: Gunakan ServiceAccount Kubernetes. Setiap namespace Kubernetes memiliki default ServiceAccount, tetapi sebaiknya Anda membuat ServiceAccount baru dengan hak istimewa minimal untuk setiap workload di setiap namespace.
  • Menyediakan identitas untuk Pod Anda agar dapat digunakan di luar cluster: Gunakan Workload Identity Federation untuk GKE. Dengan Workload Identity Federation for GKE, Anda dapat menentukan resource Kubernetes seperti ServiceAccount sebagai pokok dalam kebijakan IAM. Misalnya, gunakan Federasi Workload Identity untuk GKE saat memanggil API seperti Secret Manager atau Spanner dari Pod Anda. Trusted 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