Mengonfigurasi akun layanan node GKE

Node Google Kubernetes Engine (GKE) Anda menggunakan akun layanan Identity and Access Management (IAM) untuk tugas seperti mencatat aktivitas dan menarik image container untuk workload. Dokumen ini menunjukkan kepada administrator platform dan engineer keamanan cara memberikan peran ke akun layanan untuk kasus penggunaan tertentu dan cara membuat akun layanan kustom, bukan menggunakan akun layanan default. Untuk mengetahui informasi selengkapnya, lihat Akun layanan node.

Sebelum memulai

Sebelum memulai, pastikan Anda telah melakukan tugas berikut:

  • Aktifkan Google Kubernetes Engine API.
  • Aktifkan Google Kubernetes Engine API
  • Jika ingin menggunakan Google Cloud CLI untuk tugas ini, instal lalu lakukan inisialisasi gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan perintah gcloud components update. gcloud CLI versi sebelumnya mungkin tidak mendukung menjalankan perintah dalam dokumen ini.

Peran yang diperlukan

Untuk mendapatkan izin yang diperlukan untuk mengelola akun layanan dan peran IAM, minta administrator untuk memberi Anda peran IAM berikut:

  • Security Admin (roles/iam.securityAdmin) di project cluster
  • Konfigurasi akun layanan di project terpisah: Security Admin (roles/iam.securityAdmin) di project akun layanan

Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.

Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.

Memberikan peran minimum yang diperlukan untuk GKE

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.

Bagian berikut menunjukkan cara memberikan peran roles/container.defaultNodeServiceAccount ke akun layanan Compute Engine default atau ke akun layanan kustom baru yang Anda buat.

Mengonfigurasi akun layanan Compute Engine default

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

Konsol

  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 Grant access.
  5. Di kolom Akun utama baru, 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 Google Cloud nomor project 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.

Mengonfigurasi akun layanan node kustom

Untuk membuat akun layanan kustom dan memberikan peran yang diperlukan untuk GKE, selesaikan langkah-langkah berikut:

Konsol

  1. Buka halaman Akun Layanan.

    Buka halaman Service accounts

  2. Klik Buat akun layanan.
  3. Masukkan nama untuk akun layanan. Kolom Service account ID secara otomatis membuat ID unik untuk akun layanan berdasarkan nama.
  4. Klik Buat dan lanjutkan.
  5. Di menu Select a role, pilih peran Kubernetes Engine Default Node Service Account.
  6. Klik Done.

gcloud

  1. Buat akun layanan:
    gcloud iam service-accounts create SA_NAME

    GantiSA_NAME dengan nama unik yang mengidentifikasi akun layanan.

  2. Berikan peran Kubernetes Engine Default Node Service Account (roles/container.defaultNodeServiceAccount) ke akun layanan:
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:SA_NAME@PROJECT_ID.iam.gserviceaccount.com" \
        --role=roles/container.defaultNodeServiceAccount

    Ganti kode berikut:

    • PROJECT_ID: Google Cloud Project ID Anda.
    • SA_NAME: nama akun layanan yang Anda buat.

Terraform

Buat akun layanan IAM dan berikan peran roles/container.defaultNodeServiceAccount di project:

resource "google_service_account" "default" {
  account_id   = "gke-node-service-account"
  display_name = "GKE node service account"
}

data "google_project" "project" {
}

resource "google_project_iam_member" "default" {
  project = data.google_project.project.project_id
  role    = "roles/container.defaultNodeServiceAccount"
  member  = "serviceAccount:${google_service_account.default.email}"
}

Config Connector

Catatan: Langkah ini memerlukan Config Connector. Ikuti petunjuk penginstalan untuk menginstal Config Connector di cluster Anda.

  1. Untuk membuat akun layanan, download resource berikut sebagai service-account.yaml:
    apiVersion: iam.cnrm.cloud.google.com/v1beta1
    kind: IAMServiceAccount
    metadata:
      name: [SA_NAME]
    spec:
      displayName: [DISPLAY_NAME]

    Ganti kode berikut:

    • [SA_NAME]: nama akun layanan baru.
    • [DISPLAY_NAME]: nama tampilan untuk akun layanan.
  2. Buat akun layanan:
    kubectl apply -f service-account.yaml
  3. Terapkan peran roles/logging.logWriter ke akun layanan:
    1. Download resource berikut sebagai policy-logging.yaml.
      apiVersion: iam.cnrm.cloud.google.com/v1beta1
      kind: IAMPolicyMember
      metadata:
        name: policy-logging
      spec:
        member: serviceAccount:[SA_NAME]@[PROJECT_ID].iam.gserviceaccount.com
        role: roles/logging.logWriter
        resourceRef:
          kind: Project
          name: [PROJECT_ID]

      Ganti kode berikut:

      • [SA_NAME]: nama akun layanan.
      • [PROJECT_ID]: Google Cloud Project ID Anda.
    2. Terapkan peran ke akun layanan:
      kubectl apply -f policy-logging.yaml
  4. Terapkan peran roles/monitoring.metricWriter ke akun layanan:
    1. Download resource berikut sebagai policy-metrics-writer.yaml. Ganti [SA_NAME] dan [PROJECT_ID] dengan informasi Anda sendiri.
      apiVersion: iam.cnrm.cloud.google.com/v1beta1
      kind: IAMPolicyMember
      metadata:
        name: policy-metrics-writer
      spec:
        member: serviceAccount:[SA_NAME]@[PROJECT_ID].iam.gserviceaccount.com
        role: roles/monitoring.metricWriter
        resourceRef:
          kind: Project
          name: [PROJECT_ID]

      Ganti kode berikut:

      • [SA_NAME]: nama akun layanan.
      • [PROJECT_ID]: Google Cloud Project ID Anda.
    2. Terapkan peran ke akun layanan:
      kubectl apply -f policy-metrics-writer.yaml
  5. Terapkan peran roles/monitoring.viewer ke akun layanan:
    1. Download resource berikut sebagai policy-monitoring.yaml.
      apiVersion: iam.cnrm.cloud.google.com/v1beta1
      kind: IAMPolicyMember
      metadata:
        name: policy-monitoring
      spec:
        member: serviceAccount:[SA_NAME]@[PROJECT_ID].iam.gserviceaccount.com
        role: roles/monitoring.viewer
        resourceRef:
          kind: Project
          name: [PROJECT_ID]

      Ganti kode berikut:

      • [SA_NAME]: nama akun layanan.
      • [PROJECT_ID]: Google Cloud Project ID Anda.
    2. Terapkan peran ke akun layanan:
      kubectl apply -f policy-monitoring.yaml
  6. Terapkan peran roles/autoscaling.metricsWriter ke akun layanan:
    1. Download resource berikut sebagai policy-autoscaling-metrics-writer.yaml.
      apiVersion: iam.cnrm.cloud.google.com/v1beta1
      kind: IAMPolicyMember
      metadata:
        name: policy-autoscaling-metrics-writer
      spec:
        member: serviceAccount:[SA_NAME]@[PROJECT_ID].iam.gserviceaccount.com
        role: roles/autoscaling.metricsWriter
        resourceRef:
          kind: Project
          name: [PROJECT_ID]

      Ganti kode berikut:

      • [SA_NAME]: nama akun layanan.
      • [PROJECT_ID]: Google Cloud Project ID Anda.
    2. Terapkan peran ke akun layanan:
      kubectl apply -f policy-autoscaling-metrics-writer.yaml

Anda juga dapat menggunakan akun layanan ini untuk resource dalam project lain. Untuk mendapatkan petunjuk, lihat Mengaktifkan peniruan identitas akun layanan di seluruh project.

Mengizinkan akun utama melampirkan akun layanan kustom

Anda dapat melampirkan akun layanan kustom saat membuat cluster atau node pool. Agar akun utama (seperti administrator platform) dapat menggunakan akun layanan kustom untuk membuat resource GKE, berikan peran Service Account User (roles/iam.serviceAccountUser) pada akun layanan kustom tersebut kepada akun utama. Untuk memberikan peran ini, pilih salah satu opsi berikut:

Konsol

  1. Di konsol Google Cloud , buka halaman Service accounts:

    Buka halaman Service accounts

    Di pemilih resource, pilih project yang berisi akun layanan kustom Anda.

  2. Centang kotak untuk akun layanan kustom yang Anda buat untuk digunakan dengan node GKE.

  3. Klik Kelola akses. Panel Kelola Akses akan terbuka.

  4. Klik Add principal. Panel Berikan akses akan terbuka.

  5. Di kolom New principals, tentukan akun utama, seperti grup administrator.

  6. Di menu drop-down Select a role, pilih peran Service Account User.

  7. Klik Simpan. Panel Berikan akses akan ditutup.

  8. Tutup panel Kelola Akses.

gcloud

Berikan peran roles/iam.serviceAccountUser:

gcloud iam service-accounts add-iam-policy-binding \
    SA_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \
    --member=PRINCIPAL \
    --role=roles/iam.serviceAccountUser

Ganti kode berikut:

  • SA_NAME: nama akun layanan kustom.
  • SERVICE_ACCOUNT_PROJECT_ID: project ID yang berisi akun layanan kustom.
  • PRINCIPAL: ID akun utama, seperti user:baklavainthebalkans@example.com.

Config Connector

Catatan: Langkah ini memerlukan Config Connector. Ikuti petunjuk penginstalan untuk menginstal Config Connector di cluster Anda.

Terapkan peran iam.serviceAccountUser ke akun layanan Anda. Download resource berikut sebagai policy-service-account-user.yaml. Ganti [SA_NAME] dan [PROJECT_ID] dengan informasi Anda sendiri.

apiVersion: iam.cnrm.cloud.google.com/v1beta1
kind: IAMPolicyMember
metadata:
  name: policy-service-account-user
spec:
  member: serviceAccount:[SA_NAME]@[PROJECT_ID].iam.gserviceaccount.com
  role: roles/iam.serviceAccountUser
  resourceRef:
    kind: Project
    name: [PROJECT_ID]
kubectl apply -f policy-service-account-user.yaml

Setelah Anda memberikan peran di akun layanan, akun utama tersebut dapat menggunakan akun layanan tersebut untuk membuat cluster dan node pool. Untuk informasi selengkapnya, lihat dokumen berikut:

Mengonfigurasi penggunaan akun layanan di seluruh project

Jika akun layanan node Anda tidak berada dalam project yang sama dengan cluster, agen layanan di project cluster memerlukan izin tambahan pada akun layanan. Untuk mengetahui informasi selengkapnya, lihat Akun layanan node dan agen layanan project.

Untuk memberikan peran yang diperlukan pada akun layanan node yang tidak ada di project cluster Anda, ikuti langkah-langkah berikut:

  1. Untuk mengaktifkan lampiran akun layanan lintas project, perbarui kebijakan organisasi Anda.
  2. Untuk memberikan peran yang diperlukan pada akun layanan kustom kepada agen layanan di project cluster Anda, pilih salah satu opsi berikut:

    Konsol

    1. Di konsol Google Cloud , buka halaman Service accounts.

      Buka halaman Service accounts

    2. Centang kotak untuk akun layanan kustom yang Anda buat untuk digunakan dengan node GKE.

    3. Klik Kelola akses. Panel Kelola Akses akan terbuka.

    4. Berikan peran Service Account Token Creator kepada agen layanan Compute Engine di project cluster Anda:

      1. Di panel Manage Access, klik Add principal. Panel Berikan akses akan terbuka.
      2. Di kolom New principals, tentukan alamat email agen layanan Compute Engine di project cluster Anda:

        service-CLUSTER_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com
        

        Ganti CLUSTER_PROJECT_NUMBER dengan nomor project project cluster Anda.

      3. Di menu Select a role, pilih peran Service Account Token Creator.

      4. Klik Simpan. Panel Berikan akses akan ditutup.

    5. Berikan peran Service Account User kepada agen layanan GKE di project cluster Anda:

      1. Di panel Manage Access, klik Add principal. Panel Berikan akses akan terbuka.
      2. Di kolom New principals, tentukan alamat email agen layanan GKE di project cluster Anda:

        service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com
        
      3. Di menu Select a role, pilih peran Service Account User.

      4. Klik Simpan. Panel Berikan akses akan ditutup.

    6. Tutup panel Kelola Akses.

    gcloud

    1. Dapatkan nomor project project cluster Anda:

      gcloud projects describe CLUSTER_PROJECT_ID \
          --format='value(projectNumber)'
      

      Ganti CLUSTER_PROJECT_ID dengan project ID project cluster Anda.

      Outputnya mirip dengan 123456789.

    2. Berikan peran roles/iam.serviceAccountTokenCreator pada akun layanan kustom kepada agen layanan Compute Engine di project cluster Anda:

      gcloud iam service-accounts add-iam-policy-binding \
          SA_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \
          --member=service-CLUSTER_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \
          --role=roles/iam.serviceAccountTokenCreator
      

      Ganti kode berikut:

      • SA_NAME: nama akun layanan kustom.
      • SERVICE_ACCOUNT_PROJECT_ID: project ID project yang berisi akun layanan kustom Anda.
      • CLUSTER_PROJECT_NUMBER: nomor project dari project cluster Anda.
    3. Beri peran roles/iam.serviceAccountUser pada akun layanan kustom kepada agen layanan GKE di project cluster Anda:

      gcloud iam service-accounts add-iam-policy-binding \
          SA_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \
          --member=service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com \
          --role=roles/iam.serviceAccountUser
      

Mengizinkan penarikan image dari repositori pribadi

Jika memiliki image di repositori Artifact Registry pribadi, Anda harus memberi akun layanan node akses ke repositori tersebut. Meskipun Anda menggunakan akun layanan Compute Engine default, Anda mungkin perlu memberikan akses akun layanan ke repositori Anda jika repositori tersebut berada di project lain.

Untuk menarik image pribadi dari Artifact Registry, berikan peran Pembaca Artifact Registry (roles/artifactregistry.reader) di repositori ke akun layanan node Anda.

Konsol

  1. Di konsol Google Cloud , buka halaman Repositories.

    Buka Repositori

  2. Centang kotak untuk repositori Anda.

  3. Klik Tampilkan panel info. Panel informasi repositori akan terbuka.

  4. Di tab Permissions, klik Add principal. Panel Berikan akses akan terbuka.

  5. Di kolom New principals, tentukan alamat email akun layanan node Anda.

  6. Klik Select a role untuk membuka dialog pemilihan peran.

  7. Pilih peran Artifact Registry Reader.

  8. Klik Simpan.

gcloud

Berikan peran roles/artifactregistry.reader pada repositori:

gcloud artifacts repositories add-iam-policy-binding REPOSITORY_NAME \
    --member=serviceAccount:SERVICE_ACCOUNT_EMAIL \
    --project=REPOSITORY_PROJECT_ID \
    --role=roles/artifactregistry.reader

Ganti kode berikut:

  • REPOSITORY_NAME: nama repositori Artifact Registry.
  • SERVICE_ACCOUNT_EMAIL: alamat email akun layanan node.
  • REPOSITORY_PROJECT_ID: project ID dari project yang berisi repositori Anda.

Config Connector

Catatan: Langkah ini memerlukan Config Connector. Ikuti petunjuk penginstalan untuk menginstal Config Connector di cluster Anda.

  1. Simpan manifes berikut sebagai policy-artifact-registry-reader.yaml:

    apiVersion: iam.cnrm.cloud.google.com/v1beta1
    kind: IAMPolicyMember
    metadata:
      name: policy-artifact-registry-reader
    spec:
      member: serviceAccount:"SA_NAME"@"PROJECT_ID".iam.gserviceaccount.com
      role: roles/artifactregistry.reader
      resourceRef:
        apiVersion: artifactregistry.cnrm.cloud.google.com/v1beta1
        kind: ArtifactRegistryRepository
        name: "REPOSITORY_NAME"

    Ganti kode berikut:

    • SA_NAME: nama akun layanan IAM Anda.
    • PROJECT_ID: Google Cloud Project ID Anda.
    • REPOSITORY_NAME: nama repositori Artifact Registry Anda.
  2. Berikan peran Pembaca Artifact Registry ke akun layanan:

    kubectl apply -f policy-artifact-registry-reader.yaml
    

Langkah berikutnya