Mengaktifkan Workload Identity dengan Apigee Hybrid

Topik ini menjelaskan cara mengaktifkan Workload Identity untuk Apigee Hybrid.

Ringkasan

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

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

Secara terpisah, Kubernetes juga memiliki konsep akun layanan. Akun layanan menyediakan identitas untuk proses yang berjalan dalam Pod. Akun layanan Kubernetes adalah resource Kubernetes, sementara akun layanan Google khusus untuk Google Cloud. Untuk mengetahui informasi tentang layanan Kubernetes akun, 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 Kubernetes akun layanan.

Akun layanan Google di Apigee Hybrid tanpa Workload Identity

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

Variabel lingkungan yang digunakan dalam prosedur ini

Prosedur ini menggunakan variabel lingkungan berikut. Pilih salah satu di shell perintah Anda atau ganti dalam contoh kode dengan nilai sebenarnya:

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

Verifikasi variabel lingkungan:

echo $PROJECT_ID
echo $ORG_NAME
echo $ENV_NAME
echo $NAMESPACE
echo $CLUSTER_NAME
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_NAME=my-cluster-name
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 data pribadi (.json file) untuk setiap akun layanan. Saat menggunakan Workload Identity, Anda tidak perlu mendownload kunci pribadi akun layanan dan menambahkannya ke cluster GKE.

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

Mengaktifkan Workload Identity untuk Apigee Hybrid

Untuk memulai, ikuti petunjuk di Bersiap untuk mengaktifkan Workload Identity untuk memperbarui kumpulan node dan menginisialisasi variabel sebelum mengaktifkan Workload Identity.

Lalu, ikuti petunjuk di Set workloadIdentityEnabled: true dan buat akun layanan untuk mengaktifkan Workload Identitas 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 modifikasi:
    gcloud config set project $PROJECT_ID
  2. Dapatkan kredensial gcloud dari cluster tempat Anda mengaktifkan Workload Identitas dengan perintah berikut:
    gcloud container clusters get-credentials ${CLUSTER_NAME} \
      --region ${CLUSTER_LOCATION} \
      --project ${PROJECT_ID}
  3. Pastikan Workload Identity diaktifkan untuk cluster GKE yang menjalankan Apigee dengan hal berikut 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 hingga 30 menit:

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

    Untuk informasi selengkapnya, lihat Aktifkan 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 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.     False
    apigee-logger        apigee-logger@my_project_id.        False
    apigee-mart          apigee-mart@my_project_id.          False
    apigee-metrics       apigee-metrics@my_project_id.       False
    apigee-runtime       apigee-runtime@my_project_id.       False
    apigee-synchronizer  apigee-synchronizer@my_project_id.  False
    apigee-udca          apigee-udca@my_project_id.          False
    apigee-watcher       apigee-watcher@my_project_id.       False
    

    Non-produk

    Untuk lingkungan non-produksi:

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

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

    • Menggunakan create-service-account yang disertakan dengan apigee di direktori apigeectl/tools/. Alat ini dapat membuat semua akun layanan dengan satu perintah atau membiarkan Anda membuatnya satu per satu.
    • Menggunakan perintah gcloud iam service-accounts create untuk membuat layanan akun satu per satu dan perintah gcloud projects add-iam-policy-binding untuk menetapkan peran yang sesuai ke setiap akun layanan. Metode ini mengharuskan Anda untuk 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." \
        --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." \
        --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." \
        --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." \
        --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." \
        --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." \
        --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." \
        --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 yang dicetak tebal di bawah ke file overrides.yaml di bawah gcp bait. 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 yang dicetak tebal di bawah ke file overrides.yaml Anda di bawah cassandra bait. Tindakan ini memicu pembuatan apigee-cassandra-backup akun layanan Kubernetes:
    cassandra:
      ...
      backup:
        enabled: true
  3. Terapkan perubahan dengan apigeectl dengan tanda --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 di tebal adalah informasi yang perlu Anda anotasi dengan akun layanan Google:

    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 tag 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 harus melakukan hal 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.
      3. Anotasikan akun layanan:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.

      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.
      3. Anotasikan akun layanan:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.

      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.
      2. Anotasikan akun layanan:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.

      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.
      3. Anotasikan akun layanan:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.

      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.
      3. Anotasikan akun layanan:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.

      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.
      3. Anotasikan akun layanan:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.

      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.
      3. Anotasikan akun layanan:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.

      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.
      3. Anotasikan akun layanan:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.

      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.
      3. Anotasikan akun layanan:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.

      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.
      3. Anotasikan akun layanan:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.

      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.
      3. Anotasikan akun layanan:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.

      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.
      3. Anotasikan akun layanan:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.
    • 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.
      3. Anotasikan akun layanan:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.

      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.
      3. Anotasikan akun layanan:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.
    • 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.
      3. Anotasikan akun layanan:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.

      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.
      3. Anotasikan akun layanan:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.
    • 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.
      3. Anotasikan akun layanan:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.

      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.
      3. Anotasikan akun layanan:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.
    • 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.
      3. Anotasikan akun layanan:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.

      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.
      3. Anotasikan akun layanan:
          kubectl annotate serviceaccount \
            --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.
    • 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.
      3. Anotasikan akun layanan:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.

      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.
      3. Anotasikan akun layanan:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.

    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.
      3. Anotasikan akun layanan:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.

      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.
      3. Anotasikan akun layanan:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.
    • 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.
      3. Anotasikan akun layanan:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.

      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.
      3. Anotasikan akun layanan:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.
    • UDCA (tingkat env)

      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.
      3. Anotasikan akun layanan:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.

      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.
      3. Anotasikan akun layanan:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.
  2. Validasi apakah langkah-langkah tersebut berhasil:
    gcloud config set project $PROJECT_ID
    

    Pilih akun layanan kubernetes untuk diuji, misalnya: apigee-cassandra-backup.

    KSA_NAME="kubernetes-service-account-name"
    
    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.
  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
    

Mengupgrade penginstalan untuk menggunakan Workload Identity

Ikuti petunjuk ini untuk menambahkan Workload Identity ke penginstalan hybrid yang sudah ada.

Berikut adalah contoh yang menampilkan Akun Layanan Google (GSA) yang dibuat untuk Apigee:

gcloud iam service-accounts list --filter "apigee"
DISPLAY NAME       EMAIL                                                  DISABLED
apigee-cassandra   apigee-cassandra@PROJECT_ID.    False
apigee-connect     apigee-connect@PROJECT_ID.      False
apigee-runtime     apigee-runtime@PROJECT_ID.      False
apigee-metrics     apigee-metrics@PROJECT_ID.      False
apigee-mart        apigee-mart@PROJECT_ID.         False
apigee-watcher     apigee-watcher@PROJECT_ID.      False
apigee-sync        apigee-sync@PROJECT_ID.         False
apigee-udca        apigee-udca@$PROJECT_ID.        False

Berikut contoh akun layanan Kubernetes (KSA) yang dibuat untuk Apigee:

kubectl get sa -n $NAMESPACE
apigee-cassandra-schema-setup-ORG_NAME-cb84b88-sa             1         xxd
apigee-cassandra-user-setup-ORG_NAME-cb84b88-sa               1         xxd
apigee-connect-agent-ORG_NAME-cb84b88-sa                      1         xxd
apigee-init                                                   1         xxd
apigee-mart-ORG_NAME-cb84b88-sa                               1         xxd
apigee-metrics-apigee-telemetry                               1         xxd
apigee-runtime-ORG_NAME-ENV_NAME-1d0dc5e-sa                   1         xxd
apigee-synchronizer-ORG_NAME-ENV_NAME-1d0dc5e-sa              1         xxd
apigee-udca-ORG_NAME-ENV_NAME-1d0dc5e-sa                      1         xxd
apigee-watcher-ORG_NAME-cb84b88                               1         xxd
  1. Tambahkan peran Workload Identity ke setiap akun layanan:
    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.
    

    Misalnya, jika menetapkan izin untuk Apigee Synchronizer, Anda akan menjalankan:

    export KSA_NAME=$(kubectl get sa -n apigee -l app=apigee-synchronizer,env=$ENV_NAME,org=$ORG_NAME --output=jsonpath={.items..metadata.name})
    
    gcloud iam service-accounts add-iam-policy-binding --role roles/iam.workloadIdentityUser --member "serviceAccount:$PROJECT_ID.svc.id.goog[apigee/$KSA_NAME]" apigee-sync@$PROJECT_ID.
    
  2. Anotasikan setiap KSA dengan detail GSA:
    kubectl annotate serviceaccount \
      --namespace $NAMESPACE \
      $KSA_NAME \
      iam.gke.io/gcp-service-account=GSA_NAME@$PROJECT_ID.
    

    Misalnya, jika menetapkan izin untuk Apigee Synchronizer, Anda akan menjalankan:

    export KSA_NAME=$(kubectl get sa -n apigee -l app=apigee-synchronizer,env=$ENV_NAME,org=$ORG_NAME --output=jsonpath={.items..metadata.name})
    
    kubectl annotate serviceaccount --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-sync@$PROJECT_ID.
    
  3. 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.
  4. 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}')
    
  5. Periksa log:
    kubectl logs -n $NAMESPACE -l app=apigee=synchronizer,env=$ENV_NAME,org=$ORG_NAME apigee-synchronizer