Menggunakan Workload Identity

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

Untuk mengautentikasi layanan inferensi Knative, Anda harus:

  1. Mengaktifkan Workload Identity 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 penyaluran Knative baru yang menggunakan identitas yang Anda buat.

Mengaktifkan Workload Identity di cluster Anda

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

Konfigurasi izin untuk mengaktifkan semua metrik

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

Akun layanan binding

Anda perlu menyiapkan hubungan untuk Akun Layanan Kubernetes (KSA) agar dapat bertindak sebagai akun layanan Google (GSA). Beban kerja apa pun yang berjalan sebagai KSA yang Anda ikat, otomatis melakukan autentikasi sebagai GSA saat mengakses Google Cloud API. KSA yang Anda ikat harus ada di dalam cluster dan namespace layanan inferensi Knative tempat Anda ingin menggunakan Workload Identity. GSA dapat menjadi bagian dari project Google Cloud yang berbeda dengan project Google Cloud tempat cluster berada.

  1. Jika GSA tidak ada, buat GSA; jika tidak, langsung ke langkah berikutnya. Anda dapat membuat GSA untuk digunakan dengan inferensi Knative dalam project Google Cloud apa pun di organisasi, lalu menggunakannya 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 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 belum ada, buat akun di namespace Kubernetes yang sama dengan layanan inferensi Knative Anda. Jika tidak ada, lanjutkan ke langkah berikutnya:

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

    1. Izinkan KSA untuk meniru 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 bindingnya Anda buat.
      • GSA_NAME@GSA_PROJECT_ID dengan nama Akun Layanan Google dan ID project Google Cloud yang Anda buat bindingnya.

Men-deploy layanan baru untuk menggunakan Workload Identity

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

Konsol

  1. Buka penayangan Knative di konsol Google Cloud:

    Buka penayangan Knative

  2. Klik Buat Layanan jika Anda mengonfigurasi layanan baru yang akan di-deploy. Jika Anda mengonfigurasi layanan yang ada, klik layanan, 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 bagaimana layanan ini dipicu, pilih konektivitas yang ingin Anda gunakan untuk memanggil layanan.

  7. Klik Create untuk men-deploy image ke penayangan Knative dan tunggu hingga 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 workload identity.
  • 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 mereferensikan ke image container, misalnya, gcr.io/cloudrun/hello.
    • KSA_NAME dengan Akun Layanan Kubernetes yang Anda gunakan untuk membuat workload identity.

YAML

Anda dapat mendownload konfigurasi layanan yang ada ke dalam file YAML menggunakan perintah gcloud run services describe menggunakan flag --format=export. Anda kemudian dapat memodifikasi file YAML 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 Anda, 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 workload identity.
  3. Deploy konfigurasi ke layanan inferensi Knative Anda dengan menjalankan perintah berikut:

    gcloud run services replace service.yaml

Memigrasikan layanan yang ada untuk menggunakan Workload Identity

Jika Anda mengaktifkan Workload Identity pada cluster yang ada, setiap layanan di cluster yang ingin Anda gunakan untuk menggunakan Workload Identity harus dimigrasikan. Pelajari cara memigrasikan layanan yang sudah ada.

Langkah berikutnya

Pelajari cara mengelola akses ke layanan Anda.