Langkah 5: Siapkan autentikasi akun layanan

Ringkasan

Langkah ini menjelaskan cara menyiapkan metode autentikasi untuk akun layanan Google Cloud yang Anda buat pada langkah sebelumnya.

Pilih petunjuk untuk metode autentikasi yang ingin Anda gunakan. Lihat Metode autentikasi akun layanan di Apigee Hybrid untuk mengetahui ringkasan berbagai metode autentikasi.

Secret Kubernetes

Akun layanan

Anda harus membuat secret Kubernetes untuk akun layanan berikut:

Produksi

  • apigee-cassandra
  • apigee-logger
  • apigee-mart
  • apigee-metrics
  • apigee-mint-task-scheduler (jika Anda menggunakan Monetisasi untuk Apigee Hybrid)
  • apigee-runtime
  • apigee-synchronizer
  • apigee-udca
  • apigee-watcher

Non-prod

  • apigee-non-prod

Anda akan memberikan setiap rahasia ini selama langkah Buat file penggantian.

Prosedur ini menggunakan variabel lingkungan opsional berikut:

  • $APIGEE_HELM_CHARTS_HOME
  • $APIGEE_NAMESPACE
  • $PROJECT_ID

Jika Anda tidak menentukan variabel ini, ganti nilai yang sesuai untuk setiap variabel dalam contoh kode.

Membuat secret Kubernetes

Buat secret Kubernetes untuk menyimpan kunci akun layanan.

Perintah kubectl create secret dalam contoh kode berikut memiliki struktur:

kubectl create secret generic SECRET_NAME \
  --from-file="client_secret.json=PATH_TO_SERVICE_ACCOUNT_KEY" \
  -n $APIGEE_NAMESPACE

Produksi

kubectl create secret generic apigee-logger-svc-account \
  --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-logger.json" \
  -n $APIGEE_NAMESPACE

kubectl create secret generic apigee-metrics-svc-account \
  --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-metrics.json" \
  -n $APIGEE_NAMESPACE

kubectl create secret generic apigee-watcher-svc-account \
  --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-watcher.json" \
  -n $APIGEE_NAMESPACE

kubectl create secret generic apigee-udca-svc-account \
  --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-udca.json" \
  -n $APIGEE_NAMESPACE
    
kubectl create secret generic apigee-mart-svc-account \
  --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-mart.json" \
  -n $APIGEE_NAMESPACE

kubectl create secret generic apigee-synchronizer-svc-account \
  --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-synchronizer.json" \
  -n $APIGEE_NAMESPACE

kubectl create secret generic apigee-runtime-svc-account \
  --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-runtime.json" \
  -n $APIGEE_NAMESPACE

Jika menggunakan Monetisasi untuk Apigee hybrid, Anda juga perlu membuat secret Kubernetes untuk akun layanan apigee-mint-task-scheduler:

kubectl create secret generic apigee-mint-task-scheduler-svc-account \
  --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-mint-task-scheduler.json" \
  -n APIGEE_NAMESPACE

Non-prod

kubectl create secret generic apigee-non-prod-svc-account \
  --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-non-prod.json" \
  -n $APIGEE_NAMESPACE

Opsional: Anda dapat menghapus file JSON akun layanan setelah membuat secret Kubernetes.

Untuk mengetahui informasi selengkapnya tentang cara menggunakan secret Kubernetes dengan Apigee Hybrid, lihat Menyimpan kunci akun layanan di secret Kubernetes.

File JSON

Tidak ada langkah tambahan yang diperlukan untuk menyiapkan autentikasi dengan file JSON. Lanjutkan ke Langkah 6: Buat sertifikat TLS.

Vault

Menyiapkan penyimpanan secret akun layanan di Vault

Menginstal driver CSI dan penyedia Vault

Jika Anda belum menginstal driver CSI di cluster menggunakan Helm, ikuti petunjuk di Secrets Store CSI Driver: Installation. Untuk mengetahui informasi selengkapnya, lihat Menginstal penyedia CSI Vault dalam dokumentasi Vault.

Lihat Platform dan versi yang didukung Apigee Hybrid untuk mengetahui versi Driver CSI minimum yang didukung oleh Apigee Hybrid.

Membuat secret, kebijakan, dan peran Vault

Gunakan UI atau API Vault untuk membuat secret dan memberikan izin bagi akun layanan Kubernetes yang digunakan oleh Apigee Hybrid untuk membaca secret tersebut.

  1. Buat secret khusus organisasi dan lingkungan dalam format berikut:
    Kunci RahasiaData Rahasia
    secret/data/apigee/orgsakeys
    {
        "cassandraBackup": "***",
        "cassandraRestore": "***",
        "connectAgent": "***",
        "logger": "***",
        "mart": "***",
        "metrics": "***",
        "mint": "***",
        "udca": "***",
        "watcher": "***"
    }
    secret/data/apigee/envsakeys-ENV_NAME
    {
        "runtime": "***",
        "synchronizer": "***",
        "udca": "***".
    }

    Ganti "***" di setiap pasangan dengan konten file .json untuk akun layanan Google yang sesuai dengan komponen Apigee. apigee-cassandra-backup dan apigee-cassandra-restore menggunakan akun layanan apigee-cassandra. Contoh:

    {
        "cassandraBackup": "{
            "type": "service_account",
            "project_id": "myhybridorg",
            "private_key_id": "PRIVATE_KEY_ID",
            "private_key": "-----BEGIN PRIVATE KEY-----\nPRIVATE_KEY_TEXT\n-----END PRIVATE KEY-----\n",
            "client_email": "apigee-cassandra@myhybridorg.iam.gserviceaccount.com",
            "client_id": "123456789012345678901",
            "auth_uri": "https://accounts.google.com/o/oauth2/auth",
            "token_uri": "https://oauth2.googleapis.com/token",
            "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
            "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/apigee-cassandra%40myhybridorg.iam.gserviceaccount.com",
            "universe_domain": "googleapis.com"
        }",
        "cassandraRestore":...
    ...
    }
  2. Berikan akses ke secret organisasi. Buat file teks bernama orgsakeys-auth-policy.txt dengan konten berikut:
    path "secret/data/apigee/orgsakeys" {
        capabilities = ["read"]
    }
  3. Di Vault, buat kebijakan yang memberikan akses ke secret organisasi:
    vault policy write apigee-orgsakeys-auth orgsakeys-auth-policy.txt
  4. Untuk setiap lingkungan, buat file teks bernama envsakeys-ENV_NAME-auth-policy.txt dengan konten berikut:
    path "secret/data/apigee/envsakeys-ENV_NAME" {
        capabilities = ["read"]
    }

    Ulangi langkah ini untuk setiap lingkungan.

  5. Dalam Vault, buat kebijakan yang memberikan akses ke secret lingkungan:
    vault policy write apigee-envsakeys-ENV_NAME-auth envsakeys-ENV_NAME-auth-policy.txt

    Ulangi langkah ini untuk setiap lingkungan.

  6. Buat skrip bernama generate-encoded-sas.sh dengan konten berikut:
    # generate-encoded-sas.sh
    
    ORG=$APIGEE_ORG            # Apigee organization name
    ENVS=$APIGEE_ENV_LIST      # comma separated env names, for example: dev,prod
    
    ORG_SHORT_NAME=$(echo $ORG | head -c 15)
    ENCODE=$(echo -n $ORG | shasum -a 256 | head -c 7)
    ORG_ENCODE=$(echo "$ORG_SHORT_NAME-$ENCODE")
    NAMES=apigee-manager,apigee-cassandra-default,apigee-cassandra-backup-sa,apigee-cassandra-restore-sa,apigee-cassandra-schema-setup-${ORG_ENCODE},apigee-cassandra-schema-val-${ORG_ENCODE},apigee-cassandra-user-setup-${ORG_ENCODE},apigee-mart-${ORG_ENCODE},apigee-mint-task-scheduler-${ORG_ENCODE},apigee-connect-agent-${ORG_ENCODE},apigee-watcher-${ORG_ENCODE},apigee-udca-${ORG_ENCODE},apigee-metrics-apigee-telemetry,apigee-open-telemetry-collector-apigee-telemetry,apigee-logger-apigee-telemetry
    
    for ENV in ${ENVS//,/ }
    do
        ENV_SHORT_NAME=$(echo $ENV | head -c 15)
        ENCODE=$(echo -n $ORG:$ENV | shasum -a 256 | head -c 7)
        ENV_ENCODE=$(echo "$ORG_SHORT_NAME-$ENV_SHORT_NAME-$ENCODE")
        NAMES+=,apigee-synchronizer-${ENV_ENCODE},apigee-runtime-${ENV_ENCODE}
    done
    
    echo $NAMES
    
  7. Jalankan skrip untuk membuat daftar nama akun layanan yang akan mengikat kebijakan:
    ./generate-encoded-sas.sh

    Output Anda harus berupa daftar nama akun layanan Kubernetes yang dipisahkan dengan koma, mirip dengan contoh berikut:

    ./generate-encoded-sas.sh
    apigee-manager,apigee-cassandra-default,apigee-cassandra-backup-sa,
    apigee-cassandra-restore-sa,apigee-cassandra-schema-setup-myhybrido
    rg-5b044c1,apigee-cassandra-schema-val-myhybridorg-5b044c1,apigee-c
    assandra-user-setup-myhybridorg-5b044c1,apigee-mart-myhybridorg-5b0
    44c1,apigee-mint-task-scheduler-myhybridorg-5b044c1,apigee-connect-
    agent-myhybridorg-5b044c1,apigee-watcher-myhybridorg-5b044c1,apigee
    -udca-myhybridorg-5b044c1,apigee-metrics-apigee-telemetry,apigee-op
    en-telemetry-collector-apigee-telemetry,apigee-logger-apigee-teleme
    try,apigee-synchronizer-myhybridorg-dev-ee52aca,apigee-runtime-myhy
    bridorg-dev-ee52aca,apigee-synchronizer-myhybridorg-prod-2d0221c,ap
    igee-runtime-myhybridorg-prod-2d0221c
  8. Salin teks output ke dalam dan pisahkan ke dalam daftar, satu daftar untuk nama akun layanan org dan daftar terpisah untuk nama akun layanan env untuk setiap lingkungan. Akun layanan org berada di urutan pertama dalam daftar output hingga apigee-logger-apigee-telemetry.

    Daftar nama layanan org dari contoh sebelumnya:

    apigee-manager,apigee-cassandra-default,apigee-cassandra-backup-sa,
    apigee-cassandra-restore-sa,apigee-cassandra-schema-setup-myhybrido
    rg-5b044c1,apigee-cassandra-schema-val-myhybridorg-5b044c1,apigee-c
    assandra-user-setup-myhybridorg-5b044c1,apigee-mart-myhybridorg-5b0
    44c1,apigee-mint-task-scheduler-myhybridorg-5b044c1,apigee-connect-
    agent-myhybridorg-5b044c1,apigee-watcher-myhybridorg-5b044c1,apigee
    -udca-myhybridorg-5b044c1,apigee-metrics-apigee-telemetry,apigee-op
    en-telemetry-collector-apigee-telemetry,apigee-logger-apigee-teleme
    try

    Nama akun layanan env memiliki pola apigee-synchronizer-ORG_NAME-ENV_NAME-HASH_TEXT dan apigee-runtime-ORG_NAME-ENV_NAME-HASH_TEXT. Pisahkan ke dalam daftar terpisah untuk setiap lingkungan. Misalnya, output dari contoh sebelumnya dapat dipisahkan menjadi dua daftar berikut:

    Lingkungan dev:

    apigee-synchronizer-myhybridorg-dev-ee52aca,apigee-runtime-myhybrid
    org-dev-ee52aca

    Lingkungan prod:

    apigee-synchronizer-myhybridorg-prod-2d0221c,apigee-runtime-myhybri
    dorg-prod-2d0221c
  9. Dengan menggunakan kebijakan tersebut, buat peran Vault yang mengikat akun layanan Apigee khusus organisasi:
    vault write auth/kubernetes/role/apigee-orgsakeys \
        bound_service_account_names=LIST_OF_ORG_SA_NAMES \
        bound_service_account_namespaces=apigee \
        policies=apigee-orgsakeys-auth \
        ttl=1m
    
  10. Untuk setiap lingkungan, buat peran Vault untuk kunci akun layanannya:
    vault write auth/kubernetes/role/apigee-envsakeys-ENV_NAME \
        bound_service_account_names=LIST_OF_ENV_NAME_SA_NAMES \
        bound_service_account_namespaces=apigee \
        policies=apigee-envsakeys-ENV_NAME-auth \ 
        ttl=1m
    

    Ulangi langkah ini untuk setiap lingkungan.

Membuat objek SecretProviderClass

Resource SecretProviderClass memberi tahu driver CSI penyedia mana yang harus dihubungi saat meminta rahasia. Kunci akun layanan harus dikonfigurasi melalui objek ini. Tabel berikut menunjukkan nama file (objectNames) yang diharapkan oleh Apigee Hybrid:

Akun layananNama file rahasia yang diharapkan
Pencadangan Cassandra cassandraBackup
Pemulihan Cassandra cassandraRestore
Menghubungkan agen connectAgent
Logger logger
MART mart
Metrik metrics
Monetisasi
(jika menggunakan Monetisasi untuk Apigee Hybrid)
mint
Runtime runtime
Penyinkron synchronizer
UDCA udca
Pengamat watcher
  1. Gunakan template SecretProviderClass berikut untuk mengonfigurasi resource ini untuk rahasia khusus organisasi:
    apiVersion: secrets-store.csi.x-k8s.io/v1
    kind: SecretProviderClass
    metadata:
        name: apigee-orgsakeys-spc
    spec:
        provider: vault
        parameters:
            roleName: apigee-orgsakeys
            vaultAddress: VAULT_ADDRESS
            # "objectName" is an alias used within the SecretProviderClass to reference
            # that specific secret. This will also be the filename containing the secret.
            # Apigee Hybrid expects these exact values so they must not be changed.
            # "secretPath" is the path in Vault where the secret should be retrieved.
            # "secretKey" is the key within the Vault secret response to extract a value from.
            objects: |
                - objectName: "cassandraBackup"
                    secretPath: ""
                    secretKey: ""
                - objectName: "cassandraRestore"
                    secretPath: ""
                    secretKey: ""
                - objectName: "connectAgent"
                    secretPath: ""
                    secretKey: ""
                - objectName: "logger"
                    secretPath: ""
                    secretKey: ""
                - objectName: "mart"
                    secretPath: ""
                    secretKey: ""
                - objectName: "metrics"
                    secretPath: ""
                    secretKey: ""
                - objectName: "mint"
                    secretPath: ""
                    secretKey: ""
                - objectName: "udca"
                    secretPath: ""
                    secretKey: ""
                - objectName: "watcher"
                    secretPath: ""
                    secretKey: ""
    

    VAULT_ADDRESS adalah endpoint tempat server Vault Anda berjalan. Jika Vault berjalan di cluster yang sama dengan Apigee, formatnya umumnya adalah http://vault.$APIGEE_NAMESPACE.svc.cluster.local:VAULT_SERVICE_PORT.

    Simpan template ke file bernama spc-org.yaml.

  2. Terapkan SecretProviderClass khusus organisasi ke namespace apigee Anda:
    kubectl -n $APIGEE_NAMESPACE apply -f spc-org.yaml
  3. Untuk setiap lingkungan, gunakan template SecretProviderClass berikut untuk mengonfigurasi resource ini bagi secret khusus lingkungan. Ulangi langkah ini untuk setiap lingkungan:
    apiVersion: secrets-store.csi.x-k8s.io/v1
    kind: SecretProviderClass
    metadata:
        name: apigee-envsakeys-ENV_NAME-spc
    spec:
        provider: vault
        parameters:
            roleName: apigee-envsakeys-ENV_NAME
            vaultAddress: VAULT_ADDRESS
            # "objectName" is an alias used within the SecretProviderClass to reference
            # that specific secret. This will also be the filename containing the secret.
            # Apigee Hybrid expects these exact values so they must not be changed.
            # "secretPath" is the path in Vault where the secret should be retrieved.
            # "secretKey" is the key within the Vault secret response to extract a value from.
            objects: |
                - objectName: "runtime"
                    secretPath: ""
                    secretKey: ""
                - objectName: "synchronizer"
                    secretPath: ""
                    secretKey: ""
                - objectName: "udca"
                    secretPath: ""
                    secretKey: ""
    

    VAULT_ADDRESS adalah endpoint tempat server Vault Anda berjalan. Jika Vault berjalan di cluster dan namespace yang sama dengan Apigee, formatnya biasanya adalah http://vault.$APIGEE_NAMESPACE.svc.cluster.local:VAULT_SERVICE_PORT.

    Simpan template ke file bernama spc-env-ENV_NAME.yaml.

  4. Untuk setiap lingkungan, terapkan SecretProviderClass khusus lingkungan ke namespace apigee Anda:
    kubectl -n $APIGEE_NAMESPACE apply -f spc-env-ENV_NAME.yaml

    Ulangi langkah ini untuk setiap lingkungan.

  5. Opsional: Anda dapat menghapus file JSON akun layanan setelah membuat objek SecretProviderClass.

WIF untuk GKE

Bersiap untuk mengonfigurasi Workload Identity Federation untuk GKE

  1. Pastikan Workload Identity Federation untuk GKE diaktifkan dalam file penggantian Anda. Fitur ini harus diaktifkan di file penggantian di properti berikut.
    • namespace wajib diisi. Contoh:
      instanceID: "hybrid-instance-1"
      namespace: "apigee"
      
    • Jika Anda menggunakan satu akun layanan (Non-prod) untuk semua komponen, tentukan dengan: gcp.workloadIdentity.gsa. Contoh:
        gcp:
          workloadIdentity:
            enabled: true
            gsa: "apigee-non-prod@my-hybrid-project.iam.gserviceaccount.com"
        
    • Jika Anda menggunakan akun layanan terpisah untuk setiap komponen (Penginstalan produksi), tentukan akun layanan dengan properti gsa komponen. Contoh:
        logger:
          gsa: "apigee-logger@my-hybrid-project.iam.gserviceaccount.com"
        

    Lihat: gcp.workloadIdentity.enabled.

  2. Periksa apakah konfigurasi gcloud saat ini disetel ke project ID Google Cloud Anda dengan perintah berikut:
    gcloud config get project
  3. Jika perlu, tetapkan konfigurasi gcloud saat ini:

    gcloud config set project $PROJECT_ID
  4. Pastikan Workload Identity Federation for GKE diaktifkan untuk Cluster GKE Anda. Saat Anda membuat cluster di Langkah 1: Buat cluster, langkah 6 adalah Mengaktifkan Workload Identity Federation untuk GKE. Konfirmasi bahwa fitur ini diaktifkan dengan perintah berikut:

    Cluster regional

    gcloud container clusters describe $CLUSTER_NAME \
      --region $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten 'workloadIdentityConfig'

    Cluster zona

    gcloud container clusters describe $CLUSTER_NAME \
      --zone $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten 'workloadIdentityConfig'

    Output Anda akan terlihat seperti berikut:

      ---
      workloadPool: $PROJECT_ID.svc.id.goog

    Jika Anda melihat null di hasil, jalankan perintah berikut untuk mengaktifkan Workload Identity Federation untuk GKE bagi cluster Anda:

    Cluster regional

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

    Cluster zona

    gcloud container clusters update  $CLUSTER_NAME \
      --workload-pool=$PROJECT_ID.svc.id.goog \
      --zone $CLUSTER_LOCATION \
      --project $PROJECT_ID
  5. Aktifkan Workload Identity Federation untuk GKE bagi setiap node pool dengan perintah berikut. Operasi ini dapat memerlukan waktu hingga 30 menit untuk setiap node:

    Cluster regional

    gcloud container node-pools update NODE_POOL_NAME \
      --cluster=$CLUSTER_NAME \
      --region $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --workload-metadata=GKE_METADATA

    Cluster zona

    gcloud container node-pools update NODE_POOL_NAME \
      --cluster=$CLUSTER_NAME \
      --zone $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --workload-metadata=GKE_METADATA

    Dengan NODE_POOL_NAME adalah nama setiap node pool. Pada sebagian besar penginstalan Apigee hybrid, dua kumpulan node default diberi nama apigee-data dan apigee-runtime.

  6. Pastikan Workload Identity Federation untuk GKE diaktifkan di node pool Anda dengan perintah berikut:

    Cluster regional

    gcloud container node-pools describe apigee-data \
      --cluster $CLUSTER_NAME \
      --region $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten "config:"
    gcloud container node-pools describe apigee-runtime \
      --cluster $CLUSTER_NAME \
      --region $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten "config:"

    Cluster zona

    gcloud container node-pools describe apigee-data \
      --cluster $CLUSTER_NAME \
      --zone $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten "config:"
    gcloud container node-pools describe apigee-runtime \
      --cluster $CLUSTER_NAME \
      --zone $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten "config:"

    Output Anda akan terlihat seperti ini:

    ---
    diskSizeGb: 100
    diskType: pd-standard
    ...
    workloadMetadataConfig:
      mode: GKE_METADATA
        

WIF di platform lain

Dengan menggunakan Workload Identity Federation di platform selain GKE, Anda dapat menggunakan metode berikut untuk mengonfigurasi autentikasi SA:

  • Secret Kubernetes
  • File JSON akun layanan
  • Vault

Dalam petunjuk berikut, pilih tab untuk metode autentikasi yang Anda gunakan.

Prosedur ini menggunakan dua variabel lingkungan berikut yang ditentukan di Langkah 2: Download diagram Helm Apigee. Variabel ini bersifat opsional. Jika Anda tidak menentukannya, ganti jalur direktori yang sesuai untuk setiap variabel dalam contoh kode.

Untuk penginstalan di AKS, pastikan Anda telah mengaktifkan penerbit OpenID Connect (OIDC). Anda harus mengaktifkan fitur ini agar Workload Identity Federation dapat mengakses metadata OpenID Connect dan JSON Web Key Set (JWKS) untuk cluster.

Konfigurasi cluster Anda untuk menggunakan Workload Identity Federation.

  1. Periksa apakah konfigurasi gcloud saat ini disetel ke project ID Google Cloud Anda dengan perintah berikut:
    gcloud config get project
  2. Jika perlu, tetapkan konfigurasi gcloud saat ini:

    gcloud config set project $PROJECT_ID
  3. Aktifkan Security Token Service API:

    Periksa apakah Security Token Service API diaktifkan dengan perintah berikut:

    gcloud services list --enabled --project $PROJECT_ID | grep sts.googleapis.com

    Jika API belum diaktifkan:

    Konsol

    Enable the Security Token Service API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

    Command line

    Aktifkan API dengan perintah berikut:

    gcloud services enable sts.googleapis.com --project $PROJECT_ID
  4. Buat workload identity pool dan penyedia workload.

    Peran yang diperlukan

    Untuk mendapatkan izin yang Anda perlukan guna mengonfigurasi Workload Identity Federation, minta administrator Anda untuk memberi Anda peran IAM berikut pada project:

    Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, baca artikel Mengelola akses ke project, folder, dan organisasi.

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

    Atau, peran dasar Pemilik IAM (roles/owner) juga mencakup izin untuk mengonfigurasi penggabungan identitas. Anda tidak boleh memberikan peran dasar dalam lingkungan produksi, tetapi Anda dapat memberikannya dalam lingkungan pengembangan atau pengujian.

    Untuk membuat workload identity pool dan penyedia workload, lakukan hal berikut:

    1. Tentukan URL penerbit cluster AKS Anda:

      AKS

      az aks show -n CLUSTER_NAME -g RESOURCE_GROUP --query "oidcIssuerProfile.issuerUrl" -otsv

      Ganti kode berikut:

      • CLUSTER_NAME: Nama cluster.
      • RESOURCE_GROUP: Grup resource cluster.

      Perintah ini menampilkan URL penerbit. Anda akan memerlukan URL penerbit di salah satu langkah berikut.

      Jika perintah tersebut tidak menampilkan URL penerbit, pastikan Anda telah mengaktifkan fitur penerbit OIDC.

      EKS

      aws eks describe-cluster --name CLUSTER_NAME --query "cluster.identity.oidc.issuer" --output text
      

      Ganti CLUSTER_NAME dengan nama cluster.

      Perintah ini menampilkan URL penerbit. Anda memerlukan URL penerbit di salah satu langkah berikut.

      Kubernetes lainnya

      Hubungkan ke cluster Kubernetes Anda dan gunakan `kubectl` untuk menentukan URL penerbit cluster Anda:

      kubectl get --raw /.well-known/openid-configuration | jq -r .issuer
      

      Anda memerlukan URL penerbit di salah satu langkah berikut.

    2. Opsional: Jika penerbit OIDC Anda tidak dapat diakses secara publik, download JSON Web Key Set (JWKS) cluster:
      kubectl get --raw /openid/v1/jwks > cluster-jwks.json

      Untuk memeriksa apakah penyedia OIDC Anda tersedia untuk publik, Anda harus dapat mengakses URL penyedia dengan perintah CURL dan menerima respons 200.

    3. Buat workload identity pool baru:
      gcloud iam workload-identity-pools create POOL_ID \
          --location="global" \
          --description="DESCRIPTION" \
          --display-name="DISPLAY_NAME"
      

      Ganti kode berikut:

      • POOL_ID: ID unik untuk pool
      • DISPLAY_NAME: (Opsional) Nama pool.
      • DESCRIPTION: (Opsional) Deskripsi pool yang Anda pilih. Deskripsi ini muncul saat Anda memberikan akses ke identitas pool.

      Contoh:

      gcloud iam workload-identity-pools create my-wi-pool --display-name="My workload pool" --description="My workload pool description"
    4. Tambahkan cluster sebagai penyedia workload identity pool. Pilih perintah untuk membuat penyedia, bergantung pada apakah penerbit OIDC Anda dapat diakses secara publik atau tidak dapat diakses secara publik:

      Dapat diakses secara publik

      Jika penerbit OIDC Anda dapat diakses secara publik, buat penyedia dengan perintah berikut:

      gcloud iam workload-identity-pools providers create-oidc WORKLOAD_PROVIDER_ID \
          --location="global" \
          --workload-identity-pool="POOL_ID" \
          --issuer-uri="ISSUER" \
          --attribute-mapping="google.subject=assertion.sub"

      Tidak dapat diakses secara publik

      Jika penerbit OIDC Anda tidak dapat diakses secara publik, buat penyedia dengan perintah berikut:

      gcloud iam workload-identity-pools providers create-oidc WORKLOAD_PROVIDER_ID \
          --location="global" \
          --workload-identity-pool="POOL_ID" \
          --issuer-uri="ISSUER" \
          --jwks-file="cluster-jwks.json" \
          --attribute-mapping="google.subject=assertion.sub"

      Ganti kode berikut:

      • WORKLOAD_PROVIDER_ID: ID penyedia workload identity pool unik pilihan Anda.
      • POOL_ID: ID workload identity pool yang telah Anda buat sebelumnya.
      • ISSUER: Gunakan URL penerbit yang Anda tentukan sebelumnya untuk URI penerbit .

      attribute-mapping="google.subject=assertion.sub" memetakan subjek Kubernetes ke subjek IAM.

Buat file konfigurasi kredensial

Untuk men-deploy workload Kubernetes yang dapat mengakses Google Cloud resource, lakukan langkah-langkah berikut. Pertama, Anda perlu membuat file konfigurasi kredensial untuk setiap akun layanan IAM:

  1. Buat daftar akun layanan IAM (juga disebut "akun layanan Google") dengan perintah berikut:
    gcloud iam service-accounts list --project $PROJECT_ID

    Anda harus membuat file konfigurasi kredensial untuk akun layanan IAM berikut:

    Produksi

    Untuk lingkungan produksi:

    DISPLAY NAME         EMAIL                                                      DISABLED
    apigee-cassandra     apigee-cassandra@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
    

    Jika Anda menggunakan Monetisasi untuk Apigee hybrid di v1.15.1 dan yang lebih baru, Anda juga perlu membuat file konfigurasi kredensial untuk akun layanan apigee-mint-task-scheduler.

    DISPLAY NAME                 EMAIL                                                              DISABLED
    ...
    apigee-mint-task-scheduler   apigee-mint-task-scheduler@my_project_id.iam.gserviceaccount.com   False
    ...

    Non-prod

    Untuk lingkungan non-produksi:

    DISPLAY NAME         EMAIL                                                      DISABLED
    apigee-non-prod      apigee-non-prod@my_project_id.iam.gserviceaccount.com      False
    
  2. Buat file konfigurasi kredensial untuk setiap akun layanan IAM dalam daftar sebelumnya.

    WIF: rahasia

    Pendekatan ini menggunakan konfigurasi kredensial yang disimpan dalam secret Kubernetes. Saat membuat file penggantian di Langkah 7: Buat penggantian, Anda memberikan nama rahasia untuk setiap akun layanan dengan properti serviceAccountRef atau envs.serviceAccountRefs.

    Buat file konfigurasi kredensial

    Produksi

    Anda harus membuat file konfigurasi kredensial untuk akun layanan berikut:

    • apigee-cassandra
    • apigee-mart
    • apigee-metrics
    • apigee-mint-task-scheduler Jika Anda menggunakan Monetisasi untuk Apigee Hybrid.
    • apigee-runtime
    • apigee-synchronizer
    • apigee-udca
    1. Buat direktori untuk file konfigurasi kredensial. Direktori dapat memiliki nama apa pun. Untuk prosedur ini, direktori diberi nama credential-configurations:
      mkdir $APIGEE_HELM_CHARTS_HOME/credential-configurations
    2. Buat file konfigurasi kredensial untuk apigee-cassandra:
      gcloud iam workload-identity-pools create-cred-config \
        projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \
        --service-account=apigee-cassandra@$PROJECT_ID.iam.gserviceaccount.com \
        --credential-source-file=/var/run/service-account/token \
        --credential-source-type=text \
        --output-file=$APIGEE_HELM_CHARTS_HOME/credential-configurations/apigee-cassandra-credential-configuration.json
      

      Dengan:

      • PROJECT_NUMBER: Nomor project dari project yang berisi workload identity pool. Ini harus berupa nomor project, bukan project ID.
      • POOL_ID: ID workload identity pool
      • WORKLOAD_PROVIDER_ID: ID penyedia workload identity pool
    3. Buat file konfigurasi kredensial untuk apigee-mart:
      gcloud iam workload-identity-pools create-cred-config \
        projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \
        --service-account=apigee-mart@$PROJECT_ID.iam.gserviceaccount.com \
        --credential-source-file=/var/run/service-account/token \
        --credential-source-type=text \
        --output-file=$APIGEE_HELM_CHARTS_HOME/credential-configurations/apigee-mart-credential-configuration.json
      
    4. Buat file konfigurasi kredensial untuk apigee-metrics:
      gcloud iam workload-identity-pools create-cred-config \
        projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \
        --service-account=apigee-metrics@$PROJECT_ID.iam.gserviceaccount.com \
        --credential-source-file=/var/run/service-account/token \
        --credential-source-type=text \
        --output-file=$APIGEE_HELM_CHARTS_HOME/credential-configurations/apigee-metrics-credential-configuration.json
      
    5. Buat file konfigurasi kredensial untuk apigee-runtime:
      gcloud iam workload-identity-pools create-cred-config \
        projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \
        --service-account=apigee-runtime@$PROJECT_ID.iam.gserviceaccount.com \
        --credential-source-file=/var/run/service-account/token \
        --credential-source-type=text \
        --output-file=$APIGEE_HELM_CHARTS_HOME/credential-configurations/apigee-runtime-credential-configuration.json
      
    6. Buat file konfigurasi kredensial untuk apigee-synchronizer:
      gcloud iam workload-identity-pools create-cred-config \
        projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \
        --service-account=apigee-synchronizer@$PROJECT_ID.iam.gserviceaccount.com \
        --credential-source-file=/var/run/service-account/token \
        --credential-source-type=text \
        --output-file=$APIGEE_HELM_CHARTS_HOME/credential-configurations/apigee-synchronizer-credential-configuration.json
      
    7. Buat file konfigurasi kredensial untuk apigee-udca:
      gcloud iam workload-identity-pools create-cred-config \
        projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \
        --service-account=apigee-udca@$PROJECT_ID.iam.gserviceaccount.com \
        --credential-source-file=/var/run/service-account/token \
        --credential-source-type=text \
        --output-file=$APIGEE_HELM_CHARTS_HOME/credential-configurations/apigee-udca-credential-configuration.json
      
    8. Buat file konfigurasi kredensial untuk apigee-watcher:
      gcloud iam workload-identity-pools create-cred-config \
        projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \
        --service-account=apigee-watcher@$PROJECT_ID.iam.gserviceaccount.com \
        --credential-source-file=/var/run/service-account/token \
        --credential-source-type=text \
        --output-file=$APIGEE_HELM_CHARTS_HOME/credential-configurations/apigee-watcher-credential-configuration.json
      
    9. Jika menggunakan Monetisasi untuk Apigee hybrid, Anda juga perlu membuat file konfigurasi kredensial untuk apigee-mint-task-scheduler:
      gcloud iam workload-identity-pools create-cred-config \
        projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \
        --service-account=apigee-mint-task-scheduler@$PROJECT_ID.iam.gserviceaccount.com \
        --credential-source-file=/var/run/service-account/token \
        --credential-source-type=text \
        --output-file=$APIGEE_HELM_CHARTS_HOME/credential-configurations/apigee-mint-task-scheduler-credential-configuration.json
      

    Non-prod

    1. Buat direktori untuk file konfigurasi kredensial. Direktori dapat memiliki nama apa pun. Untuk prosedur ini, direktori diberi nama credential-configurations:
      mkdir $APIGEE_HELM_CHARTS_HOME/credential-configurations
    2. Buat file konfigurasi kredensial di untuk akun layanan apigee-non-prod di direktori credential-configurations dengan perintah berikut:
      gcloud iam workload-identity-pools create-cred-config \
      projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \
        --service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com \
        --credential-source-file=/var/run/service-account/token \
        --credential-source-type=text \
        --output-file=$APIGEE_HELM_CHARTS_HOME/credential-configurations/apigee-non-prod-credential-configuration.json
      

      Dengan:

      • PROJECT_NUMBER: Nomor project dari project yang berisi workload identity pool. Ini harus berupa nomor project, bukan project ID.
      • POOL_ID: ID workload identity pool
      • WORKLOAD_PROVIDER_ID: ID penyedia workload identity pool

    Buat secret Kubernetes

    Buat secret Kubernetes untuk menyimpan file konfigurasi kredensial untuk setiap akun layanan.

    Perintah kubectl create secret dalam contoh kode berikut memiliki struktur:

    kubectl create secret generic SECRET_NAME \
            --from-file="client_secret.json=PATH_TO_CREDENTIAL_CONFIGURATION_FILE" \
            -n APIGEE_NAMESPACE

    Produksi

    1. Buat file rahasia untuk apigee-cassandra:
      kubectl create secret generic apigee-cassandra-svc-account \
        --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/credential-configurations/$PROJECT_ID-apigee-cassandra.json" \
        -n APIGEE_NAMESPACE
      
    2. Buat file rahasia untuk apigee-mart:
      kubectl create secret generic apigee-mart-svc-account \
        --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/credential-configurations/$PROJECT_ID-apigee-mart.json" \
        -n APIGEE_NAMESPACE
      
    3. Buat file rahasia untuk apigee-metrics:
      kubectl create secret generic apigee-metrics-svc-account \
        --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/credential-configurations/$PROJECT_ID-apigee-metrics.json" \
        -n APIGEE_NAMESPACE
      
    4. Buat file rahasia untuk apigee-runtime:
      kubectl create secret generic apigee-runtime-svc-account \
        --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/credential-configurations/$PROJECT_ID-apigee-runtime.json" \
        -n APIGEE_NAMESPACE
    5. Buat file rahasia untuk apigee-synchronizer:
      kubectl create secret generic apigee-synchronizer-svc-account \
        --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/credential-configurations/$PROJECT_ID-apigee-synchronizer.json" \
        -n APIGEE_NAMESPACE
      
    6. Buat file rahasia untuk apigee-udca:
      kubectl create secret generic apigee-udca-svc-account \
        --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/credential-configurations/$PROJECT_ID-apigee-udca.json" \
        -n APIGEE_NAMESPACE
      
    7. Buat file rahasia untuk apigee-watcher:
      kubectl create secret generic apigee-watcher-svc-account \
        --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/credential-configurations/$PROJECT_ID-apigee-watcher.json" \
        -n APIGEE_NAMESPACE
      
    8. Jika Anda menggunakan Monetisasi untuk Apigee Hybrid, buat file secret untuk apigee-mint-task-scheduler:
      kubectl create secret generic apigee-mint-task-scheduler-svc-account \
        --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/credential-configurations/$PROJECT_ID-apigee-mint-task-scheduler.json" \
        -n APIGEE_NAMESPACE
      
    Buat file secret untuk apigee-non-prod:

    Non-prod

    kubectl create secret generic apigee-non-prod-svc-account \
            --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/credential-configurations/$PROJECT_ID-apigee-non-prod.json" \
            -n APIGEE_NAMESPACE

    WIF: file

    Pendekatan ini menggunakan file konfigurasi kredensial, bukan file kunci akun layanan Google. Saat Anda membuat file penggantian di Langkah 7: Buat penggantian, Anda memberikan jalur ke file konfigurasi kredensial untuk setiap properti serviceAccountPath atau envs.serviceAccountPaths.

    Produksi

    Anda harus membuat file konfigurasi kredensial di direktori diagram yang sesuai:

    Akun layanan Direktori diagram Helm Apigee
    apigee-cassandra apigee-datastore/
    apigee-mart apigee-org/
    apigee-metrics apigee-telemetry/
    apigee-mint-task-scheduler
    (Jika menggunakan Monetisasi untuk Apigee Hybrid)
    apigee-org/
    apigee-runtime apigee-env/
    apigee-synchronizer apigee-env/
    apigee-udca apigee-org/
    apigee-env/
    apigee-watcher apigee-org/

    Buat file konfigurasi kredensial dengan perintah berikut:

    • apigee-cassandra:
      gcloud iam workload-identity-pools create-cred-config \
        projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \
        --service-account=apigee-cassandra@$PROJECT_ID.iam.gserviceaccount.com \
        --credential-source-file=/var/run/service-account/token \
        --credential-source-type=text \
        --output-file=$APIGEE_HELM_CHARTS_HOME/apigee-datastore/apigee-cassandra-credential-configuration.json
      

      Dengan:

      • PROJECT_NUMBER: Nomor project dari project yang berisi workload identity pool. Ini harus berupa nomor project, bukan project ID.
      • POOL_ID: ID workload identity pool
      • WORKLOAD_PROVIDER_ID: ID penyedia workload identity pool
    • apigee-mart:
      gcloud iam workload-identity-pools create-cred-config \
        projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \
        --service-account=apigee-mart@$PROJECT_ID.iam.gserviceaccount.com \
        --credential-source-file=/var/run/service-account/token \
        --credential-source-type=text \
        --output-file=$APIGEE_HELM_CHARTS_HOME/apigee-org/apigee-mart-credential-configuration.json
      
    • apigee-metrics:
      gcloud iam workload-identity-pools create-cred-config \
        projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \
        --service-account=apigee-metrics@$PROJECT_ID.iam.gserviceaccount.com \
        --credential-source-file=/var/run/service-account/token \
        --credential-source-type=text \
        --output-file=$APIGEE_HELM_CHARTS_HOME/apigee-telemetry/apigee-metrics-credential-configuration.json
      
    • apigee-runtime:
      gcloud iam workload-identity-pools create-cred-config \
        projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \
        --service-account=apigee-runtime@$PROJECT_ID.iam.gserviceaccount.com \
        --credential-source-file=/var/run/service-account/token \
        --credential-source-type=text \
        --output-file=$APIGEE_HELM_CHARTS_HOME/apigee-env/apigee-runtime-credential-configuration.json
      
    • apigee-synchronizer:
      gcloud iam workload-identity-pools create-cred-config \
        projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \
        --service-account=apigee-synchronizer@$PROJECT_ID.iam.gserviceaccount.com \
        --credential-source-file=/var/run/service-account/token \
        --credential-source-type=text \
        --output-file=$APIGEE_HELM_CHARTS_HOME/apigee-env/apigee-synchronizer-credential-configuration.json
      
    • apigee-udca:

      Akun layanan apigee-udca digunakan oleh diagram apigee-org dan apigee-env.

      1. Buat file konfigurasi kredensial di direktori diagram apigee-org.
        gcloud iam workload-identity-pools create-cred-config \
          projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \
          --service-account=apigee-udca@$PROJECT_ID.iam.gserviceaccount.com \
          --credential-source-file=/var/run/service-account/token \
          --credential-source-type=text \
          --output-file=$APIGEE_HELM_CHARTS_HOME/apigee-org/apigee-udca-credential-configuration.json
        
      2. Salin file konfigurasi kredensial ke direktori diagram apigee-env.
        cp $APIGEE_HELM_CHARTS_HOME/apigee-org/apigee-udca-credential-configuration.json \
          $APIGEE_HELM_CHARTS_HOME/apigee-env/apigee-udca-credential-configuration.json
        
    • apigee-watcher:
      gcloud iam workload-identity-pools create-cred-config \
        projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \
        --service-account=apigee-watcher@$PROJECT_ID.iam.gserviceaccount.com \
        --credential-source-file=/var/run/service-account/token \
        --credential-source-type=text \
        --output-file=$APIGEE_HELM_CHARTS_HOME/apigee-org/apigee-watcher-credential-configuration.json
      
    • Jika Anda menggunakan href="monetization-for-hybrid">Monetisasi untuk Apigee Hybrid, Anda juga perlu membuat file konfigurasi kredensial untuk apigee-mint-task-scheduler:
      gcloud iam workload-identity-pools create-cred-config \
        projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \
        --service-account=apigee-mint-task-scheduler@$PROJECT_ID.iam.gserviceaccount.com \
        --credential-source-file=/var/run/service-account/token \
        --credential-source-type=text \
        --output-file=$APIGEE_HELM_CHARTS_HOME/apigee-org/apigee-mint-task-scheduler-credential-configuration.json
      

    Non-prod

    Anda harus membuat file konfigurasi kredensial dan menyalinnya ke direktori diagram yang sesuai:

    Akun layanan Diagram Helm Apigee
    apigee-non-prod apigee-datastore/
    apigee-telemetry/
    apigee-org/
    apigee-env/
    1. Buat file konfigurasi kredensial di direktori diagram apigee-datastore dengan perintah berikut:
      gcloud iam workload-identity-pools create-cred-config \
      projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \
      --service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com \
      --credential-source-file=/var/run/service-account/token \
      --credential-source-type=text \
      --output-file=$APIGEE_HELM_CHARTS_HOME/apigee-datastore/apigee-non-prod-credential-configuration.json
      

      Dengan:

      • PROJECT_NUMBER: Nomor project dari project yang berisi workload identity pool. Ini harus berupa nomor project, bukan project ID.
      • POOL_ID: ID workload identity pool
      • WORKLOAD_PROVIDER_ID: ID penyedia workload identity pool
    2. Salin file konfigurasi kredensial ke direktori diagram apigee-env, apigee-org/, dan apigee-telemetry/.
      cp $APIGEE_HELM_CHARTS_HOME/apigee-datastore/apigee-non-prod-credential-configuration.json \
        $APIGEE_HELM_CHARTS_HOME/apigee-env/apigee-non-prod-credential-configuration.json
      cp $APIGEE_HELM_CHARTS_HOME/apigee-datastore/apigee-non-prod-credential-configuration.json \
        $APIGEE_HELM_CHARTS_HOME/apigee-org/apigee-non-prod-credential-configuration.json
      cp $APIGEE_HELM_CHARTS_HOME/apigee-datastore/apigee-non-prod-credential-configuration.json \
        $APIGEE_HELM_CHARTS_HOME/apigee-telemetry/apigee-non-prod-credential-configuration.json
      
    Catatan:Tidak seperti kunci akun layanan, file konfigurasi kredensial tidak berisi kunci pribadi dan tidak perlu dirahasiakan.
    Detail tentang file konfigurasi kredensial tersedia di https://google.aip.dev/auth/4117.

    WIF: Vault

    Pendekatan ini menggunakan konfigurasi kredensial yang disimpan di pengelola secret eksternal, Hashicorp Vault. Saat Anda membuat file penggantian di Langkah 7: Buat penggantian, Anda menyediakan secret vault tingkat organisasi dan tingkat lingkungan dengan properti serviceAccountSecretProviderClass atau envs.serviceAccountSecretProviderClass.

    Buat file konfigurasi kredensial

    Produksi

    Anda harus membuat file konfigurasi kredensial untuk akun layanan berikut:

    • apigee-cassandra
    • apigee-mart
    • apigee-metrics
    • apigee-mint-task-scheduler (Jika menggunakan Monetisasi untuk Apigee Hybrid)
    • apigee-runtime
    • apigee-synchronizer
    • apigee-udca
    1. Buat direktori untuk file konfigurasi kredensial. Direktori dapat memiliki nama apa pun. Untuk prosedur ini, direktori diberi nama credential-configurations:
      mkdir $APIGEE_HELM_CHARTS_HOME/credential-configurations
    2. Buat file konfigurasi kredensial untuk apigee-cassandra:
      gcloud iam workload-identity-pools create-cred-config \
        projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \
        --service-account=apigee-cassandra@$PROJECT_ID.iam.gserviceaccount.com \
        --credential-source-file=/var/run/service-account/token \
        --credential-source-type=text \
        --output-file=$APIGEE_HELM_CHARTS_HOME/credential-configurations/apigee-cassandra-credential-configuration.json
      

      Dengan:

      • PROJECT_NUMBER: Nomor project dari project yang berisi workload identity pool. Ini harus berupa nomor project, bukan project ID.
      • POOL_ID: ID workload identity pool
      • WORKLOAD_PROVIDER_ID: ID penyedia workload identity pool
    3. Buat file konfigurasi kredensial untuk apigee-mart:
      gcloud iam workload-identity-pools create-cred-config \
        projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \
        --service-account=apigee-mart@$PROJECT_ID.iam.gserviceaccount.com \
        --credential-source-file=/var/run/service-account/token \
        --credential-source-type=text \
        --output-file=$APIGEE_HELM_CHARTS_HOME/credential-configurations/apigee-mart-credential-configuration.json
      
    4. Buat file konfigurasi kredensial untuk apigee-metrics:
      gcloud iam workload-identity-pools create-cred-config \
        projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \
        --service-account=apigee-metrics@$PROJECT_ID.iam.gserviceaccount.com \
        --credential-source-file=run/service-account/token \
        --credential-source-type=text \
        --output-file=$APIGEE_HELM_CHARTS_HOME/credential-configurations/apigee-metrics-credential-configuration.json
      
    5. Buat file konfigurasi kredensial untuk apigee-runtime:
      gcloud iam workload-identity-pools create-cred-config \
        projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \
        --service-account=apigee-runtime@$PROJECT_ID.iam.gserviceaccount.com \
        --credential-source-file=/var/run/service-account/token \
        --credential-source-type=text \
        --output-file=$APIGEE_HELM_CHARTS_HOME/credential-configurations/apigee-runtime-credential-configuration.json
      
    6. Buat file konfigurasi kredensial untuk apigee-synchronizer:
      gcloud iam workload-identity-pools create-cred-config \
        projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \
        --service-account=apigee-synchronizer@$PROJECT_ID.iam.gserviceaccount.com \
        --credential-source-file=/var/run/service-account/token \
        --credential-source-type=text \
        --output-file=$APIGEE_HELM_CHARTS_HOME/credential-configurations/apigee-synchronizer-credential-configuration.json
      
    7. Buat file konfigurasi kredensial untuk apigee-udca:
      gcloud iam workload-identity-pools create-cred-config \
        projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \
        --service-account=apigee-udca@$PROJECT_ID.iam.gserviceaccount.com \
        --credential-source-file=/var/run/service-account/token \
        --credential-source-type=text \
        --output-file=$APIGEE_HELM_CHARTS_HOME/credential-configurations/apigee-udca-credential-configuration.json
      
    8. Buat file konfigurasi kredensial untuk apigee-watcher:
      gcloud iam workload-identity-pools create-cred-config \
        projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \
        --service-account=apigee-watcher@$PROJECT_ID.iam.gserviceaccount.com \
        --credential-source-file=/var/run/service-account/token \
        --credential-source-type=text \
        --output-file=$APIGEE_HELM_CHARTS_HOME/credential-configurations/apigee-watcher-credential-configuration.json
      
    9. Jika menggunakan Monetisasi untuk Apigee hybrid, Anda juga perlu membuat file konfigurasi kredensial untuk apigee-mint-task-scheduler:
      gcloud iam workload-identity-pools create-cred-config \
        projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \
        --service-account=apigee-mint-task-scheduler@$PROJECT_ID.iam.gserviceaccount.com \
        --credential-source-file=/var/run/service-account/token \
        --credential-source-type=text \
        --output-file=$APIGEE_HELM_CHARTS_HOME/credential-configurations/apigee-mint-task-scheduler-credential-configuration.json
      

    Non-prod

    1. Buat direktori untuk file konfigurasi kredensial. Direktori dapat memiliki nama apa pun. Untuk prosedur ini, direktori diberi nama credential-configurations:
      mkdir $APIGEE_HELM_CHARTS_HOME/credential-configurations
    2. Buat file konfigurasi kredensial di untuk akun layanan apigee-non-prod di direktori credential-configurations dengan perintah berikut:
      gcloud iam workload-identity-pools create-cred-config \
      projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \
        --service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com \
        --credential-source-file=/var/run/service-account/token \
        --credential-source-type=text \
        --output-file=$APIGEE_HELM_CHARTS_HOME/credential-configurations/apigee-non-prod-credential-configuration.json
      

      Dengan:

      • PROJECT_NUMBER: Nomor project dari project yang berisi workload identity pool. Ini harus berupa nomor project, bukan project ID. "
      • POOL_ID: ID workload identity pool
      • WORKLOAD_PROVIDER_ID: ID penyedia workload identity pool

    Menginstal driver CSI dan penyedia Vault

    Jika Anda belum menginstal driver CSI di cluster menggunakan Helm, ikuti petunjuk di Secrets Store CSI Driver: Installation. Untuk mengetahui informasi selengkapnya, lihat Menginstal penyedia CSI Vault dalam dokumentasi Vault.

    Lihat Platform dan versi yang didukung Apigee Hybrid untuk mengetahui versi Driver CSI minimum yang didukung oleh Apigee Hybrid.

    Membuat secret, kebijakan, dan peran Vault

    Gunakan UI atau API Vault untuk membuat secret dan memberikan izin bagi akun layanan Kubernetes yang digunakan oleh Apigee Hybrid untuk membaca secret tersebut.

    1. Buat secret khusus organisasi dan lingkungan dalam format berikut:
      Kunci RahasiaData Rahasia
      secret/data/apigee/orgsakeys
      {
        "cassandraBackup": "***",
        "cassandraRestore": "***",
        "connectAgent": "***",
        "logger": "***",
        "mart": "***",
        "metrics": "***",
        "mint": "***",
        "udca": "***",
        "watcher": "***"
      }
      secret/data/apigee/envsakeys-ENV_NAME
      {
        "runtime": "***",
        "synchronizer": "***",
        "udca": "***".
          }

      Produksi

      Ganti "***" di setiap pasangan dengan konten file konfigurasi kredensial untuk akun layanan Google yang sesuai dengan komponen Apigee. apigee-cassandra-backup dan apigee-cassandra-restore menggunakan akun layanan apigee-cassandra. Contoh:

      {
        "cassandraBackup": "{
          "universe_domain": "googleapis.com",
          "type": "external_account:,"
          "audience": "//iam.googleapis.com/projects/123123123123/locations/global/workloadIdentityPools/my-wi-pool/providers/my-wi-provider",
          "subject_token_type": "urn:ietf:params:oauth: token-type:jwt",
          "token_url": "https://sts.googleapis.com/v1/token",
          "service
          "impersonation_url": "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/apigee-cassandra@my-project.iam.gserviceaccount.com:generateAccessToken",
          "credential_source": {
            "file": "/var/run/service-account/token",
            "format": {
              "type": "text"
            }
          }
        }",
        "cassandraRestore":...
      ...
      }

      Non-prod

      Ganti "***" di setiap pasangan dengan konten file konfigurasi kredensial untuk akun layanan apigee-non-prod. apigee-cassandra-backup dan apigee-cassandra-restore menggunakan akun layanan apigee-cassandra. Contoh:

      {
        "cassandraBackup": "{
          "universe_domain": "googleapis.com",
          "type": "external_account:,"
          "audience": "//iam.googleapis.com/projects/123123123123/locations/global/workloadIdentityPools/my-wi-pool/providers/my-wi-provider",
          "subject_token_type": "urn:ietf:params:oauth: token-type:jwt",
          "token_url": "https://sts.googleapis.com/v1/token",
          "service
          "impersonation_url": "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/apigee-non-prod@my-project.iam.gserviceaccount.com:generateAccessToken",
          "credential_source": {
            "file": "/var/run/service-account/token",
            "format": {
              "type": "text"
            }
          }
        }",
        "cassandraRestore":...
      ...
      }
    2. Berikan akses ke secret organisasi. Buat file teks bernama orgsakeys-auth-policy.txt dengan konten berikut:
      path "secret/data/apigee/orgsakeys" {
        capabilities = ["read"]
      }
    3. Di Vault, buat kebijakan yang memberikan akses ke secret organisasi:
      vault policy write apigee-orgsakeys-auth orgsakeys-auth-policy.txt
    4. Untuk setiap lingkungan, buat file teks bernama envsakeys-ENV_NAME-auth-policy.txt dengan konten berikut:
      path "secret/data/apigee/envsakeys-ENV_NAME" {
        capabilities = ["read"]
      }

      Ulangi langkah ini untuk setiap lingkungan.

    5. Dalam Vault, buat kebijakan yang memberikan akses ke secret lingkungan:
      vault policy write apigee-envsakeys-ENV_NAME-auth envsakeys-ENV_NAME-auth-policy.txt

      Ulangi langkah ini untuk setiap lingkungan.

    6. Buat skrip bernama generate-encoded-sas.sh dengan konten berikut:
      # generate-encoded-sas.sh
      
      ORG=$APIGEE_ORG            # Apigee organization name
      ENVS=$APIGEE_ENV_LIST      # comma separated env names, for example: dev,prod
      
      ORG_SHORT_NAME=$(echo $ORG | head -c 15)
      ENCODE=$(echo -n $ORG | shasum -a 256 | head -c 7)
      ORG_ENCODE=$(echo "$ORG_SHORT_NAME-$ENCODE")
      NAMES=apigee-manager,apigee-cassandra-default,apigee-cassandra-backup-sa,apigee-cassandra-restore-sa,apigee-cassandra-schema-setup-${ORG_ENCODE},apigee-cassandra-schema-val-${ORG_ENCODE},apigee-cassandra-user-setup-${ORG_ENCODE},apigee-mart-${ORG_ENCODE},apigee-mint-task-scheduler-${ORG_ENCODE},apigee-connect-agent-${ORG_ENCODE},apigee-watcher-${ORG_ENCODE},apigee-udca-${ORG_ENCODE},apigee-metrics-apigee-telemetry,apigee-open-telemetry-collector-apigee-telemetry,apigee-logger-apigee-telemetry
      
      for ENV in ${ENVS//,/ }
        do
          ENV_SHORT_NAME=$(echo $ENV | head -c 15)
          ENCODE=$(echo -n $ORG:$ENV | shasum -a 256 | head -c 7)
          ENV_ENCODE=$(echo "$ORG_SHORT_NAME-$ENV_SHORT_NAME-$ENCODE")
          NAMES+=,apigee-synchronizer-${ENV_ENCODE},apigee-runtime-${ENV_ENCODE}
        done
      
      echo $NAMES
      
    7. Jalankan skrip untuk membuat daftar nama akun layanan yang akan mengikat kebijakan:
      ./generate-encoded-sas.sh

      Output Anda harus berupa daftar nama akun layanan Kubernetes yang dipisahkan dengan koma, mirip dengan contoh berikut:

      ./generate-encoded-sas.sh
      apigee-manager,apigee-cassandra-default,apigee-cassandra-backup-sa,
      apigee-cassandra-restore-sa,apigee-cassandra-schema-setup-myhybrido
      rg-5b044c1,apigee-cassandra-schema-val-myhybridorg-5b044c1,apigee-c
      assandra-user-setup-myhybridorg-5b044c1,apigee-mart-myhybridorg-5b0
      44c1,apigee-mint-task-scheduler-myhybridorg-5b044c1,apigee-connect-
      agent-myhybridorg-5b044c1,apigee-watcher-myhybridorg-5b044c1,apigee
      -udca-myhybridorg-5b044c1,apigee-metrics-apigee-telemetry,apigee-op
      en-telemetry-collector-apigee-telemetry,apigee-logger-apigee-teleme
      try,apigee-synchronizer-myhybridorg-dev-ee52aca,apigee-runtime-myhy
      bridorg-dev-ee52aca,apigee-synchronizer-myhybridorg-prod-2d0221c,ap
      igee-runtime-myhybridorg-prod-2d0221c
    8. Salin teks output ke dalam dan pisahkan ke dalam daftar, satu daftar untuk nama akun layanan org dan daftar terpisah untuk nama akun layanan env untuk setiap lingkungan. Akun layanan org berada di urutan pertama dalam daftar output hingga apigee-logger-apigee-telemetry.

      Daftar nama layanan org dari contoh sebelumnya:

      apigee-manager,apigee-cassandra-default,apigee-cassandra-backup-sa,
      apigee-cassandra-restore-sa,apigee-cassandra-schema-setup-myhybrido
      rg-5b044c1,apigee-cassandra-schema-val-myhybridorg-5b044c1,apigee-c
      assandra-user-setup-myhybridorg-5b044c1,apigee-mart-myhybridorg-5b0
      44c1,apigee-mint-task-scheduler-myhybridorg-5b044c1,apigee-connect-
      agent-myhybridorg-5b044c1,apigee-watcher-myhybridorg-5b044c1,apigee
      -udca-myhybridorg-5b044c1,apigee-metrics-apigee-telemetry,apigee-op
      en-telemetry-collector-apigee-telemetry,apigee-logger-apigee-teleme
      try

      Nama akun layanan env memiliki pola apigee-synchronizer-ORG_NAME-ENV_NAME-HASH_TEXT dan apigee-runtime-ORG_NAME-ENV_NAME-HASH_TEXT. Pisahkan ke dalam daftar terpisah untuk setiap lingkungan. Misalnya, output dari contoh sebelumnya dapat dipisahkan menjadi dua daftar berikut:

      Lingkungan dev:

      apigee-synchronizer-myhybridorg-dev-ee52aca,apigee-runtime-myhybrid
      org-dev-ee52aca

      Lingkungan prod:

      apigee-synchronizer-myhybridorg-prod-2d0221c,apigee-runtime-myhybri
      dorg-prod-2d0221c
    9. Dengan menggunakan kebijakan tersebut, buat peran Vault yang mengikat akun layanan Apigee khusus organisasi:
      vault write auth/kubernetes/role/apigee-orgsakeys \
        bound_service_account_names=LIST_OF_ORG_SA_NAMES \
        bound_service_account_namespaces=apigee \
        policies=apigee-orgsakeys-auth \
        ttl=1m
          
    10. Untuk setiap lingkungan, buat peran Vault untuk kunci akun layanannya:
      vault write auth/kubernetes/role/apigee-envsakeys-ENV_NAME \
        bound_service_account_names=LIST_OF_ENV_NAME_SA_NAMES \
        bound_service_account_namespaces=apigee \
        policies=apigee-envsakeys-ENV_NAME-auth \ 
        ttl=1m
      

      Ulangi langkah ini untuk setiap lingkungan.

    Membuat objek SecretProviderClass

    Resource SecretProviderClass memberi tahu driver CSI penyedia mana yang harus dihubungi saat meminta rahasia. Kunci akun layanan harus dikonfigurasi melalui objek ini. Tabel berikut menunjukkan nama file (objectNames) yang diharapkan oleh Apigee Hybrid:

    Akun layananNama file rahasia yang diharapkan
    Pencadangan Cassandra cassandraBackup
    Pemulihan Cassandra cassandraRestore
    Menghubungkan agen connectAgent
    MART mart
    Metrik metrics
    Monetisasi
    (jika menggunakan Monetisasi untuk Apigee Hybrid)
    mint
    Runtime runtime
    Penyinkron synchronizer
    UDCA udca
    Pengamat watcher
    1. Gunakan template SecretProviderClass berikut untuk mengonfigurasi resource ini untuk rahasia khusus organisasi:
      apiVersion: secrets-store.csi.x-k8s.io/v1
      kind: SecretProviderClass
      metadata:
        name: apigee-orgsakeys-spc
      spec:
        provider: vault
        parameters:
          roleName: apigee-orgsakeys
          vaultAddress: VAULT_ADDRESS
          # "objectName" is an alias used within the SecretProviderClass to reference
          # that specific secret. This will also be the filename containing the secret.
          # Apigee Hybrid expects these exact values so they must not be changed.
          # "secretPath" is the path in Vault where the secret should be retrieved.
          # "secretKey" is the key within the Vault secret response to extract a value from.
            objects: |
            - objectName: "cassandraBackup"
              secretPath: ""
              secretKey: ""
            - objectName: "cassandraRestore"
              secretPath: ""
              secretKey: ""
            - objectName: "connectAgent"
              secretPath: ""
              secretKey: ""
            - objectName: "logger"
              secretPath: ""
              secretKey: ""
            - objectName: "mart"
              secretPath: ""
              secretKey: ""
            - objectName: "metrics"
              secretPath: ""
              secretKey: ""
            - objectName: "mint"
              secretPath: ""
              secretKey: ""
            - objectName: "udca"
              secretPath: ""
              secretKey: ""
            - objectName: "watcher"
              secretPath: ""
              secretKey: ""
      

      VAULT_ADDRESS adalah endpoint tempat server Vault Anda berjalan. Jika Vault berjalan di cluster yang sama dengan Apigee, formatnya umumnya adalah http://vault.$APIGEE_NAMESPACE.svc.cluster.local:VAULT_SERVICE_PORT.

      Simpan template ke file bernama spc-org.yaml.

    2. Terapkan SecretProviderClass khusus organisasi ke namespace apigee Anda:
      kubectl -n $APIGEE_NAMESPACE apply -f spc-org.yaml
    3. Untuk setiap lingkungan, gunakan template SecretProviderClass berikut untuk mengonfigurasi resource ini bagi secret khusus lingkungan. Ulangi langkah ini untuk setiap lingkungan:
      apiVersion: secrets-store.csi.x-k8s.io/v1
      kind: SecretProviderClass
      metadata:
        name: apigee-envsakeys-ENV_NAME-spc
      spec:
        provider: vault
        parameters:
          roleName: apigee-envsakeys-ENV_NAME
          vaultAddress: VAULT_ADDRESS
          # "objectName" is an alias used within the SecretProviderClass to reference
          # that specific secret. This will also be the filename containing the secret.
          # Apigee Hybrid expects these exact values so they must not be changed.
          # "secretPath" is the path in Vault where the secret should be retrieved.
          # "secretKey" is the key within the Vault secret response to extract a value from.
          objects: |
            - objectName: "runtime"
              secretPath: ""
              secretKey: ""
            - objectName: "synchronizer"
              secretPath: ""
              secretKey: ""
            - objectName: "udca"
              secretPath: ""
              secretKey: ""
          

      VAULT_ADDRESS adalah endpoint tempat server Vault Anda berjalan. Jika Vault berjalan di cluster dan namespace yang sama dengan Apigee, formatnya biasanya adalah http://vault.$APIGEE_NAMESPACE.svc.cluster.local:VAULT_SERVICE_PORT.

      Simpan template ke file bernama spc-env-ENV_NAME.yaml.

    4. Untuk setiap lingkungan, terapkan SecretProviderClass khusus lingkungan ke namespace apigee Anda:
      kubectl -n $APIGEE_NAMESPACE apply -f spc-env-ENV_NAME.yaml

      Ulangi langkah ini untuk setiap lingkungan.

Langkah berikutnya

1 2 3 4 5 (NEXT) Langkah 6: Buat sertifikat TLS 7 8 9 10 11