Topik ini menjelaskan cara mengaktifkan Workload Identity untuk Apigee Hybrid.
Ringkasan
Workload Identity adalah cara bagi aplikasi yang berjalan dalam GKE (Google Kubernetes Engine) untuk mengakses layanan Google Cloud. Untuk mengetahui ringkasan Workload Identity, lihat:
- Memperkenalkan Workload Identity: Autentikasi yang lebih baik untuk aplikasi GKE Anda
- Menggunakan Workload Identity
Akun layanan Google Cloud IAM adalah identitas yang dapat digunakan aplikasi untuk membuat permintaan ke Google API. Akun layanan ini disebut sebagai GSA (Akun Layanan Google) dalam dokumen. Untuk informasi selengkapnya tentang GSA, lihat Akun layanan.
Secara terpisah, Kubernetes juga memiliki konsep akun layanan. Akun layanan memberikan identitas untuk proses yang berjalan di dalam Pod. Akun layanan Kubernetes adalah resource Kubernetes, sedangkan akun layanan Google khusus untuk Google Cloud. Untuk mengetahui informasi tentang akun layanan Kubernetes, lihat Mengonfigurasi Akun Layanan untuk Pod dalam dokumentasi Kubernetes.
Dengan Apigee Hybrid 1.4 dan yang lebih baru, Apigee membuat dan menggunakan akun layanan Kubernetes untuk setiap jenis komponen. Dengan mengaktifkan Workload Identity, komponen hybrid dapat berinteraksi dengan akun layanan Kubernetes.
Prasyarat
Sebelum mengaktifkan Workload Identity untuk Apigee Hybrid, Workload Identity harus diaktifkan untuk cluster GKE yang menjalankan Apigee.
Jika Anda mengikuti petunjuk untuk Anthos Service Mesh (ASM), Workload Identity sudah diaktifkan untuk cluster.
Anda dapat mengonfirmasi apakah Workload Identity diaktifkan dengan menjalankan perintah berikut:
gcloud container clusters describe $CLUSTER_NAME
Output harus mencakup sesuatu seperti berikut:
… … status: RUNNING subnetwork: default workloadIdentityConfig: workloadPool: PROJECT_ID.svc.id.goog
Saat menjalankan Apigee Hybrid di GKE, praktik standarnya adalah membuat dan mendownload kunci pribadi (file .json
) untuk setiap akun layanan. Saat menggunakan Workload Identity, Anda tidak perlu mendownload kunci pribadi akun layanan dan menambahkannya ke cluster GKE.
Mengaktifkan Workload Identity untuk Apigee Hybrid
Untuk memulai, ikuti petunjuk di bagian Mempersiapkan untuk mengaktifkan Workload Identity guna mengupdate kumpulan node dan menginisialisasi variabel sebelum mengaktifkan Workload Identity.
Kemudian, ikuti salah satu bagian ini, bergantung pada langkah yang Anda lakukan:- Aktifkan Workload Identity untuk penginstalan baru. Ikuti petunjuk ini untuk penginstalan hybrid Apigee baru atau jika Anda belum menginstal ASM di penginstalan hybrid.
- Mengupgrade penginstalan untuk menggunakan Workload Identity. Ikuti petunjuk ini untuk mengaktifkan Workload Identity pada penginstalan hybrid Apigee yang sudah ada.
Bersiap untuk mengaktifkan Workload Identity
Sebelum memulai proses penginstalan, ikuti langkah-langkah di bagian ini.
Menginisialisasi variabel
Lakukan inisialisasi (atau verifikasi) variabel berikut:
export PROJECT_ID=my-project-idexport ORG_NAME=$PROJECT_ID
export ENV_NAME=my-environment-name
export NAMESPACE=apigee #the namespace where apigee is installed
Tetapkan project ke project yang Anda modifikasi:
gcloud config set project $PROJECT_ID
Mengupdate node pool
Pastikan Workload Identity diaktifkan per kumpulan node dengan perintah berikut:
gcloud container node-pools update $NODE_POOL_NAME \ --cluster=$CLUSTER_NAME \ --workload-metadata=GKE_METADATA
Mengaktifkan Workload Identity untuk penginstalan baru
Ikuti petunjuk ini saat mengaktifkan Workload Identity selama penginstalan hybrid baru.
- Tambahkan baris tebal di bawah ini ke file
overrides.yaml
Anda di bawah stanzagcp
:gcp: projectID: "my-project" name: "my-project" region: "us-west1" workloadIdentityEnabled: true
- Membuat Akun Layanan Google. Ada dua metode yang dapat Anda gunakan:
- Gunakan alat
create-service-account
untuk membuat akun layanan Google per komponen dengan perintah berikut:$APIGEECTL_HOME/tools/create-service-account --env prod --dir $APIGEECTL_HOME/../service-accounts
Perintah ini akan membuat akun layanan berikut:
apigee-logger
apigee-metrics
apigee-cassandra
apigee-udca
apigee-synchronizer
apigee-mart
apigee-watcher
apigee-distributed-trace
Petunjuk berikut mengasumsikan bahwa Anda menggunakan alat
create-service-account
untuk membuat akun layanan. - Tentukan konvensi penamaan kustom dan akun layanan per lingkungan (untuk pengguna tingkat lanjut).
- Gunakan alat
- Membuat Akun Layanan Kubernetes.
Untuk komponen tingkat organisasi:
- Cassandra
kubectl create sa -n $NAMESPACE apigee-cassandra-schema-setup-$(apigeectl encode --org $ORG_NAME)-sa \ && kubectl label sa -n $NAMESPACE -l app=apigee-cassandra,org=$ORG_NAME \ && kubectl annotate serviceaccount \ --namespace $NAMESPACE apigee-cassandra-schema-setup-$(apigeectl encode --org $ORG_NAME)-sa iam.gke.io/gcp-service-account=GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
kubectl create sa -n $NAMESPACE apigee-cassandra-user-setup-$(apigeectl encode --org $ORG_NAME)-sa \ && kubectl label sa -n $NAMESPACE -l app=apigee-cassandra,org=$ORG_NAME \ && kubectl annotate serviceaccount \ --namespace $NAMESPACE apigee-cassandra-user-setup-$(apigeectl encode --org $ORG_NAME)-sa iam.gke.io/gcp-service-account=GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- MART
kubectl create sa -n $NAMESPACE apigee-mart-$(apigeectl encode --org $ORG_NAME)-sa \ && kubectl label sa -n $NAMESPACE -l app=apigee-mart,org=$ORG_NAME \ && kubectl annotate serviceaccount \ --namespace $NAMESPACE apigee-mart-$(apigeectl encode --org $ORG_NAME)-sa iam.gke.io/gcp-service-account=GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Apigee Connect
kubectl create sa -n $NAMESPACE apigee-connect-$(apigeectl encode --org $ORG_NAME)-sa \ && kubectl label sa -n $NAMESPACE -l app=apigee-connect,org=$ORG_NAME \ && kubectl annotate serviceaccount \ --namespace $NAMESPACE apigee-connect-$(apigeectl encode --org $ORG_NAME)-sa iam.gke.io/gcp-service-account=GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Pengamat Apigee
kubectl create sa -n $NAMESPACE apigee-watcher-$(apigeectl encode --org $ORG_NAME)-sa \ && kubectl label sa -n $NAMESPACE -l app=apigee-watcher,org=$ORG_NAME \ && kubectl annotate serviceaccount \ --namespace $NAMESPACE apigee-watcher-$(apigeectl encode --org $ORG_NAME)-sa iam.gke.io/gcp-service-account=GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Metrik Apigee
kubectl create sa -n $NAMESPACE apigee-metrics-sa \ && kubectl label sa -n $NAMESPACE -l app=apigee-metrics,org=$ORG_NAME \ && kubectl annotate serviceaccount \ --namespace $NAMESPACE apigee-metrics-sa iam.gke.io/gcp-service-account=GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Untuk setiap lingkungan:
- Runtime
kubectl create sa -n $NAMESPACE apigee-runtime-$(apigeectl encode --org $ORG_NAME --env $ENV_NAME)-sa \ && kubectl label sa -n $NAMESPACE -l app=apigee-runtime,org=$ORG_NAME,env=$ENV_NAME \ && kubectl annotate serviceaccount \ --namespace $NAMESPACE apigee-runtime-$(apigeectl encode --org $ORG_NAME --env $ENV_NAME)-sa iam.gke.io/gcp-service-account=GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- UDCA
kubectl create sa -n $NAMESPACE apigee-udca-$(apigeectl encode --org $ORG_NAME --env $ENV_NAME)-sa \ && kubectl label sa -n $NAMESPACE -l app=apigee-udca,org=$ORG_NAME,emv=$ENV_NAME \ && kubectl annotate serviceaccount \ --namespace $NAMESPACE apigee-udca-$(apigeectl encode --org $ORG_NAME --env $ENV_NAME)-sa iam.gke.io/gcp-service-account=GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Penyinkron
kubectl create sa -n $NAMESPACE apigee-synchronizer-$(apigeectl encode --org $ORG_NAME --env $ENV_NAME)-sa \ && kubectl label sa -n $NAMESPACE -l app=apigee-synchronizer,org=$ORG_NAME,env=$ENV_NAME \ && kubectl annotate serviceaccount \ --namespace $NAMESPACE apigee-synchronizer-$(apigeectl encode --org $ORG_NAME --env $ENV_NAME)-sa iam.gke.io/gcp-service-account=GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Cassandra
- Lanjutkan penginstalan Apigee Hybrid seperti biasa.
Mengupgrade penginstalan untuk menggunakan Workload Identity
Ikuti petunjuk ini untuk menambahkan Workload Identity ke penginstalan hybrid yang ada.
Berikut adalah contoh yang menampilkan Akun Layanan Google (GSA) yang dibuat untuk Apigee:
gcloud iam service-accounts list | grep apigee
apigee-connect apigee-connect@$PROJECT_ID.iam.gserviceaccount.com False apigee-runtime apigee-runtime@$PROJECT_ID.iam.gserviceaccount.com False apigee-metrics apigee-metrics@$PROJECT_ID.iam.gserviceaccount.com False apigee-mart apigee-mart@$PROJECT_ID.iam.gserviceaccount.com False apigee-watcher apigee-watcher@$PROJECT_ID.iam.gserviceaccount.com False apigee-sync apigee-sync@$PROJECT_ID.iam.gserviceaccount.com False apigee-udca apigee-udca@$PROJECT_ID.iam.gserviceaccount.com False
Berikut adalah contoh Akun Layanan Kubernetes (KSA) yang dibuat untuk Apigee (dengan asumsi Apigee hybrid 1.4 atau yang lebih tinggi diinstal):
kubectl get sa -n $NAMESPACE
apigee-cassandra-schema-setup-ORG_NAME
-cb84b88-sa 1 xxd apigee-cassandra-user-setup-ORG_NAME
-cb84b88-sa 1 xxd apigee-connect-agent-ORG_NAME
-cb84b88-sa 1 xxd apigee-init 1 xxd apigee-mart-ORG_NAME
-cb84b88-sa 1 xxd apigee-metrics-apigee-telemetry 1 xxd apigee-runtime-ORG_NAME-ENV_NAME
-1d0dc5e-sa 1 xxd apigee-synchronizer-ORG_NAME-ENV_NAME
-1d0dc5e-sa 1 xxd apigee-udca-ORG_NAME-ENV_NAME
-1d0dc5e-sa 1 xxd apigee-watcher-ORG_NAME
-cb84b88 1 xxd
- Tambahkan peran Workload Identity ke setiap akun layanan:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Misalnya, jika Anda menyetel izin untuk Apigee Sinkronisasir, Anda akan menjalankan:
export KSA_NAME=$(kubectl get sa -n apigee -l app=apigee-synchronizer,env=$ENV_NAME,org=$ORG_NAME --output=jsonpath={.items..metadata.name})
gcloud iam service-accounts add-iam-policy-binding --role roles/iam.workloadIdentityUser --member "serviceAccount:$PROJECT_ID.svc.id.goog[apigee/$KSA_NAME]" apigee-sync@$PROJECT_ID.iam.gserviceaccount.com
- Anotasikan setiap KSA dengan detail GSA:
kubectl annotate serviceaccount \ --namespace $NAMESPACE \ $KSA_NAME \ iam.gke.io/gcp-service-account=GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Misalnya, jika Anda menyetel izin untuk Apigee Sinkronisasir, Anda akan menjalankan:
export KSA_NAME=$(kubectl get sa -n apigee -l app=apigee-synchronizer,env=$ENV_NAME,org=$ORG_NAME --output=jsonpath={.items..metadata.name})
kubectl annotate serviceaccount --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-sync@$PROJECT_ID.iam.gserviceaccount.com
- Validasi apakah langkah-langkah tersebut berhasil:
gcloud config set project $PROJECT_ID
kubectl run --rm -it --image google/cloud-sdk:slim --serviceaccount $KSA_NAME --namespace $NAMESPACE workload-identity-test -- gcloud auth list
Jika Anda tidak melihat command prompt, coba tekan Enter.
Jika langkah-langkah tersebut dijalankan dengan benar, Anda akan melihat respons seperti berikut:
Credentialed Accounts ACTIVE ACCOUNT * GSA@PROJECT_ID.iam.gserviceaccount.com
- Jika mengupgrade dari penginstalan sebelumnya, bersihkan secret yang berisi kunci pribadi akun layanan:
kubectl delete secrets -n $NAMESPACE $(k get secrets -n $NAMESPACE | grep svc-account | awk '{print $1}')
- Periksa log:
kubectl logs -n $NAMESPACE -l app=apigee=synchronizer,env=$ENV_NAME,org=$ORG_NAME apigee-synchronizer