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.
-
Buat secret khusus organisasi dan lingkungan dalam format berikut:
Kunci Rahasia Data 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
danapigee-cassandra-restore
menggunakan akun layananapigee-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":... ... }
- Berikan akses ke secret organisasi. Buat file teks bernama orgsakeys-auth-policy.txt dengan konten berikut:
path "secret/data/apigee/orgsakeys" { capabilities = ["read"] }
-
Di Vault, buat kebijakan yang memberikan akses ke secret organisasi:
vault policy write apigee-orgsakeys-auth orgsakeys-auth-policy.txt
-
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.
-
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.
-
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
-
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 -
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
danapigee-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
-
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
-
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 layanan | Nama 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 |
-
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
. -
Terapkan
SecretProviderClass
khusus organisasi ke namespace apigee Anda:kubectl -n $APIGEE_NAMESPACE apply -f spc-org.yaml
-
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
. -
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.
-
Opsional: Anda dapat menghapus file JSON akun layanan setelah membuat objek
SecretProviderClass
.
WIF untuk GKE
Bersiap untuk mengonfigurasi Workload Identity Federation untuk GKE
- 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
. - Periksa apakah konfigurasi
gcloud
saat ini disetel ke project ID Google Cloud Anda dengan perintah berikut:gcloud config get project
- 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
-
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
danapigee-runtime
. - 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
Jika perlu, tetapkan konfigurasi gcloud
saat ini:
gcloud config set project $PROJECT_ID
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.
-
$APIGEE_HELM_CHARTS_HOME
: Direktori tempat Anda mendownload diagram Helm Apigee, yang ditentukan di Langkah 2: Download diagram Helm Apigee. -
$PROJECT_ID
: Project ID Google Cloud Anda, yang ditentukan di Bagian 1: Penyiapan Project dan Organisasi--Langkah 1: Aktifkan API.
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.
-
Periksa apakah konfigurasi
gcloud
saat ini disetel ke project ID Google Cloud Anda dengan perintah berikut:gcloud config get project
-
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 theserviceusage.services.enable
permission. Learn how to grant roles.Command line
Aktifkan API dengan perintah berikut:
gcloud services enable sts.googleapis.com --project $PROJECT_ID
-
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:
-
Admin Workload Identity Pool (
roles/iam.workloadIdentityPoolAdmin
) -
Service Account Admin (
roles/iam.serviceAccountAdmin
)
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:
-
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.
-
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.
-
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 poolDISPLAY_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"
-
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. -
-
Admin Workload Identity Pool (
Jika perlu, tetapkan konfigurasi gcloud
saat ini:
gcloud config set project $PROJECT_ID
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:
-
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
-
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
atauenvs.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
- 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
-
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
-
-
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
-
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
-
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
-
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
-
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
-
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
-
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
- 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
-
Buat file konfigurasi kredensial di untuk akun layanan
apigee-non-prod
di direktoricredential-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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
atauenvs.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 diagramapigee-org
danapigee-env
.-
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
-
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
-
Buat file konfigurasi kredensial di direktori diagram
-
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/
-
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
-
-
Salin file konfigurasi kredensial ke direktori diagram
apigee-env
,apigee-org/
, danapigee-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
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
atauenvs.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
- 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
-
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
-
-
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
-
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
-
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
-
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
-
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
-
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
-
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
- 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
-
Buat file konfigurasi kredensial di untuk akun layanan
apigee-non-prod
di direktoricredential-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.
-
Buat secret khusus organisasi dan lingkungan dalam format berikut:
Kunci Rahasia Data 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
danapigee-cassandra-restore
menggunakan akun layananapigee-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 layananapigee-non-prod
.apigee-cassandra-backup
danapigee-cassandra-restore
menggunakan akun layananapigee-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":... ... }
- Berikan akses ke secret organisasi. Buat file teks bernama orgsakeys-auth-policy.txt dengan konten berikut:
path "secret/data/apigee/orgsakeys" { capabilities = ["read"] }
-
Di Vault, buat kebijakan yang memberikan akses ke secret organisasi:
vault policy write apigee-orgsakeys-auth orgsakeys-auth-policy.txt
-
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.
-
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.
-
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
-
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 -
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
danapigee-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
-
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
-
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 layanan Nama 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
-
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
. -
Terapkan
SecretProviderClass
khusus organisasi ke namespace apigee Anda:kubectl -n $APIGEE_NAMESPACE apply -f spc-org.yaml
-
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
. -
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.