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 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 dikhususkan untuk Google Cloud. Untuk 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 serta menggunakan akun layanan Kubernetes untuk setiap jenis komponen. Dengan mengaktifkan Workload Identity, komponen hybrid dapat berinteraksi dengan akun layanan Kubernetes.
Akun layanan Google di Apigee Hybrid tanpa Workload Identity
Tanpa menggunakan Workload Identity, Anda harus menautkan akun layanan Google ke setiap komponen dalam file penggantian.yaml dengan referensi ke file sertifikat atau rahasia Kubernetes. Contoh:
- File sertifikasi:
watcher: serviceAccountPath: ./apigee-org/my-hybrid-project-apigee-watcher.json
Lihat:
- Rahasia Kubernetes:
watcher: serviceAccountRef: my-watcher-k8s-secret
Lihat:
Variabel lingkungan yang digunakan dalam prosedur ini
Prosedur ini menggunakan variabel lingkungan berikut. Tetapkan string ini di shell perintah Anda atau ganti dalam contoh kode dengan nilai sebenarnya:
APIGEECTL_HOME
: Direktori tempat Anda menginstalapigeectl
.CLUSTER_LOCATION
: Region atau zona cluster Anda, misalnya:us-west1
.ENV_NAME
: Lalu nama lingkungan Apigee.NAMESPACE
: Namespace Kubernetes yang Anda gunakan untuk Apigee Hybrid. Biasanyaapigee
.HYBRID_FILES
: Direktori file hybrid Anda, misalnyahybrid-base-directory/hybrid-files
.ORG_NAME
: Nama organisasi Apigee Anda.PROJECT_ID
: ID project Google Cloud Anda.
Verifikasi variabel lingkungan:
echo $PROJECT_IDecho $ORG_NAME
echo $ENV_NAME
echo $NAMESPACE
echo $CLUSTER_LOCATION
echo $APIGEECTL_HOME
echo $HYBRID_FILES
Lakukan inisialisasi setiap variabel yang Anda perlukan:
export PROJECT_ID=my-project-idexport ORG_NAME=$PROJECT_ID
export ENV_NAME=my-environment-name
export NAMESPACE=apigee
export CLUSTER_LOCATION=my-cluster-location
export APIGEECTL_HOME=hybrid-base-directory/apigeectl
export HYBRID_FILES=hybrid-base-directory/hybrid-files
File kunci Workload Identity dan akun layanan
Saat menjalankan Apigee Hybrid di GKE, praktik standarnya adalah membuat dan mendownload kunci pribadi (file .json
) untuk setiap akun layanan. Saat menggunakan Workload Identity, Anda tidak perlu mendownload kunci pribadi akun layanan dan menambahkannya ke cluster GKE.
Jika telah mendownload file kunci akun layanan sebagai bagian dari penginstalan hybrid Apigee, Anda dapat menghapusnya setelah mengaktifkan Workload Identity. Pada sebagian besar penginstalan, image tersebut berada di
direktori hybrid-base-directory/hybrid-files/service-accounts/
.
Mengaktifkan Workload Identity untuk Apigee Hybrid
Untuk memulai, ikuti petunjuk dalam artikel Mempersiapkan untuk mengaktifkan Workload Identity guna mengupdate kumpulan node dan menginisialisasi variabel sebelum mengaktifkan Workload Identity.
Kemudian, ikuti salah satu dari 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 pada penginstalan hybrid.
- Upgrade penginstalan untuk menggunakan Workload Identity. Ikuti petunjuk ini untuk mengaktifkan Workload Identity pada penginstalan hybrid Apigee yang sudah ada.
Persiapan untuk mengaktifkan Workload Identity
Sebelum memulai proses penginstalan, ikuti langkah-langkah di bagian ini.
- Tetapkan project ke project yang Anda modifikasi:
gcloud config set project $PROJECT_ID
-
Dapatkan kredensial
gcloud
cluster tempat Anda mengaktifkan Workload Identity dengan perintah berikut:gcloud container clusters get-credentials ${CLUSTER_NAME} \ --region ${CLUSTER_LOCATION} \ --project ${PROJECT_ID}
- Pastikan Workload Identity diaktifkan untuk cluster GKE yang menjalankan Apigee dengan perintah berikut:
gcloud container clusters describe $CLUSTER_NAME --region $CLUSTER_LOCATION --project $PROJECT_ID
Output harus mencakup sesuatu seperti berikut:
… … status: RUNNING subnetwork: default workloadIdentityConfig: workloadPool: my-project-id.svc.id.goog
Jika perlu, aktifkan workload identity di cluster. Operasi ini dapat memerlukan waktu hingga 30 menit:
gcloud container clusters update $CLUSTER_NAME \ --workload-pool=$PROJECT_ID.svc.id.goog \ --project $PROJECT_ID \ --region $CLUSTER_LOCATION
Untuk mengetahui informasi selengkapnya, lihat Mengaktifkan Workload Identity.
- Pastikan Workload Identity diaktifkan di setiap kumpulan node.
- Cantumkan node pool dengan perintah berikut:
gcloud container node-pools list \ --cluster $CLUSTER_NAME \ --region $CLUSTER_LOCATION \ --project $PROJECT_ID
Output Anda akan terlihat seperti ini:
NAME MACHINE_TYPE DISK_SIZE_GB NODE_VERSION apigee-runtime e2-standard-4 100 1.23.12-gke.100 apigee-data e2-standard-4 100 1.23.12-gke.100
- Pastikan Workload Identity diaktifkan per kumpulan node menggunakan perintah berikut untuk setiap kumpulan node:
gcloud container node-pools update NODE_POOL_NAME \ --cluster=$CLUSTER_NAME \ --region $CLUSTER_LOCATION \ --project $PROJECT_ID \ --workload-metadata=GKE_METADATA
Dengan NODE_POOL_NAME adalah nama setiap kumpulan node.
- Cantumkan node pool dengan perintah berikut:
Verifikasi atau buat akun layanan Google
Akun layanan Google dibuat untuk berbagai komponen campuran Apigee selama penginstalan. Gunakan prosedur ini untuk memverifikasi akun layanan Google dan membuat yang diperlukan.
- Periksa nama akun layanan Google untuk project Anda menggunakan perintah berikut:
gcloud iam service-accounts list --project $PROJECT_ID
Output Anda akan terlihat seperti ini:
Produksi
Untuk lingkungan non-produksi:
DISPLAY NAME EMAIL DISABLED apigee-cassandra apigee-cassandra@my_project_id.iam.gserviceaccount.com False apigee-logger apigee-logger@my_project_id.iam.gserviceaccount.com False apigee-mart apigee-mart@my_project_id.iam.gserviceaccount.com False apigee-metrics apigee-metrics@my_project_id.iam.gserviceaccount.com False apigee-runtime apigee-runtime@my_project_id.iam.gserviceaccount.com False apigee-synchronizer apigee-synchronizer@my_project_id.iam.gserviceaccount.com False apigee-udca apigee-udca@my_project_id.iam.gserviceaccount.com False apigee-watcher apigee-watcher@my_project_id.iam.gserviceaccount.com False
Non-produksi
Untuk lingkungan non-produksi:
DISPLAY NAME EMAIL DISABLED apigee-non-prod apigee-non-prod@my_project_id.iam.gserviceaccount.com False
Jika perlu membuat akun layanan Google untuk project Anda, ada dua metode yang dapat digunakan:
- Gunakan alat
create-service-account
yang disertakan dengan apigee dalam direktoriapigeectl/tools/
. Alat ini dapat membuat semua akun layanan dengan satu perintah atau memungkinkan Anda membuatnya satu per satu. - Gunakan perintah
gcloud iam service-accounts create
untuk membuat akun layanan satu per satu dan perintahgcloud projects add-iam-policy-binding
untuk menetapkan peran yang sesuai ke setiap akun layanan. Metode ini mengharuskan Anda membuat setiap akun layanan satu per satu, tetapi memungkinkan Anda agar tidak mendownload file kunci.
Gunakan perintah berikut untuk membuat akun layanan Google per komponen:create-service-account
Produksi
Untuk lingkungan non-produksi:
$APIGEECTL_HOME/tools/create-service-account --env prod --dir $APIGEECTL_HOME/../service-accounts
Perintah ini akan membuat akun layanan berikut:
apigee-cassandra
apigee-logger
apigee-mart
apigee-metrics
apigee-runtime
apigee-synchronizer
apigee-udca
apigee-watcher
Non-produksi
Untuk lingkungan non-produksi:
$APIGEECTL_HOME/tools/create-service-account --env non-prod --dir $APIGEECTL_HOME/../service-accounts
Perintah ini akan membuat satu akun layanan,
apigee-non-prod
, dengan semua peran yang ditetapkan yang diperlukan untuk mengelola semua komponen Apigee.gcloud
Buat akun layanan berikut dan tetapkan perannya.
- Akun layanan:
apigee-cassandra
, peran:roles/storage.objectAdmin
Buat akun:
gcloud iam service-accounts create apigee-cassandra \ --display-name="apigee-cassandra" \ --project $PROJECT_ID
Tetapkan peran:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:apigee-cassandra@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/storage.objectAdmin"
- Akun layanan:
apigee-logger
, peran:roles/logging.logWriter
Buat akun:
gcloud iam service-accounts create apigee-logger \ --display-name="apigee-logger" \ --project $PROJECT_ID
Tetapkan peran:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:apigee-logger@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/logging.logWriter"
- Akun layanan:
apigee-mart
, peran:roles/apigeeconnect.Agent
Buat akun:
gcloud iam service-accounts create apigee-mart \ --display-name="apigee-mart" \ --project $PROJECT_ID
Tetapkan peran:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:apigee-mart@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/apigeeconnect.Agent"
- Akun layanan:
apigee-metrics
, peran:roles/monitoring.metricWriter
Buat akun:
gcloud iam service-accounts create apigee-metrics \ --display-name="apigee-metrics" \ --project $PROJECT_ID
Tetapkan peran:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:apigee-metrics@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/monitoring.metricWriter"
- Akun layanan:
apigee-runtime
, peran: Tidak ada peran yang ditetapkan.Buat akun:
gcloud iam service-accounts create apigee-runtime \ --display-name="apigee-runtime" \ --project $PROJECT_ID
- Akun layanan:
apigee-synchronizer
, peran:roles/apigee.synchronizerManager
Buat akun:
gcloud iam service-accounts create apigee-synchronizer \ --display-name="apigee-synchronizer" \ --project $PROJECT_ID
Tetapkan peran:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:apigee-synchronizer@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/apigee.synchronizerManager"
- Akun layanan:
apigee-udca
, peran:roles/apigee.analyticsAgent
Buat akun:
gcloud iam service-accounts create apigee-udca \ --display-name="apigee-udca" \ --project $PROJECT_ID
Tetapkan peran:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:apigee-udca@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/apigee.analyticsAgent"
- Akun layanan:
apigee-watcher
, peran:roles/apigee.runtimeAgent
Buat akun:
gcloud iam service-accounts create apigee-watcher \ --display-name="apigee-watcher" \ --project $PROJECT_ID
Tetapkan peran:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:apigee-watcher@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/apigee.runtimeAgent"
- Gunakan alat
Tetapkan workloadIdentityEnabled: true
dan buat akun layanan
apigeectl
membuat akun layanan Kubernetes untuk setiap komponen hybrid Apigee saat Anda menetapkan workloadIdentityEnabled: true
dalam file penggantian dan menerapkan perubahannya.
- Tambahkan baris tebal di bawah ke file
overrides.yaml
Anda di bawah stanzagcp
. Hal ini mengaktifkan Workload Identity untuk penginstalan Anda dan memicuapigeectl
untuk membuat akun layanan Kubernetes saat Anda menerapkan konfigurasi:gcp: projectID: "my-project-id" name: "my-project-id" region: "analytics-region" workloadIdentityEnabled: true
- Tambahkan baris tebal di bawah ke file
overrides.yaml
Anda di bawah stanzacassandra
. Tindakan ini memicu pembuatan akun layanan Kubernetesapigee-cassandra-backup
:cassandra: ... backup: enabled: true
- Terapkan perubahan dengan
apigeectl
dengan flag--restore
:$APIGEECTL_HOME/apigeectl apply -f overrides/overrides.yaml --restore
- Verifikasi akun layanan dengan perintah berikut:
kubectl get sa -n $NAMESPACE
Output Anda akan terlihat seperti berikut. Akun layanan Kubernetes dalam format tebal adalah akun yang perlu diberi anotasi dengan akun layanan Google Anda:
NAME SECRETS AGE apigee-cassandra-backup 1 11m apigee-cassandra-restore 1 11m apigee-cassandra-schema-setup-my-project-id-123abcd-sa 1 11m apigee-cassandra-schema-val-my-project-id-123abcd 1 11m apigee-cassandra-user-setup-my-project-id-123abcd-sa 1 11m apigee-connect-agent-my-project-id-123abcd-sa 1 11m apigee-datastore-default-sa 1 11m apigee-ingressgateway 1 11m apigee-ingressgateway-my-project-id-123abcd 1 11m apigee-ingressgateway-manager 1 11m apigee-init 1 11m apigee-mart-my-project-id-123abcd-sa 1 11m apigee-metrics-sa 1 11m apigee-mint-task-scheduler-my-project-id-123abcd-sa 1 11m apigee-redis-default-sa 1 11m apigee-redis-envoy-default-sa 1 11m apigee-runtime-my-project-id-env-name-234bcde-sa 1 11m apigee-synchronizer-my-project-id-env-name-234bcde-sa 1 11m apigee-udca-my-project-id-123abcd-sa 1 11m apigee-udca-my-project-id-env-name-234bcde-sa 1 11m apigee-watcher-my-project-id-123abcd-sa 1 11m default 1 11m
Menganotasi akun layanan Kubernetes dengan akun layanan Google
Untuk setiap komponen Apigee, anotasikan akun layanan Kubernetes yang terkait dengan akun layanan Google untuk komponen tersebut.
Komponen tingkat org
Anda hanya akan memiliki satu instance dari setiap akun layanan Kubernetes untuk org Apigee Anda.
Komponen | Akun Layanan Kubernetes | Akun Layanan Google |
---|---|---|
Cassandra | apigee-cassandra-backup |
apigee-cassandra |
apigee-cassandra-restore |
apigee-cassandra |
|
apigee-cassandra-schema-setup-my-project-id-num-id1-sa |
apigee-cassandra |
|
apigee-cassandra-schema-val-my-project-id-num-id1 |
apigee-cassandra |
|
apigee-cassandra-user-setup-my-project-id-num-id1-sa |
apigee-cassandra |
|
apigee-datastore-default-sa |
apigee-cassandra |
|
Apigee Connect | apigee-connect-agent-my-project-id-num-id1-sa |
apigee-mart |
MART | apigee-mart-my-project-id-num-id1-sa |
apigee-mart |
Metrik | apigee-metrics-sa |
apigee-metrics |
UDCA (tingkat org) | apigee-udca-my-project-id-num-id1-sa |
apigee-udca |
Pengamat | apigee-watcher-my-project-id-num-id1-sa |
apigee-watcher |
Komponen tingkat Env
Anda akan memiliki satu instance dari setiap akun layanan Kubernetes untuk setiap lingkungan Apigee.
Komponen | Akun Layanan Kubernetes | Akun Layanan Google |
---|---|---|
Runtime Apigee | apigee-runtime-my-project-id-env-name-num-id2-sa |
apigee-runtime |
Sinkronisasi | apigee-synchronizer-my-project-id-env-name-num-id2-sa |
apigee-synchronizer |
UDCA (tingkat lingkungan) | apigee-udca-my-project-id-env-name-num-id2-sa |
apigee-udca |
Dalam perintah berikut, gunakan nama akun layanan Kubernetes yang ditampilkan oleh perintah kubectl get sa -n $NAMESPACE
, misalnya: apigee-cassandra-schema-val-hybrid-example-project-123abcd
.
Dalam prosedur ini, untuk setiap akun layanan Kubernetes, Anda akan:
-
Ikat akun layanan Kubernetes dan akun layanan Google utama ke peran IAM
roles/iam.workloadIdentityUser
. - Anotasikan akun layanan Kubernetes dengan akun layanan Google.
- Ikat peran dan anotasikan akun layanan.
Komponen tingkat org
Menganotasi akun layanan Kubernetes untuk komponen tingkat organisasi. Anda harus melakukan ini sekali untuk setiap komponen di organisasi Apigee Anda.
- Cassandra
Komponen Cassandra memiliki enam akun layanan Kubernetes terkait:
apigee-cassandra-backup
apigee-cassandra-restore
apigee-cassandra-schema-setup
apigee-cassandra-schema-val
(val
= validasi)apigee-cassandra-user-setup
apigee-datastore-default
Produksi
apigee-cassandra-backup
- Tentukan variabel lingkungan
KSA_NAME
danGSA_NAME
:GSA_NAME="apigee-cassandra"
KSA_NAME="apigee-cassandra-backup
" - Ikat peran IAM:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Anotasikan akun layanan:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
apigee-cassandra-restore
- Tentukan ulang variabel lingkungan
KSA_NAME
:KSA_NAME="apigee-cassandra-restore"
- Ikat peran IAM:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Anotasikan akun layanan:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
apigee-cassandra-schema-setup-service-account-name
- Tentukan ulang variabel lingkungan
KSA_NAME
:KSA_NAME="apigee-cassandra-schema-setup-service-account-name"
Ikat peran IAM:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Anotasikan akun layanan:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
apigee-cassandra-schema-val-service-account-name
- Tentukan ulang variabel lingkungan
KSA_NAME
:KSA_NAME="apigee-cassandra-schema-val-service-account-name"
- Ikat peran IAM:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Anotasikan akun layanan:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
apigee-cassandra-user-setup-service-account-name
- Tentukan ulang variabel lingkungan
KSA_NAME
:KSA_NAME="apigee-cassandra-user-setup-service-account-name"
- Ikat peran IAM:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Anotasikan akun layanan:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
apigee-datastore-default-sa
- Tentukan ulang variabel lingkungan
KSA_NAME
:KSA_NAME="apigee-datastore-default-sa"
- Ikat peran IAM:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Anotasikan akun layanan:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Non-produksi
apigee-cassandra-backup
- Tentukan variabel lingkungan
KSA_NAME
danGSA_NAME
:GSA_NAME="apigee-non-prod"
KSA_NAME="apigee-connect-agent-service-account-name"
- Ikat peran IAM:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Anotasikan akun layanan:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
apigee-cassandra-restore
- Tentukan ulang variabel lingkungan
KSA_NAME
:KSA_NAME="apigee-cassandra-restore"
- Ikat peran IAM:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Anotasikan akun layanan:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
apigee-cassandra-schema-setup-service-account-name
- Tentukan ulang variabel lingkungan
KSA_NAME
:KSA_NAME="apigee-cassandra-schema-setup-service-account-name"
- Ikat peran IAM:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Anotasikan akun layanan:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
apigee-cassandra-schema-val-service-account-name
- Tentukan ulang variabel lingkungan
KSA_NAME
:KSA_NAME="apigee-cassandra-schema-val-service-account-name"
- Ikat peran IAM:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Anotasikan akun layanan:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
apigee-cassandra-user-setup-service-account-name
- Tentukan ulang variabel lingkungan
KSA_NAME
:KSA_NAME="apigee-cassandra-user-setup-service-account-name"
- Ikat peran IAM:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Anotasikan akun layanan:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
apigee-datastore-default-sa
- Tentukan ulang variabel lingkungan
KSA_NAME
:KSA_NAME="apigee-datastore-default-sa"
- Ikat peran IAM:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Anotasikan akun layanan:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
- Apigee Connect
Produksi
- Tentukan variabel lingkungan
KSA_NAME
danGSA_NAME
:GSA_NAME="apigee-mart"
KSA_NAME="apigee-connect-agent-service-account-name
" - Ikat peran IAM:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Anotasikan akun layanan:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Non-produksi
- Tentukan variabel lingkungan
KSA_NAME
:KSA_NAME="apigee-connect-agent-service-account-name"
- Ikat peran IAM:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Anotasikan akun layanan:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
- Tentukan variabel lingkungan
- MART
Produksi
- Tentukan variabel lingkungan
KSA_NAME
danGSA_NAME
:GSA_NAME="apigee-mart"
KSA_NAME="apigee-mart-service-account-name"
- Ikat peran IAM:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Anotasikan akun layanan:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Non-produksi
- Tentukan variabel lingkungan
KSA_NAME
:KSA_NAME="apigee-mart-service-account-name"
- Ikat peran IAM:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Anotasikan akun layanan:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
- Tentukan variabel lingkungan
- Metrik Apigee
Produksi
- Tentukan variabel lingkungan
KSA_NAME
danGSA_NAME
:GSA_NAME="apigee-metrics"
KSA_NAME="apigee-metrics-sa"
- Ikat peran IAM:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Anotasikan akun layanan:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Non-produksi
- Tentukan variabel lingkungan
KSA_NAME
:KSA_NAME="apigee-metrics-sa"
- Ikat peran IAM:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Anotasikan akun layanan:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
- Tentukan variabel lingkungan
- UDCA (tingkat org)
Produksi
- Tentukan variabel lingkungan
KSA_NAME
danGSA_NAME
:GSA_NAME="apigee-udca"
KSA_NAME="apigee-udca-org-level-service-account-name"
- Ikat peran IAM:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Anotasikan akun layanan:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Non-produksi
- Tentukan variabel lingkungan
KSA_NAME
:KSA_NAME="apigee-udca-org-level-service-account-name"
- Ikat peran IAM:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Anotasikan akun layanan:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
- Tentukan variabel lingkungan
- Apigee Watcher
Produksi
- Tentukan variabel lingkungan
KSA_NAME
danGSA_NAME
:GSA_NAME="apigee-watcher"
KSA_NAME="apigee-watcher-service-account-name"
- Ikat peran IAM:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Anotasikan akun layanan:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Non-produksi
- Tentukan variabel lingkungan
KSA_NAME
:KSA_NAME="apigee-watcher-service-account-name"
- Ikat peran IAM:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Anotasikan akun layanan:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
- Tentukan variabel lingkungan
Untuk setiap lingkungan:
- Runtime
Produksi
- Tentukan variabel lingkungan
KSA_NAME
danGSA_NAME
:GSA_NAME="apigee-runtime"
KSA_NAME="apigee-runtime-service-account-name"
- Ikat peran IAM:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Anotasikan akun layanan:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Non-produksi
- Tentukan variabel lingkungan
KSA_NAME
:KSA_NAME="apigee-runtime-service-account-name"
- Ikat peran IAM:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Anotasikan akun layanan:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
- Tentukan variabel lingkungan
- Penyinkron
Produksi
- Tentukan variabel lingkungan
KSA_NAME
danGSA_NAME
:GSA_NAME="apigee-synchronizer"
KSA_NAME="apigee-synchronizer-service-account-name"
- Ikat peran IAM:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Anotasikan akun layanan:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Non-produksi
- Tentukan variabel lingkungan
KSA_NAME
:KSA_NAME="apigee-synchronizer-service-account-name"
- Ikat peran IAM:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Anotasikan akun layanan:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
- Tentukan variabel lingkungan
- UDCA (tingkat lingkungan)
Produksi
- Tentukan variabel lingkungan
KSA_NAME
danGSA_NAME
:GSA_NAME="apigee-udca"
KSA_NAME="apigee-udca-env-level-service-account-name"
- Ikat peran IAM:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Anotasikan akun layanan:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Non-produksi
- Tentukan variabel lingkungan
KSA_NAME
:KSA_NAME="apigee-udca-env-level-service-account-name"
- Ikat peran IAM:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Anotasikan akun layanan:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
- Tentukan variabel lingkungan
- Cassandra
- Validasi apakah langkah-langkah tersebut berhasil:
gcloud config set project $PROJECT_ID
Pilih akun layanan kubernetes yang akan diuji, misalnya:
apigee-cassandra-backup
.KSA_NAME="kubernetes-service-account-name"
kubectl run --rm -it --image google/cloud-sdk:slim \ --namespace $NAMESPACE workload-identity-test\ -- gcloud auth list
Jika Anda tidak melihat command prompt, coba tekan Enter.
Jika langkah-langkah tersebut dijalankan dengan benar, Anda akan melihat respons seperti berikut:
Credentialed Accounts ACTIVE ACCOUNT * GSA@PROJECT_ID.iam.gserviceaccount.com
- Jika mengupgrade dari penginstalan sebelumnya, bersihkan rahasia yang berisi kunci pribadi akun layanan:
kubectl delete secrets -n $NAMESPACE $(k get secrets -n $NAMESPACE | grep svc-account | awk '{print $1}')
- Periksa log:
kubectl logs -n $NAMESPACE -l app=apigee=synchronizer,env=$ENV_NAME,org=$ORG_NAME apigee-synchronizer
Mengupgrade penginstalan untuk menggunakan Workload Identity
Ikuti petunjuk ini untuk menambahkan Workload Identity ke penginstalan hybrid yang sudah ada.
Berikut contoh yang menampilkan Akun Layanan Google (GSA) yang dibuat untuk Apigee:
gcloud iam service-accounts list --filter "apigee"
DISPLAY NAME EMAIL DISABLED apigee-cassandra apigee-cassandra@PROJECT_ID.iam.gserviceaccount.com False 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:
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 Synchronizer, Anda akan menjalankan:
export KSA_NAME=$(kubectl get sa -n apigee -l app=apigee-synchronizer,env=$ENV_NAME,org=$ORG_NAME --output=jsonpath={.items..metadata.name})
gcloud iam service-accounts add-iam-policy-binding --role roles/iam.workloadIdentityUser --member "serviceAccount:$PROJECT_ID.svc.id.goog[apigee/$KSA_NAME]" apigee-sync@$PROJECT_ID.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 Synchronizer, Anda akan menjalankan:
export KSA_NAME=$(kubectl get sa -n apigee -l app=apigee-synchronizer,env=$ENV_NAME,org=$ORG_NAME --output=jsonpath={.items..metadata.name})
kubectl annotate serviceaccount --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-sync@$PROJECT_ID.iam.gserviceaccount.com
- Validasi apakah langkah-langkah tersebut berhasil:
gcloud config set project $PROJECT_ID
kubectl run --rm -it --image google/cloud-sdk:slim \ --namespace $NAMESPACE workload-identity-test\ -- gcloud auth list
Jika Anda tidak melihat command prompt, coba tekan Enter.
Jika langkah-langkah tersebut dijalankan dengan benar, Anda akan melihat respons seperti berikut:
Credentialed Accounts ACTIVE ACCOUNT * GSA@PROJECT_ID.iam.gserviceaccount.com
- Jika mengupgrade dari penginstalan sebelumnya, bersihkan rahasia yang berisi kunci pribadi akun layanan:
kubectl delete secrets -n $NAMESPACE $(k get secrets -n $NAMESPACE | grep svc-account | awk '{print $1}')
- Periksa log:
kubectl logs -n $NAMESPACE -l app=apigee=synchronizer,env=$ENV_NAME,org=$ORG_NAME apigee-synchronizer