Menggunakan Workload Identity Federation untuk GKE

Pelajari cara mengautentikasi layanan penayangan Knative dengan Workload Identity Federation untuk GKE guna mengakses Google Cloud API seperti Compute API, Storage, dan Database API, atau Machine Learning API.

Untuk mengautentikasi layanan penayangan Knative, Anda harus:

  1. Mengaktifkan Workload Identity Federation for GKE di cluster Anda
  2. Konfigurasikan izin
  3. Ikat Akun Layanan Kubernetes (KSA) ke Akun Layanan Google (GSA)

Setelah mengikuti langkah-langkah ini, Anda dapat men-deploy layanan penayangan Knative baru yang menggunakan identitas yang Anda buat.

Mengaktifkan Workload Identity Federation for GKE di cluster Anda

Untuk menyiapkan Workload Identity Federation untuk GKE dengan penayangan Knative, Anda dapat menyiapkan Workload Identity Federation armada, bukan menggunakan file JSON Akun Layanan Google Cloud.

Mengonfigurasi izin untuk mengaktifkan semua metrik

Untuk mengaktifkan metrik, seperti melaporkan jumlah permintaan atau latensi permintaan ke Google Cloud Observability, Anda harus memberikan izin tulis untuk Cloud Monitoring. Misalnya, Anda dapat memberikan peran Monitoring Metric Writer (roles/monitoring.metricWriter) ke Akun Layanan Google yang dikaitkan dengan penayangan Knative karena menyertakan izin yang diperlukan untuk menulis data pemantauan. Lihat Menggunakan akun layanan untuk mengetahui informasi selengkapnya tentang cara membuat Akun Layanan Google.

Mengikat akun layanan

Anda perlu menyiapkan hubungan untuk Akun Layanan Kubernetes (KSA) agar dapat bertindak sebagai akun layanan Google (GSA). Setiap beban kerja yang berjalan sebagai KSA yang Anda ikat, akan otomatis melakukan autentikasi sebagai GSA saat mengakses Google Cloud API. KSA yang Anda ikat harus ada dalam cluster dan namespace layanan penayangan Knative yang ingin Anda gunakan Workload Identity Federation untuk GKE. GSA dapat berasal dari project Google Cloud yang berbeda dengan project Google Cloud tempat cluster berada.

  1. Jika GSA tidak ada, buat GSA; jika tidak, lanjutkan ke langkah berikutnya. Anda dapat membuat GSA untuk digunakan dengan penayangan Knative dalam project Google Cloud mana pun di organisasi, lalu menggunakannya dari dalam project Google Cloud tempat layanan penayangan Knative Anda berjalan.

    Untuk membuat GSA baru, jalankan perintah berikut:

    gcloud iam service-accounts create GSA_NAME

    Ganti GSA_NAME dengan nama akun layanan Google yang baru.

    Untuk mengetahui informasi selengkapnya tentang cara menggunakan akun layanan Google dengan layanan penayangan Knative, lihat Menggunakan akun layanan.

  2. Pastikan GSA Anda memiliki peran IAM yang Anda butuhkan. Anda dapat memberikan peran tambahan menggunakan perintah berikut:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member "serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com" \
        --role "ROLE_NAME"

    Ganti:

    • PROJECT_ID: dengan project ID Google Cloud tempat Akun Layanan Google Anda berada.
    • GSA_NAME dengan nama Akun Layanan Google Anda.
    • ROLE_NAME dengan peran IAM yang akan ditetapkan ke GSA Anda, seperti roles/monitoring.metricWriter.
  3. Jika Akun Layanan Kubernetes tidak ada, buat akun layanan di namespace Kubernetes yang sama dengan layanan penayangan Knative Anda; jika tidak, lewati ke langkah berikutnya:

    kubectl create serviceaccount --namespace K8S_NAMESPACE KSA_NAME
  4. Ikat akun layanan Kubernetes dan Google untuk membuat identitas, lalu deploy ke cluster Anda:

    1. Izinkan KSA meniru identitas GSA dengan membuat binding kebijakan IAM di antara keduanya.

      gcloud iam service-accounts add-iam-policy-binding \
      --role roles/iam.workloadIdentityUser \
      --member "serviceAccount:PROJECT_ID.svc.id.goog[K8S_NAMESPACE/KSA_NAME]" \
      GSA_NAME@GSA_PROJECT_ID.iam.gserviceaccount.com

      Ganti:

      • PROJECT_ID dengan ID project Google Cloud untuk cluster tempat Akun Layanan Kubernetes dan layanan penayangan Knative Anda berada.
      • K8S_NAMESPACE/KSA_NAME dengan namespace dan nama Akun Layanan Kubernetes Anda.
      • GSA_NAME@GSA_PROJECT_ID dengan nama Akun Layanan Google dan ID project Google Cloud Anda. Anda dapat menggunakan Akun Layanan Google apa pun di organisasi Anda. Untuk melihat Akun Layanan Google Anda, lihat Mencantumkan akun layanan.
    2. Tambahkan anotasi iam.gke.io/gcp-service-account=GSA_NAME@GSA_PROJECT_ID ke KSA, menggunakan alamat email GSA.

      kubectl annotate serviceaccount \
      --namespace K8S_NAMESPACE KSA_NAME \
       iam.gke.io/gcp-service-account=GSA_NAME@GSA_PROJECT_ID.iam.gserviceaccount.com

      Ganti:

      • K8S_NAMESPACE/KSA_NAME dengan namespace dan nama Akun Layanan Kubernetes yang Anda buat binding-nya.
      • GSA_NAME@GSA_PROJECT_ID dengan nama Akun Layanan Google dan ID project Google Cloud yang Anda buat binding-nya.

Men-deploy layanan baru untuk menggunakan Workload Identity Federation for GKE

Deploy layanan penayangan Knative baru yang menggunakan Workload Identity Federation for GKE yang Anda buat.

Konsol

  1. Buka penayangan Knative di konsol Google Cloud:

    Buka Inferensi Knative

  2. Klik Buat Layanan jika Anda mengonfigurasi layanan baru yang akan di-deploy. Jika Anda mengonfigurasi layanan yang sudah ada, klik layanan tersebut, lalu klik Edit & Deploy New Revision.

  3. Di bagian Setelan lanjutan, klik Penampung.

  4. Klik menu dropdown akun Layanan dan pilih akun layanan yang diinginkan.

  5. Klik Berikutnya untuk melanjutkan ke bagian berikutnya.

  6. Di bagian Configure how this service is triggered, pilih konektivitas yang ingin Anda gunakan untuk memanggil layanan.

  7. Klik Create untuk men-deploy image ke layanan Knative dan tunggu deployment selesai.

Command line

  • Untuk layanan yang ada, tetapkan Akun Layanan Kubernetes dengan menjalankan perintah gcloud run services update dengan parameter berikut:

    gcloud run services update SERVICE --service-account KSA_NAME

    Ganti:

    • SERVICE dengan nama layanan penayangan Knative Anda.
    • KSA_NAME dengan Akun Layanan Kubernetes yang Anda gunakan untuk membuat identitas beban kerja.
  • Untuk layanan baru, tetapkan Akun Layanan Kubernetes dengan menjalankan perintah gcloud run deploy dengan parameter --service-account:

    gcloud run deploy --image IMAGE_URL --service-account KSA_NAME

    Ganti:

    • IMAGE_URL dengan referensi ke image container, misalnya, gcr.io/cloudrun/hello.
    • KSA_NAME dengan Akun Layanan Kubernetes yang Anda gunakan untuk membuat identitas beban kerja.

YAML

Anda dapat mendownload konfigurasi layanan yang ada ke dalam file YAML dengan perintah gcloud run services describe menggunakan tanda --format=export. Kemudian, Anda dapat mengubah file YAML tersebut dan men-deploy perubahan tersebut dengan perintah gcloud run services replace. Anda harus memastikan bahwa Anda hanya mengubah atribut yang ditentukan.

  1. Download konfigurasi layanan Anda ke file bernama service.yaml di ruang kerja lokal:

    gcloud run services describe SERVICE --format export > service.yaml

    Ganti SERVICE dengan nama layanan penayangan Knative Anda.

  2. Di file lokal, perbarui atribut serviceAccountName::

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        spec:
          serviceAccountName: KSA_NAME

    Ganti

    • SERVICE dengan nama layanan penayangan Knative Anda.
    • KSA_NAME dengan Akun Layanan Kubernetes yang Anda gunakan untuk membuat identitas beban kerja.
  3. Deploy konfigurasi ke layanan penayangan Knative Anda dengan menjalankan perintah berikut:

    gcloud run services replace service.yaml

Memigrasikan layanan yang ada untuk menggunakan Workload Identity Federation for GKE

Jika Anda mengaktifkan Workload Identity Federation for GKE di cluster yang ada, setiap layanan di cluster yang ingin Anda gunakan Workload Identity Federation for GKE harus dimigrasikan. Pelajari cara memigrasikan layanan yang ada.

Langkah berikutnya

Pelajari cara mengelola akses ke layanan Anda.