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 |
|
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 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.
- Untuk mempelajari dasar-dasar ServiceAccount Kubernetes, lihat Service Accounts dalam 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-configuration
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
- Buka halaman Selamat Datang:
- Di kolom Project number, klik Copy to clipboard.
- Buka halaman IAM:
- Klik Berikan akses.
- Di kolom Akun utama baru, tentukan nilai berikut:
GantiPROJECT_NUMBER-compute@developer.s3ns-system.iam.gserviceaccount.com
PROJECT_NUMBER
dengan nomor project yang Anda salin. - Di menu Select a role, pilih peran Kubernetes Engine Default Node Service Account.
- Klik Simpan.
gcloud
- 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
- 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
- Pelajari cara menggunakan akun layanan Google dengan hak istimewa minimal.
- Pelajari cara memberikan peran kepada akun utama.