Topik ini menjelaskan cara mengaktifkan Workload Identity untuk Apigee Hybrid.
Ringkasan
Workload Identity adalah cara aplikasi yang berjalan dalam GKE (Google Kubernetes Engine) untuk mengakses layanan Google Cloud. Untuk mengetahui ringkasan Workload Identity, lihat:
- Memperkenalkan Workload Identity: Autentikasi yang lebih baik untuk aplikasi GKE Anda
- Menggunakan Workload Identity
Akun layanan IAM Google Cloud adalah identitas yang dapat digunakan aplikasi untuk membuat permintaan Google API. Akun layanan ini disebut sebagai GSA (Layanan Google) Akun) di dokumen. Untuk informasi lebih lanjut tentang GSA, lihat Akun layanan.
Secara terpisah, Kubernetes juga memiliki konsep akun layanan. Akun layanan menyediakan identitas untuk proses yang berjalan dalam Pod. Akun layanan Kubernetes adalah resource Kubernetes, sementara akun layanan Google khusus untuk Google Cloud. Untuk mengetahui informasi tentang layanan Kubernetes akun, lihat Mengonfigurasi Akun Layanan untuk Pod dalam dokumentasi Kubernetes.
Dengan Apigee Hybrid 1.4 dan yang lebih baru, Apigee membuat dan menggunakan akun layanan Kubernetes untuk setiap jenis komponen. Dengan mengaktifkan Workload Identity, komponen hybrid dapat berinteraksi dengan Kubernetes akun layanan.
Akun layanan Google di Apigee Hybrid tanpa Workload Identity
Tanpa menggunakan Workload Identity, Anda harus menautkan akun layanan Google ke setiap komponen di file replace.yaml Anda dengan referensi ke file sertifikat atau secret Kubernetes. Contoh:
- 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. Pilih salah satu di shell perintah Anda atau ganti dalam contoh kode dengan nilai sebenarnya:
PROJECT_ID
: ID project Google Cloud Anda.ORG_NAME
: Nama organisasi Apigee Anda.ENV_NAME
: Nama lingkungan Apigee.NAMESPACE
: Nama namespace Apigee Anda. Hal ini biasanyaapigee
.CLUSTER_NAME
: Nama cluster Anda.CLUSTER_LOCATION
: Region atau zona cluster Anda, misalnya:us-west1
.APIGEECTL_HOME
: Direktori tempat Anda menginstalapigeectl
.HYBRID_FILES
: Direktori file hybrid Anda, misalnyahybrid-base-directory/hybrid-files
.
Verifikasi variabel lingkungan:
echo $PROJECT_IDecho $ORG_NAME
echo $ENV_NAME
echo $NAMESPACE
echo $CLUSTER_NAME
echo $CLUSTER_LOCATION
echo $APIGEECTL_HOME
echo $HYBRID_FILES
Lakukan inisialisasi variabel apa pun yang Anda perlukan:
export PROJECT_ID=my-project-idexport ORG_NAME=$PROJECT_ID
export ENV_NAME=my-environment-name
export NAMESPACE=apigee
export CLUSTER_NAME=my-cluster-name
export CLUSTER_LOCATION=my-cluster-location
export APIGEECTL_HOME=hybrid-base-directory/apigeectl
export HYBRID_FILES=hybrid-base-directory/hybrid-files
File kunci Workload Identity dan akun layanan
Saat menjalankan Apigee Hybrid di GKE, praktik standarnya adalah membuat dan mendownload data pribadi
(.json
file) untuk setiap akun layanan. Saat menggunakan Workload Identity,
Anda tidak perlu mendownload kunci pribadi akun layanan dan menambahkannya ke cluster GKE.
Jika Anda telah mendownload file kunci akun layanan sebagai bagian dari penginstalan hybrid Apigee,
Anda dapat menghapusnya setelah mengaktifkan Workload Identity. Di sebagian besar instalasi, mereka berada di
Direktori hybrid-base-directory/hybrid-files/service-accounts/
.
Mengaktifkan Workload Identity untuk Apigee Hybrid
Untuk memulai, ikuti petunjuk di Bersiap untuk mengaktifkan Workload Identity untuk memperbarui kumpulan node dan menginisialisasi variabel sebelum mengaktifkan Workload Identity.
Lalu, ikuti petunjuk di Set
workloadIdentityEnabled: true
dan buat akun layanan untuk mengaktifkan Workload
Identitas pada penginstalan hybrid Apigee Anda.
Bersiap untuk mengaktifkan Workload Identity
Sebelum memulai proses penginstalan, ikuti langkah-langkah di bagian ini.
- Tetapkan project ke project yang Anda modifikasi:
gcloud config set project $PROJECT_ID
-
Dapatkan kredensial
gcloud
dari cluster tempat Anda mengaktifkan Workload Identitas dengan perintah berikut:gcloud container clusters get-credentials ${CLUSTER_NAME} \ --region ${CLUSTER_LOCATION} \ --project ${PROJECT_ID}
- Pastikan Workload Identity diaktifkan untuk cluster GKE yang menjalankan Apigee dengan hal berikut
berikut:
gcloud container clusters describe $CLUSTER_NAME --region $CLUSTER_LOCATION --project $PROJECT_ID
Output harus mencakup sesuatu seperti berikut:
… … status: RUNNING subnetwork: default workloadIdentityConfig: workloadPool: my-project-id.svc.id.goog
Jika perlu, aktifkan workload identity di cluster. Operasi ini dapat memerlukan hingga 30 menit:
gcloud container clusters update $CLUSTER_NAME \ --workload-pool=$PROJECT_ID.svc.id.goog \ --project $PROJECT_ID \ --region $CLUSTER_LOCATION
Untuk informasi selengkapnya, lihat Aktifkan Workload Identity.
- Pastikan Workload Identity diaktifkan di setiap kumpulan node.
- Buat daftar kumpulan node Anda dengan perintah berikut:
gcloud container node-pools list \ --cluster $CLUSTER_NAME \ --region $CLUSTER_LOCATION \ --project $PROJECT_ID
Output Anda akan terlihat seperti:
NAME MACHINE_TYPE DISK_SIZE_GB NODE_VERSION apigee-runtime e2-standard-4 100 1.23.12-gke.100 apigee-data e2-standard-4 100 1.23.12-gke.100
- Pastikan Workload Identity diaktifkan per kumpulan node menggunakan perintah berikut untuk setiap kumpulan node
kumpulan node:
gcloud container node-pools update NODE_POOL_NAME \ --cluster=$CLUSTER_NAME \ --region $CLUSTER_LOCATION \ --project $PROJECT_ID \ --workload-metadata=GKE_METADATA
Dengan NODE_POOL_NAME adalah nama setiap kumpulan node.
- Buat daftar kumpulan node Anda dengan perintah berikut:
Memverifikasi atau membuat akun layanan Google
Akun layanan Google dibuat untuk banyak komponen hybrid Apigee selama penginstalan. Gunakan prosedur ini untuk memverifikasi akun layanan Google dan membuat akun yang diperlukan.
- Periksa nama akun layanan Google untuk project Anda dengan perintah berikut:
gcloud iam service-accounts list --project $PROJECT_ID
Output Anda akan terlihat seperti:
Prod
Untuk lingkungan non-produksi:
DISPLAY NAME EMAIL DISABLED apigee-cassandra apigee-cassandra@my_project_id. False apigee-logger apigee-logger@my_project_id. False apigee-mart apigee-mart@my_project_id. False apigee-metrics apigee-metrics@my_project_id. False apigee-runtime apigee-runtime@my_project_id. False apigee-synchronizer apigee-synchronizer@my_project_id. False apigee-udca apigee-udca@my_project_id. False apigee-watcher apigee-watcher@my_project_id. False
Non-produk
Untuk lingkungan non-produksi:
DISPLAY NAME EMAIL DISABLED apigee-non-prod apigee-non-prod@my_project_id. False
Jika Anda perlu membuat akun layanan Google untuk project Anda, ada dua metode yang dapat dapat menggunakan:
- Menggunakan
create-service-account
yang disertakan dengan apigee di direktoriapigeectl/tools/
. Alat ini dapat membuat semua akun layanan dengan satu perintah atau membiarkan Anda membuatnya satu per satu. - Menggunakan perintah
gcloud iam service-accounts create
untuk membuat layanan akun satu per satu dan perintahgcloud projects add-iam-policy-binding
untuk menetapkan peran yang sesuai ke setiap akun layanan. Metode ini mengharuskan Anda untuk membuat setiap akun layanan satu per satu, tetapi memungkinkan Anda menghindari download file kunci.
Gunakan perintah berikut untuk membuat akun layanan Google per komponen:create-service-account
Prod
Untuk lingkungan non-produksi:
$APIGEECTL_HOME/tools/create-service-account --env prod --dir $APIGEECTL_HOME/../service-accounts
Perintah ini akan membuat akun layanan berikut:
apigee-cassandra
apigee-logger
apigee-mart
apigee-metrics
apigee-runtime
apigee-synchronizer
apigee-udca
apigee-watcher
Non-produk
Untuk lingkungan non-produksi:
$APIGEECTL_HOME/tools/create-service-account --env non-prod --dir $APIGEECTL_HOME/../service-accounts
Perintah ini akan membuat satu akun layanan,
apigee-non-prod
, dengan semua peran yang ditetapkan yang diperlukan untuk mengelola semua komponen Apigee.gcloud
Buat akun layanan berikut dan tetapkan perannya.
- Akun layanan:
apigee-cassandra
, peran:roles/storage.objectAdmin
Buat akun:
gcloud iam service-accounts create apigee-cassandra \ --display-name="apigee-cassandra" \ --project $PROJECT_ID
Tetapkan peran:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:apigee-cassandra@$PROJECT_ID." \ --role="roles/storage.objectAdmin"
- Akun layanan:
apigee-logger
, peran:roles/logging.logWriter
Buat akun:
gcloud iam service-accounts create apigee-logger \ --display-name="apigee-logger" \ --project $PROJECT_ID
Tetapkan peran:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:apigee-logger@$PROJECT_ID." \ --role="roles/logging.logWriter"
- Akun layanan:
apigee-mart
, peran:roles/apigeeconnect.Agent
Buat akun:
gcloud iam service-accounts create apigee-mart \ --display-name="apigee-mart" \ --project $PROJECT_ID
Tetapkan peran:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:apigee-mart@$PROJECT_ID." \ --role="roles/apigeeconnect.Agent"
- Akun layanan:
apigee-metrics
, peran:roles/monitoring.metricWriter
Buat akun:
gcloud iam service-accounts create apigee-metrics \ --display-name="apigee-metrics" \ --project $PROJECT_ID
Tetapkan peran:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:apigee-metrics@$PROJECT_ID." \ --role="roles/monitoring.metricWriter"
- 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." \ --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." \ --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." \ --role="roles/apigee.runtimeAgent"
- Menggunakan
Tetapkan workloadIdentityEnabled: true
dan buat akun layanan
apigeectl
membuat akun layanan Kubernetes untuk setiap komponen hybrid Apigee
saat Anda menetapkan workloadIdentityEnabled: true
dalam file penggantian dan menerapkan
perubahan.
- Tambahkan baris yang dicetak tebal di bawah ke file
overrides.yaml
di bawahgcp
bait. Tindakan ini akan 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 yang dicetak tebal di bawah ke file
overrides.yaml
Anda di bawahcassandra
bait. Tindakan ini memicu pembuatanapigee-cassandra-backup
akun layanan Kubernetes:cassandra: ... backup: enabled: true
- Terapkan perubahan dengan
apigeectl
dengan tanda--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 di tebal adalah informasi yang perlu Anda anotasi dengan akun layanan Google:
NAME SECRETS AGE apigee-cassandra-backup 1 11m apigee-cassandra-restore 1 11m apigee-cassandra-schema-setup-my-project-id-123abcd-sa 1 11m apigee-cassandra-schema-val-my-project-id-123abcd 1 11m apigee-cassandra-user-setup-my-project-id-123abcd-sa 1 11m apigee-connect-agent-my-project-id-123abcd-sa 1 11m apigee-datastore-default-sa 1 11m apigee-ingressgateway 1 11m apigee-ingressgateway-my-project-id-123abcd 1 11m apigee-ingressgateway-manager 1 11m apigee-init 1 11m apigee-mart-my-project-id-123abcd-sa 1 11m apigee-metrics-sa 1 11m apigee-mint-task-scheduler-my-project-id-123abcd-sa 1 11m apigee-redis-default-sa 1 11m apigee-redis-envoy-default-sa 1 11m apigee-runtime-my-project-id-env-name-234bcde-sa 1 11m apigee-synchronizer-my-project-id-env-name-234bcde-sa 1 11m apigee-udca-my-project-id-123abcd-sa 1 11m apigee-udca-my-project-id-env-name-234bcde-sa 1 11m apigee-watcher-my-project-id-123abcd-sa 1 11m default 1 11m
Menganotasi akun layanan Kubernetes dengan akun layanan Google
Untuk setiap komponen Apigee, anotasikan akun layanan Kubernetes yang sesuai dengan tag Akun layanan Google untuk komponen tersebut.
Komponen tingkat organisasi
Anda hanya akan memiliki satu instance dari setiap akun layanan Kubernetes untuk organisasi Apigee Anda.
Komponen | Akun Layanan Kubernetes | Akun Layanan Google |
---|---|---|
Cassandra | apigee-cassandra-backup |
apigee-cassandra |
apigee-cassandra-restore |
apigee-cassandra |
|
apigee-cassandra-schema-setup-my-project-id-num-id1-sa |
apigee-cassandra |
|
apigee-cassandra-schema-val-my-project-id-num-id1 |
apigee-cassandra |
|
apigee-cassandra-user-setup-my-project-id-num-id1-sa |
apigee-cassandra |
|
apigee-datastore-default-sa |
apigee-cassandra |
|
Apigee Connect | apigee-connect-agent-my-project-id-num-id1-sa |
apigee-mart |
MART | apigee-mart-my-project-id-num-id1-sa |
apigee-mart |
Metrik | apigee-metrics-sa |
apigee-metrics |
UDCA (tingkat organisasi) | apigee-udca-my-project-id-num-id1-sa |
apigee-udca |
Pengamat | apigee-watcher-my-project-id-num-id1-sa |
apigee-watcher |
Komponen level ENV
Anda akan memiliki satu instance dari setiap akun layanan Kubernetes untuk setiap lingkungan Apigee.
Komponen | Akun Layanan Kubernetes | Akun Layanan Google |
---|---|---|
Runtime Apigee | apigee-runtime-my-project-id-env-name-num-id2-sa |
apigee-runtime |
Sinkronisasi | apigee-synchronizer-my-project-id-env-name-num-id2-sa |
apigee-synchronizer |
UDCA (tingkat env) | apigee-udca-my-project-id-env-name-num-id2-sa |
apigee-udca |
Dalam perintah berikut, gunakan nama akun layanan Kubernetes yang ditampilkan oleh
Perintah kubectl get sa -n $NAMESPACE
, misalnya:
apigee-cassandra-schema-val-hybrid-example-project-123abcd
.
Dalam prosedur ini, untuk setiap akun layanan Kubernetes, Anda akan:
-
Ikat akun layanan Kubernetes dan akun layanan Google utama ke
Peran IAM
roles/iam.workloadIdentityUser
. - Menganotasi akun layanan Kubernetes dengan akun layanan Google.
- Lakukan binding peran dan anotasi akun layanan.
Komponen tingkat organisasi
Membuat anotasi akun layanan Kubernetes untuk komponen tingkat organisasi. Anda harus melakukan hal ini sekali untuk setiap komponen di organisasi Apigee Anda.
- Cassandra
Komponen Cassandra memiliki enam akun layanan Kubernetes terkait:
apigee-cassandra-backup
apigee-cassandra-restore
apigee-cassandra-schema-setup
apigee-cassandra-schema-val
(val
= validasi)apigee-cassandra-user-setup
apigee-datastore-default
Prod
apigee-cassandra-backup
- 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.
- Anotasikan akun layanan:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.
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.
- Anotasikan akun layanan:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.
apigee-cassandra-schema-setup-service-account-name
- 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.
- Anotasikan akun layanan:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.
apigee-cassandra-schema-val-service-account-name
- 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.
- Anotasikan akun layanan:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.
apigee-cassandra-user-setup-service-account-name
- 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.
- Anotasikan akun layanan:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.
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.
- Anotasikan akun layanan:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.
Non-produk
apigee-cassandra-backup
- 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.
- Anotasikan akun layanan:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.
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.
- Anotasikan akun layanan:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.
apigee-cassandra-schema-setup-service-account-name
- 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.
- Anotasikan akun layanan:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.
apigee-cassandra-schema-val-service-account-name
- 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.
- Anotasikan akun layanan:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.
apigee-cassandra-user-setup-service-account-name
- 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.
- Anotasikan akun layanan:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.
apigee-datastore-default-sa
- 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.
- Anotasikan akun layanan:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.
- Apigee Connect
Prod
- 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.
- Anotasikan akun layanan:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.
Non-produk
- 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.
- Anotasikan akun layanan:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.
- Tentukan variabel lingkungan
- MART
Prod
- 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.
- Anotasikan akun layanan:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.
Non-produk
- 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.
- Anotasikan akun layanan:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.
- Tentukan variabel lingkungan
- Metrik Apigee
Prod
- 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.
- Anotasikan akun layanan:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.
Non-produk
- 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.
- Anotasikan akun layanan:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.
- Tentukan variabel lingkungan
- UDCA (tingkat organisasi)
Prod
- 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.
- Anotasikan akun layanan:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.
Non-produk
- Tentukan
KSA_NAME
variabel lingkungan: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.
- Anotasikan akun layanan:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.
- Tentukan variabel lingkungan
- Apigee Watcher
Prod
- 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.
- Anotasikan akun layanan:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.
Non-produk
- 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.
- Anotasikan akun layanan:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.
- Tentukan variabel lingkungan
Untuk setiap lingkungan:
- Runtime
Prod
- 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.
- Anotasikan akun layanan:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.
Non-produk
- 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.
- Anotasikan akun layanan:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.
- Tentukan variabel lingkungan
- Sinkronisasi
Prod
- 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.
- Anotasikan akun layanan:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.
Non-produk
- 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.
- Anotasikan akun layanan:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.
- Tentukan variabel lingkungan
- UDCA (tingkat env)
Prod
- 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.
- Anotasikan akun layanan:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.
Non-produk
- 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.
- Anotasikan akun layanan:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.
- Tentukan variabel lingkungan
- Cassandra
- Validasi apakah langkah-langkah tersebut berhasil:
gcloud config set project $PROJECT_ID
Pilih akun layanan kubernetes untuk diuji, misalnya:
apigee-cassandra-backup
.KSA_NAME="kubernetes-service-account-name"
kubectl run --rm -it --image google/cloud-sdk:slim \ --namespace $NAMESPACE workload-identity-test\ -- gcloud auth list
Jika Anda tidak melihat command prompt, coba tekan Enter.
Jika langkah-langkah tersebut dijalankan dengan benar, Anda akan melihat respons seperti berikut:
Credentialed Accounts ACTIVE ACCOUNT * GSA@PROJECT_ID.
- 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 adalah contoh yang menampilkan Akun Layanan Google (GSA) yang dibuat untuk Apigee:
gcloud iam service-accounts list --filter "apigee"
DISPLAY NAME EMAIL DISABLED apigee-cassandra apigee-cassandra@PROJECT_ID. False apigee-connect apigee-connect@PROJECT_ID. False apigee-runtime apigee-runtime@PROJECT_ID. False apigee-metrics apigee-metrics@PROJECT_ID. False apigee-mart apigee-mart@PROJECT_ID. False apigee-watcher apigee-watcher@PROJECT_ID. False apigee-sync apigee-sync@PROJECT_ID. False apigee-udca apigee-udca@$PROJECT_ID. False
Berikut contoh akun layanan Kubernetes (KSA) yang dibuat untuk Apigee:
kubectl get sa -n $NAMESPACE
apigee-cassandra-schema-setup-ORG_NAME-cb84b88-sa 1 xxd apigee-cassandra-user-setup-ORG_NAME-cb84b88-sa 1 xxd apigee-connect-agent-ORG_NAME-cb84b88-sa 1 xxd apigee-init 1 xxd apigee-mart-ORG_NAME-cb84b88-sa 1 xxd apigee-metrics-apigee-telemetry 1 xxd apigee-runtime-ORG_NAME-ENV_NAME-1d0dc5e-sa 1 xxd apigee-synchronizer-ORG_NAME-ENV_NAME-1d0dc5e-sa 1 xxd apigee-udca-ORG_NAME-ENV_NAME-1d0dc5e-sa 1 xxd apigee-watcher-ORG_NAME-cb84b88 1 xxd
- Tambahkan peran Workload Identity ke setiap akun layanan:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ GSA_NAME@$PROJECT_ID.
Misalnya, jika menetapkan izin untuk Apigee Synchronizer, Anda akan menjalankan:
export KSA_NAME=$(kubectl get sa -n apigee -l app=apigee-synchronizer,env=$ENV_NAME,org=$ORG_NAME --output=jsonpath={.items..metadata.name})
gcloud iam service-accounts add-iam-policy-binding --role roles/iam.workloadIdentityUser --member "serviceAccount:$PROJECT_ID.svc.id.goog[apigee/$KSA_NAME]" apigee-sync@$PROJECT_ID.
- Anotasikan setiap KSA dengan detail GSA:
kubectl annotate serviceaccount \ --namespace $NAMESPACE \ $KSA_NAME \ iam.gke.io/gcp-service-account=GSA_NAME@$PROJECT_ID.
Misalnya, jika menetapkan izin untuk Apigee Synchronizer, Anda akan menjalankan:
export KSA_NAME=$(kubectl get sa -n apigee -l app=apigee-synchronizer,env=$ENV_NAME,org=$ORG_NAME --output=jsonpath={.items..metadata.name})
kubectl annotate serviceaccount --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-sync@$PROJECT_ID.
- 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.
- 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