Mengaktifkan Workload Identity dengan apigeectl

Topik ini menjelaskan cara mengaktifkan Workload Identity untuk Apigee Hybrid menggunakan apigeectl.

Jika Anda menggunakan chart Helm untuk menginstal dan mengelola Apigee Hybrid, lihat Mengaktifkan Workload Identity dengan chart Helm.

Ringkasan

Workload Identity adalah cara agar aplikasi yang berjalan dalam GKE (Google Kubernetes Engine) dapat mengakses layanan Google Cloud. Untuk mengetahui ringkasan Workload Identity, lihat:

Akun layanan IAM Google Cloud adalah identitas yang dapat digunakan aplikasi untuk membuat permintaan ke Google API. Akun layanan ini disebut sebagai GSA (Akun Layanan Google) dalam dokumen tersebut. Untuk informasi lebih lanjut tentang GSA, lihat Akun layanan.

Secara terpisah, Kubernetes juga memiliki konsep akun layanan. Akun layanan memberikan identitas untuk proses yang berjalan di dalam Pod. Akun layanan Kubernetes adalah resource Kubernetes, sedangkan akun layanan Google khusus untuk Google Cloud. Untuk mengetahui informasi tentang akun layanan Kubernetes, lihat Mengonfigurasi Akun Layanan untuk Pod dalam dokumentasi Kubernetes.

Dengan Apigee Hybrid 1.4 dan yang lebih baru, Apigee membuat dan menggunakan akun layanan Kubernetes untuk setiap jenis komponen. Dengan mengaktifkan Workload Identity, komponen hybrid dapat berinteraksi dengan akun layanan Kubernetes.

Akun layanan Google di Apigee Hybrid tanpa Workload Identity

Tanpa menggunakan Workload Identity, Anda harus menautkan akun layanan Google ke setiap komponen dalam file override.yaml dengan referensi ke file sertifikat atau secret Kubernetes. Contoh:

Variabel lingkungan yang digunakan dalam prosedur ini

Prosedur ini menggunakan variabel lingkungan berikut. Tetapkan string ini di command shell atau ganti dalam contoh kode dengan nilai sebenarnya:

  • APIGEECTL_HOME: Direktori tempat Anda menginstal apigeectl.
  • CLUSTER_LOCATION: Region atau zona cluster Anda, misalnya: us-west1.
  • ENV_NAME: Lalu, nama lingkungan Apigee.
  • HYBRID_FILES: Direktori file hybrid Anda, misalnya hybrid-base-directory/hybrid-files.
  • ORG_NAME: Nama organisasi Apigee Anda.
  • PROJECT_ID: ID project Google Cloud Anda.
  • NAMESPACE: Namespace Apigee Anda (biasanya "apigee").

Verifikasi variabel lingkungan:

echo $PROJECT_ID
echo $ORG_NAME
echo $ENV_NAME
echo $NAMESPACE
echo $CLUSTER_LOCATION
echo $APIGEECTL_HOME
echo $HYBRID_FILES

Lakukan inisialisasi variabel apa pun yang Anda perlukan:

export PROJECT_ID=my-project-id
export ORG_NAME=$PROJECT_ID
export ENV_NAME=my-environment-name
export NAMESPACE=apigee
export CLUSTER_LOCATION=my-cluster-location
export APIGEECTL_HOME=hybrid-base-directory/apigeectl
export HYBRID_FILES=hybrid-base-directory/hybrid-files

File kunci Workload Identity dan akun layanan

Saat menjalankan Apigee Hybrid di GKE, praktik standarnya adalah membuat dan mendownload kunci pribadi (file .json) untuk setiap akun layanan. Saat menggunakan Workload Identity, Anda tidak perlu mendownload kunci pribadi akun layanan dan menambahkannya ke cluster GKE.

Jika telah mendownload file kunci akun layanan sebagai bagian dari penginstalan hybrid Apigee, Anda dapat menghapusnya setelah mengaktifkan Workload Identity. Pada sebagian besar penginstalan, keduanya berada di direktori hybrid-base-directory/hybrid-files/service-accounts/.

Mengaktifkan Workload Identity untuk Apigee Hybrid

Untuk memulai, ikuti petunjuk di bagian Mempersiapkan untuk mengaktifkan Workload Identity guna mengupdate node pool dan menginisialisasi variabel sebelum mengaktifkan Workload Identity.

Kemudian, ikuti petunjuk di bagian Menetapkan workloadIdentityEnabled: true dan membuat akun layanan untuk mengaktifkan Workload Identity pada penginstalan hybrid Apigee Anda.

Bersiap untuk mengaktifkan Workload Identity

Sebelum memulai proses penginstalan, ikuti langkah-langkah di bagian ini.

  1. Tetapkan project ke project yang Anda ubah:
    gcloud config set project $PROJECT_ID
  2. Dapatkan kredensial gcloud dari cluster tempat Anda mengaktifkan Workload Identity dengan perintah berikut:
    gcloud container clusters get-credentials ${CLUSTER_NAME} \
      --region ${CLUSTER_LOCATION} \
      --project ${PROJECT_ID}
  3. Pastikan Workload Identity sudah aktif untuk cluster GKE yang menjalankan Apigee dengan perintah berikut:
    gcloud container clusters describe $CLUSTER_NAME --region $CLUSTER_LOCATION --project $PROJECT_ID

    Output harus mencakup sesuatu seperti berikut:

    …
      …
      status: RUNNING
      subnetwork: default
      workloadIdentityConfig:
        workloadPool: my-project-id.svc.id.goog

    Jika perlu, aktifkan workload identity di cluster. Operasi ini dapat memerlukan waktu hingga 30 menit:

      gcloud container clusters update $CLUSTER_NAME \
      --workload-pool=$PROJECT_ID.svc.id.goog \
      --project $PROJECT_ID \
      --region $CLUSTER_LOCATION

    Untuk mengetahui informasi selengkapnya, lihat Mengaktifkan Workload Identity.

  4. Pastikan Workload Identity diaktifkan di setiap kumpulan node.
    1. Buat daftar kumpulan node Anda dengan perintah berikut:
      gcloud container node-pools list \
        --cluster $CLUSTER_NAME \
        --region $CLUSTER_LOCATION \
        --project $PROJECT_ID

      Output Anda akan terlihat seperti:

        NAME            MACHINE_TYPE   DISK_SIZE_GB  NODE_VERSION
        apigee-runtime  e2-standard-4  100           1.23.12-gke.100
        apigee-data     e2-standard-4  100           1.23.12-gke.100
    2. Pastikan Workload Identity diaktifkan per kumpulan node menggunakan perintah berikut untuk setiap kumpulan node:
      gcloud container node-pools update NODE_POOL_NAME \
        --cluster=$CLUSTER_NAME \
        --region $CLUSTER_LOCATION \
        --project $PROJECT_ID \
        --workload-metadata=GKE_METADATA

      Dengan NODE_POOL_NAME adalah nama setiap kumpulan node.

Memverifikasi atau membuat akun layanan Google

Akun layanan Google dibuat untuk banyak komponen hybrid Apigee selama penginstalan. Gunakan prosedur ini untuk memverifikasi akun layanan Google dan membuat akun yang diperlukan.

  1. Periksa nama akun layanan Google untuk project Anda dengan perintah berikut:
    gcloud iam service-accounts list --project $PROJECT_ID

    Output Anda akan terlihat seperti:

    Prod

    Untuk lingkungan non-produksi:

    DISPLAY NAME         EMAIL                                                      DISABLED
    apigee-cassandra     apigee-cassandra@my_project_id.iam.gserviceaccount.com     False
    apigee-logger        apigee-logger@my_project_id.iam.gserviceaccount.com        False
    apigee-mart          apigee-mart@my_project_id.iam.gserviceaccount.com          False
    apigee-metrics       apigee-metrics@my_project_id.iam.gserviceaccount.com       False
    apigee-runtime       apigee-runtime@my_project_id.iam.gserviceaccount.com       False
    apigee-synchronizer  apigee-synchronizer@my_project_id.iam.gserviceaccount.com  False
    apigee-udca          apigee-udca@my_project_id.iam.gserviceaccount.com          False
    apigee-watcher       apigee-watcher@my_project_id.iam.gserviceaccount.com       False
    

    Non-produk

    Untuk lingkungan non-produksi:

    DISPLAY NAME         EMAIL                                                      DISABLED
    apigee-non-prod      apigee-non-prod@my_project_id.iam.gserviceaccount.com      False
    

    Jika Anda perlu membuat akun layanan Google untuk project, ada dua metode yang dapat Anda gunakan:

    • Gunakan alat create-service-account yang disertakan dengan apigee di direktori apigeectl/tools/. Alat ini dapat membuat semua akun layanan dengan satu perintah atau Anda dapat membuatnya satu per satu.
    • Gunakan perintah gcloud iam service-accounts create untuk membuat akun layanan satu per satu dan perintah gcloud projects add-iam-policy-binding untuk menetapkan peran yang sesuai ke setiap akun layanan. Metode ini mengharuskan Anda membuat setiap akun layanan satu per satu, tetapi memungkinkan Anda menghindari download file kunci.

    create-service-account

    Gunakan perintah berikut untuk membuat akun layanan Google per komponen:

    Prod

    Untuk lingkungan non-produksi:

    $APIGEECTL_HOME/tools/create-service-account --env prod --dir $APIGEECTL_HOME/../service-accounts

    Perintah ini akan membuat akun layanan berikut:

    • apigee-cassandra
    • apigee-logger
    • apigee-mart
    • apigee-metrics
    • apigee-runtime
    • apigee-synchronizer
    • apigee-udca
    • apigee-watcher

    Non-produk

    Untuk lingkungan non-produksi:

    $APIGEECTL_HOME/tools/create-service-account --env non-prod --dir $APIGEECTL_HOME/../service-accounts

    Perintah ini akan membuat satu akun layanan, apigee-non-prod, dengan semua peran yang ditetapkan yang diperlukan untuk mengelola semua komponen Apigee.

    gcloud

    Buat akun layanan berikut dan tetapkan perannya.

    1. Akun layanan: apigee-cassandra, peran: roles/storage.objectAdmin

      Buat akun:

      gcloud iam service-accounts create apigee-cassandra \
        --display-name="apigee-cassandra" \
        --project $PROJECT_ID
                  

      Tetapkan peran:

      gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member="serviceAccount:apigee-cassandra@$PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/storage.objectAdmin"
                  
    2. Akun layanan: apigee-logger, peran: roles/logging.logWriter

      Buat akun:

      gcloud iam service-accounts create apigee-logger \
        --display-name="apigee-logger" \
        --project $PROJECT_ID
                  

      Tetapkan peran:

      gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member="serviceAccount:apigee-logger@$PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/logging.logWriter"
                  
    3. Akun layanan: apigee-mart, peran: roles/apigeeconnect.Agent

      Buat akun:

      gcloud iam service-accounts create apigee-mart \
        --display-name="apigee-mart" \
        --project $PROJECT_ID
                  

      Tetapkan peran:

      gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member="serviceAccount:apigee-mart@$PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/apigeeconnect.Agent"
                  
    4. Akun layanan: apigee-metrics, peran: roles/monitoring.metricWriter

      Buat akun:

      gcloud iam service-accounts create apigee-metrics \
        --display-name="apigee-metrics" \
        --project $PROJECT_ID
                  

      Tetapkan peran:

      gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member="serviceAccount:apigee-metrics@$PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/monitoring.metricWriter"
                  
    5. Akun layanan: apigee-runtime, peran: Tidak ada peran yang ditetapkan.

      Buat akun:

      gcloud iam service-accounts create apigee-runtime \
        --display-name="apigee-runtime" \
        --project $PROJECT_ID
                  
    6. Akun layanan: apigee-synchronizer, peran: roles/apigee.synchronizerManager

      Buat akun:

      gcloud iam service-accounts create apigee-synchronizer \
        --display-name="apigee-synchronizer" \
        --project $PROJECT_ID
                  

      Tetapkan peran:

      gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member="serviceAccount:apigee-synchronizer@$PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/apigee.synchronizerManager"
                  
    7. Akun layanan: apigee-udca, peran: roles/apigee.analyticsAgent

      Buat akun:

      gcloud iam service-accounts create apigee-udca \
        --display-name="apigee-udca" \
        --project $PROJECT_ID
                  

      Tetapkan peran:

      gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member="serviceAccount:apigee-udca@$PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/apigee.analyticsAgent"
                  
    8. Akun layanan: apigee-watcher, peran: roles/apigee.runtimeAgent

      Buat akun:

      gcloud iam service-accounts create apigee-watcher \
        --display-name="apigee-watcher" \
        --project $PROJECT_ID
                  

      Tetapkan peran:

      gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member="serviceAccount:apigee-watcher@$PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/apigee.runtimeAgent"
                  

Tetapkan workloadIdentityEnabled: true dan buat akun layanan

apigeectl membuat akun layanan Kubernetes untuk setiap komponen hybrid Apigee saat Anda menetapkan workloadIdentityEnabled: true dalam file penggantian dan menerapkan perubahan.

  1. Tambahkan baris tebal di bawah ke file overrides.yaml di bawah stanza gcp. Tindakan ini akan mengaktifkan Workload Identity untuk penginstalan Anda dan memicu apigeectl untuk membuat akun layanan Kubernetes saat Anda menerapkan konfigurasi:
    gcp:
      projectID: "my-project-id"
      name: "my-project-id"
      region: "analytics-region"
      workloadIdentityEnabled: true
  2. Tambahkan baris tebal di bawah ke file overrides.yaml di bawah stanza cassandra. Tindakan ini memicu pembuatan apigee-cassandra-backup akun layanan Kubernetes:
    cassandra:
      ...
      backup:
        enabled: true
  3. Terapkan perubahan dengan apigeectl dengan flag --restore:
    $APIGEECTL_HOME/apigeectl apply -f overrides/overrides.yaml --restore
  4. Verifikasi akun layanan dengan perintah berikut:
    kubectl get sa -n $NAMESPACE

    Output Anda akan terlihat seperti berikut. Akun layanan Kubernetes yang dicetak tebal adalah akun yang perlu Anda anotasikan dengan akun layanan Google Anda:

    NAME                                                         SECRETS   AGE
    apigee-cassandra-backup                                      1         11m
    apigee-cassandra-restore                                     1         11m
    apigee-cassandra-schema-setup-my-project-id-123abcd-sa       1         11m
    apigee-cassandra-schema-val-my-project-id-123abcd            1         11m
    apigee-cassandra-user-setup-my-project-id-123abcd-sa         1         11m
    apigee-connect-agent-my-project-id-123abcd-sa                1         11m
    apigee-datastore-default-sa                                  1         11m
    apigee-ingressgateway                                        1         11m
    apigee-ingressgateway-my-project-id-123abcd                  1         11m
    apigee-ingressgateway-manager                                1         11m
    apigee-init                                                  1         11m
    apigee-mart-my-project-id-123abcd-sa                         1         11m
    apigee-metrics-sa                                            1         11m
    apigee-mint-task-scheduler-my-project-id-123abcd-sa          1         11m
    apigee-redis-default-sa                                      1         11m
    apigee-redis-envoy-default-sa                                1         11m
    apigee-runtime-my-project-id-env-name-234bcde-sa             1         11m
    apigee-synchronizer-my-project-id-env-name-234bcde-sa        1         11m
    apigee-udca-my-project-id-123abcd-sa                         1         11m
    apigee-udca-my-project-id-env-name-234bcde-sa                1         11m
    apigee-watcher-my-project-id-123abcd-sa                      1         11m
    default                                                      1         11m
        

Menganotasi akun layanan Kubernetes dengan akun layanan Google

Untuk setiap komponen Apigee, anotasikan akun layanan Kubernetes yang sesuai dengan akun layanan Google untuk komponen tersebut.

Komponen tingkat organisasi

Anda hanya akan memiliki satu instance dari setiap akun layanan Kubernetes untuk organisasi Apigee Anda.

Komponen Akun Layanan Kubernetes Akun Layanan Google
Cassandra apigee-cassandra-backup apigee-cassandra
apigee-cassandra-restore apigee-cassandra
apigee-cassandra-schema-setup-my-project-id-num-id1-sa apigee-cassandra
apigee-cassandra-schema-val-my-project-id-num-id1 apigee-cassandra
apigee-cassandra-user-setup-my-project-id-num-id1-sa apigee-cassandra
apigee-datastore-default-sa apigee-cassandra
Apigee Connect apigee-connect-agent-my-project-id-num-id1-sa apigee-mart
MART apigee-mart-my-project-id-num-id1-sa apigee-mart
Metrik apigee-metrics-sa apigee-metrics
UDCA (tingkat organisasi) apigee-udca-my-project-id-num-id1-sa apigee-udca
Pengamat apigee-watcher-my-project-id-num-id1-sa apigee-watcher

Komponen level ENV

Anda akan memiliki satu instance dari setiap akun layanan Kubernetes untuk setiap lingkungan Apigee.

Komponen Akun Layanan Kubernetes Akun Layanan Google
Runtime Apigee apigee-runtime-my-project-id-env-name-num-id2-sa apigee-runtime
Sinkronisasi apigee-synchronizer-my-project-id-env-name-num-id2-sa apigee-synchronizer
UDCA (tingkat env) apigee-udca-my-project-id-env-name-num-id2-sa apigee-udca

Dalam perintah berikut, gunakan nama akun layanan Kubernetes yang ditampilkan oleh perintah kubectl get sa -n $NAMESPACE, misalnya: apigee-cassandra-schema-val-hybrid-example-project-123abcd.

Dalam prosedur ini, untuk setiap akun layanan Kubernetes, Anda akan:

  • Ikat akun layanan Kubernetes dan akun layanan Google utama ke peran IAM roles/iam.workloadIdentityUser.
  • Menganotasi akun layanan Kubernetes dengan akun layanan Google.
  1. Lakukan binding peran dan anotasi akun layanan.

    Komponen tingkat organisasi

    Membuat anotasi akun layanan Kubernetes untuk komponen tingkat organisasi. Anda perlu melakukan langkah ini sekali untuk setiap komponen di organisasi Apigee Anda.

    • Cassandra

      Komponen Cassandra memiliki enam akun layanan Kubernetes terkait:

      • apigee-cassandra-backup
      • apigee-cassandra-restore
      • apigee-cassandra-schema-setup
      • apigee-cassandra-schema-val (val = validasi)
      • apigee-cassandra-user-setup
      • apigee-datastore-default

      Prod

      apigee-cassandra-backup

      1. Tentukan variabel lingkungan KSA_NAME dan GSA_NAME:
        GSA_NAME="apigee-cassandra"
        KSA_NAME="apigee-cassandra-backup"
      2. Ikat peran IAM:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      3. Anotasi akun layanan:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com

      apigee-cassandra-restore

      1. Tentukan ulang variabel lingkungan KSA_NAME:

        KSA_NAME="apigee-cassandra-restore"
      2. Ikat peran IAM:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      3. Anotasi akun layanan:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com

      apigee-cassandra-schema-setup-service-account-name

      1. Tentukan ulang variabel lingkungan KSA_NAME:

        KSA_NAME="apigee-cassandra-schema-setup-service-account-name"

        Ikat peran IAM:

        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      2. Anotasi akun layanan:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com

      apigee-cassandra-schema-val-service-account-name

      1. Tentukan ulang variabel lingkungan KSA_NAME:

        KSA_NAME="apigee-cassandra-schema-val-service-account-name"
      2. Ikat peran IAM:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      3. Anotasi akun layanan:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com

      apigee-cassandra-user-setup-service-account-name

      1. Tentukan ulang variabel lingkungan KSA_NAME:

        KSA_NAME="apigee-cassandra-user-setup-service-account-name"
      2. Ikat peran IAM:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      3. Anotasi akun layanan:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com

      apigee-datastore-default-sa

      1. Tentukan ulang variabel lingkungan KSA_NAME:

        KSA_NAME="apigee-datastore-default-sa"
      2. Ikat peran IAM:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      3. Anotasi akun layanan:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com

      Non-produk

      apigee-cassandra-backup

      1. Tentukan variabel lingkungan KSA_NAME dan GSA_NAME:
        GSA_NAME="apigee-non-prod"
        KSA_NAME="apigee-connect-agent-service-account-name"
      2. Ikat peran IAM:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      3. Anotasi akun layanan:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com

      apigee-cassandra-restore

      1. Tentukan ulang variabel lingkungan KSA_NAME:

        KSA_NAME="apigee-cassandra-restore"
      2. Ikat peran IAM:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      3. Anotasi akun layanan:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com

      apigee-cassandra-schema-setup-service-account-name

      1. Tentukan ulang variabel lingkungan KSA_NAME:

        KSA_NAME="apigee-cassandra-schema-setup-service-account-name"
      2. Ikat peran IAM:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      3. Anotasi akun layanan:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com

      apigee-cassandra-schema-val-service-account-name

      1. Tentukan ulang variabel lingkungan KSA_NAME:

        KSA_NAME="apigee-cassandra-schema-val-service-account-name"
      2. Ikat peran IAM:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      3. Anotasi akun layanan:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com

      apigee-cassandra-user-setup-service-account-name

      1. Tentukan ulang variabel lingkungan KSA_NAME:

        KSA_NAME="apigee-cassandra-user-setup-service-account-name"
      2. Ikat peran IAM:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      3. Anotasi akun layanan:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com

      apigee-datastore-default-sa

      1. Tentukan ulang variabel lingkungan KSA_NAME:

        KSA_NAME="apigee-datastore-default-sa"
      2. Ikat peran IAM:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      3. Anotasi akun layanan:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
    • Apigee Connect

      Prod

      1. Tentukan variabel lingkungan KSA_NAME dan GSA_NAME:
        GSA_NAME="apigee-mart"
        KSA_NAME="apigee-connect-agent-service-account-name"
      2. Ikat peran IAM:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      3. Anotasi akun layanan:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com

      Non-produk

      1. Tentukan variabel lingkungan KSA_NAME:

        KSA_NAME="apigee-connect-agent-service-account-name"
      2. Ikat peran IAM:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      3. Anotasi akun layanan:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
    • MART

      Prod

      1. Tentukan variabel lingkungan KSA_NAME dan GSA_NAME:

        GSA_NAME="apigee-mart"
        KSA_NAME="apigee-mart-service-account-name"
      2. Ikat peran IAM:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      3. Anotasi akun layanan:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com

      Non-produk

      1. Tentukan variabel lingkungan KSA_NAME:

        KSA_NAME="apigee-mart-service-account-name"
      2. Ikat peran IAM:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      3. Anotasi akun layanan:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
    • Metrik Apigee

      Prod

      1. Tentukan variabel lingkungan KSA_NAME dan GSA_NAME:

        GSA_NAME="apigee-metrics"
        KSA_NAME="apigee-metrics-sa"
      2. Ikat peran IAM:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      3. Anotasi akun layanan:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com

      Non-produk

      1. Tentukan variabel lingkungan KSA_NAME:

        KSA_NAME="apigee-metrics-sa"
      2. Ikat peran IAM:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      3. Anotasi akun layanan:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
    • UDCA (tingkat organisasi)

      Prod

      1. Tentukan variabel lingkungan KSA_NAME dan GSA_NAME:

        GSA_NAME="apigee-udca"
        KSA_NAME="apigee-udca-org-level-service-account-name"
      2. Ikat peran IAM:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      3. Anotasi akun layanan:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com

      Non-produk

      1. Tentukan KSA_NAMEvariabel lingkungan:

        KSA_NAME="apigee-udca-org-level-service-account-name"
      2. Ikat peran IAM:
          gcloud iam service-accounts add-iam-policy-binding \
            --role roles/iam.workloadIdentityUser \
            --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
            $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      3. Anotasi akun layanan:
          kubectl annotate serviceaccount \
            --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
    • Apigee Watcher

      Prod

      1. Tentukan variabel lingkungan KSA_NAME dan GSA_NAME:

        GSA_NAME="apigee-watcher"
        KSA_NAME="apigee-watcher-service-account-name"
      2. Ikat peran IAM:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      3. Anotasi akun layanan:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com

      Non-produk

      1. Tentukan variabel lingkungan KSA_NAME:

        KSA_NAME="apigee-watcher-service-account-name"
      2. Ikat peran IAM:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      3. Anotasi akun layanan:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com

    Untuk setiap lingkungan:

    • Runtime

      Prod

      1. Tentukan variabel lingkungan KSA_NAME dan GSA_NAME:

        GSA_NAME="apigee-runtime"
        KSA_NAME="apigee-runtime-service-account-name"
      2. Ikat peran IAM:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      3. Anotasi akun layanan:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com

      Non-produk

      1. Tentukan variabel lingkungan KSA_NAME:

        KSA_NAME="apigee-runtime-service-account-name"
      2. Ikat peran IAM:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      3. Anotasi akun layanan:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
    • Sinkronisasi

      Prod

      1. Tentukan variabel lingkungan KSA_NAME dan GSA_NAME:

        GSA_NAME="apigee-synchronizer"
        KSA_NAME="apigee-synchronizer-service-account-name"
      2. Ikat peran IAM:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      3. Anotasi akun layanan:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com

      Non-produk

      1. Tentukan variabel lingkungan KSA_NAME:

        KSA_NAME="apigee-synchronizer-service-account-name"
      2. Ikat peran IAM:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      3. Anotasi akun layanan:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
    • UDCA (tingkat lingkungan)

      Prod

      1. Tentukan variabel lingkungan KSA_NAME dan GSA_NAME:

        GSA_NAME="apigee-udca"
        KSA_NAME="apigee-udca-env-level-service-account-name"
      2. Ikat peran IAM:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      3. Anotasi akun layanan:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com

      Non-produk

      1. Tentukan variabel lingkungan KSA_NAME:

        KSA_NAME="apigee-udca-env-level-service-account-name"
      2. Ikat peran IAM:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      3. Anotasi akun layanan:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
  2. Validasi apakah langkah-langkah tersebut berhasil:
    gcloud config set project $PROJECT_ID
    
    kubectl run --rm -it --image google/cloud-sdk:slim \
      --namespace $NAMESPACE workload-identity-test\
      -- gcloud auth list

    Jika Anda tidak melihat command prompt, coba tekan Enter.

    Jika langkah-langkah tersebut dijalankan dengan benar, Anda akan melihat respons seperti berikut:

                       Credentialed Accounts
    ACTIVE  ACCOUNT
    *       GSA@PROJECT_ID.iam.gserviceaccount.com
    
  3. Jika mengupgrade dari penginstalan sebelumnya, bersihkan rahasia yang berisi kunci pribadi akun layanan:
    kubectl delete secrets -n $NAMESPACE $(k get secrets -n $NAMESPACE | grep svc-account | awk '{print $1}')
    
  4. Periksa log:
    kubectl logs -n $NAMESPACE -l app=apigee=synchronizer,env=$ENV_NAME,org=$ORG_NAME apigee-synchronizer
    
  5. (Opsional) Anda dapat melihat status akun layanan Kubernetes di halaman Kubernetes: Workloads Overview di Google Cloud Console.

    Buka Workloads