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 IAM Google Cloud 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 Pod. Akun layanan Kubernetes adalah resource Kubernetes, sedangkan akun layanan Google khusus 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 dan menggunakan akun layanan Kubernetes untuk setiap jenis komponen. Dengan mengaktifkan Workload Identity, komponen campuran 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 overrides.yaml dengan referensi ke file sertifikat atau secret Kubernetes. Contoh:
- File sertifikat:
watcher: serviceAccountPath: ./apigee-org/my-hybrid-project-apigee-watcher.json
Lihat:
- Secret Kubernetes:
watcher: serviceAccountRef: my-watcher-k8s-secret
Lihat:
Variabel lingkungan yang digunakan dalam prosedur ini
Prosedur ini menggunakan variabel lingkungan berikut. Tetapkan nilai ini di shell perintah atau ganti di 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. Nilai 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 campuran 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 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 akun layanan dan Identitas Beban Kerja
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, file tersebut 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 guna memperbarui node pool dan melakukan inisialisasi variabel sebelum mengaktifkan Workload Identity.
Kemudian, ikuti petunjuk di Menetapkan workloadIdentityEnabled: true
dan membuat akun layanan untuk mengaktifkan Workload Identity di penginstalan Apigee Hybrid Anda.
Bersiap untuk mengaktifkan Workload Identity
Sebelum memulai proses penginstalan, ikuti langkah-langkah di bagian ini.
- Tetapkan project ke project yang Anda ubah:
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 menyertakan sesuatu seperti berikut:
… … status: RUNNING subnetwork: default workloadIdentityConfig: workloadPool: my-project-id.svc.id.goog
Jika diperlukan, aktifkan identitas beban kerja 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 node pool.
- Cantumkan node pool Anda 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 node pool menggunakan perintah berikut untuk setiap node pool:
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 node pool.
- Cantumkan node pool Anda dengan perintah berikut:
Memverifikasi atau membuat akun layanan Google
Akun layanan Google dibuat untuk banyak komponen Apigee Hybrid selama penginstalan. Gunakan prosedur ini untuk memverifikasi akun layanan Google dan membuat akun layanan 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 ini:
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-prod
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, ada dua metode yang dapat Anda gunakan:
- Gunakan alat
create-service-account
yang disertakan dengan apigee di 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 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-prod
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 peran ke akun tersebut.
- 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"
- Gunakan alat
Menetapkan workloadIdentityEnabled: true
dan membuat akun layanan
apigeectl
membuat akun layanan Kubernetes untuk setiap komponen campuran Apigee saat Anda menetapkan workloadIdentityEnabled: true
dalam file penggantian dan menerapkan perubahan.
- Tambahkan baris yang dicetak tebal di bawah ke file
overrides.yaml
Anda di bagian stansagcp
. 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 bagian stansacassandra
. Tindakan ini akan 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 cetak tebal adalah akun yang perlu Anda anotasikan 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
Anotasikan akun layanan Kubernetes dengan akun layanan Google
Untuk setiap komponen Apigee, anotasikan akun layanan Kubernetes yang sesuai dengan 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 |
Watcher | apigee-watcher-my-project-id-num-id1-sa |
apigee-watcher |
Komponen tingkat lingkungan
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 utama Google ke peran IAM
roles/iam.workloadIdentityUser
. - Anotasikan akun layanan Kubernetes dengan akun layanan Google.
- Ikat peran dan anotasikan akun layanan.
Komponen tingkat organisasi
Anotasikan akun layanan Kubernetes untuk komponen tingkat organisasi. Anda harus melakukannya sekali untuk setiap komponen di organisasi Apigee.
- 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-prod
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-prod
- 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-prod
- 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-prod
- 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-prod
- 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.
- 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-prod
- 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-prod
- 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-prod
- 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 lingkungan)
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-prod
- 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 dijalankan dengan benar, Anda akan melihat respons seperti berikut:
Credentialed Accounts ACTIVE ACCOUNT * GSA@PROJECT_ID.
- Jika mengupgrade dari penginstalan sebelumnya, hapus 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
Mengupgrade penginstalan untuk menggunakan Workload Identity
Ikuti petunjuk ini untuk menambahkan Workload Identity ke penginstalan campuran yang ada.
Berikut adalah contoh yang menunjukkan 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 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.
Misalnya, jika Anda 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 Anda 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 dijalankan dengan benar, Anda akan melihat respons seperti berikut:
Credentialed Accounts ACTIVE ACCOUNT * GSA@PROJECT_ID.
- Jika mengupgrade dari penginstalan sebelumnya, hapus 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