במאמר הזה מוסבר איך להפעיל את Workload Identity ב-Apigee Hybrid.
סקירה כללית
Workload Identity היא דרך לאפליקציות שפועלות ב-GKE (Google Kubernetes Engine) לגשת לשירותי Google Cloud. סקירות כלליות על Workload Identity:
חשבון שירות ב-Cloud IAM של Google הוא זהות שאפליקציה יכולה להשתמש בה כדי לשלוח בקשות ל-Google APIs. במסמך הזה, חשבונות השירות האלה נקראים GSA (חשבונות שירות של Google). מידע נוסף על חשבונות שירות זמין במאמר חשבונות שירות.
בנוסף, ב-Kubernetes יש גם את המושג של חשבונות שירות. חשבון שירות מספק זהות לתהליכים שפועלים ב-Pod. חשבונות שירות ב-Kubernetes הם משאבים ב-Kubernetes, ואילו חשבונות שירות ב-Google הם ספציפיים ל-Google Cloud. מידע על חשבונות שירות של Kubernetes זמין במאמר הגדרת חשבונות שירות לקבוצות Pod במסמכי העזרה של Kubernetes.
ב-Apigee hybrid מגרסה 1.4 ואילך, מערכת Apigee יוצרת ומשתמשת בחשבון שירות של Kubernetes לכל סוג של רכיב. הפעלת Workload Identity מאפשרת לרכיבים ההיברידיים ליצור אינטראקציה עם חשבונות השירות של Kubernetes.
חשבונות שירות ב-Google ב-Apigee Hybrid ללא Workload Identity
בלי להשתמש ב-Workload Identity, צריך לקשר את חשבונות השירות של Google לכל רכיב בקובץ overrides.yaml באמצעות הפניה לקובץ אישור או לסוד של Kubernetes. לדוגמה:
- קבצי אישורים:
watcher: serviceAccountPath: ./apigee-org/my-hybrid-project-apigee-watcher.json
כך עושים זאת:
- סוד ב-Kubernetes:
watcher: serviceAccountRef: my-watcher-k8s-secret
כך עושים זאת:
משתני סביבה שמשמשים בהליכים האלה
בנהלים האלה נעשה שימוש במשתני הסביבה הבאים. אפשר להגדיר את הערכים האלה במעטפת הפקודות או להחליף אותם בדוגמאות הקוד בערכים בפועל:
-
APIGEECTL_HOME: הספרייה שבה התקנתם אתapigeectl. -
CLUSTER_LOCATION: האזור או האזור של האשכול, לדוגמה:us-west1. -
ENV_NAME: שם סביבת Apigee. -
NAMESPACE: מרחב השמות של Kubernetes שבו אתם משתמשים עבור Apigee Hybrid. בדרך כללapigee. -
HYBRID_FILES: ספריית הקבצים ההיברידית, לדוגמהhybrid-base-directory/hybrid-files. -
ORG_NAME: השם של הארגון שלכם ב-Apigee. -
PROJECT_ID: מזהה הפרויקט ב-Google Cloud.
בודקים את משתני הסביבה:
echo $PROJECT_IDecho $ORG_NAMEecho $ENV_NAMEecho $NAMESPACEecho $CLUSTER_LOCATIONecho $APIGEECTL_HOMEecho $HYBRID_FILES
מאתחלים את המשתנים שרוצים:
export PROJECT_ID=my-project-idexport ORG_NAME=$PROJECT_IDexport ENV_NAME=my-environment-nameexport NAMESPACE=apigeeexport CLUSTER_LOCATION=my-cluster-locationexport APIGEECTL_HOME=hybrid-base-directory/apigeectlexport HYBRID_FILES=hybrid-base-directory/hybrid-files
Workload Identity וקובצי מפתחות של חשבונות שירות
כשמריצים את Apigee hybrid ב-GKE, הדרך המקובלת היא ליצור ולהוריד מפתחות פרטיים (קובצי .json) לכל אחד מחשבונות השירות. כשמשתמשים ב-Workload Identity, אין צורך להוריד מפתחות פרטיים של חשבונות שירות ולהוסיף אותם לאשכולות GKE.
אם הורדתם קובצי מפתחות של חשבונות שירות כחלק מההתקנה של Apigee hybrid, תוכלו למחוק אותם אחרי הפעלת Workload Identity. ברוב ההתקנות, הם נמצאים בספרייה hybrid-base-directory/hybrid-files/service-accounts/.
הפעלת Workload Identity ב-Apigee Hybrid
כדי להתחיל, פועלים לפי ההוראות במאמר הכנה להפעלת Workload Identity כדי לעדכן את מאגרי הצמתים ולאתחל את המשתנים לפני שמפעילים את Workload Identity.
לאחר מכן, פועלים לפי אחד מהקטעים הבאים, בהתאם לשלבים שמבצעים:- הפעלה של Workload Identity בהתקנה חדשה. פועלים לפי ההוראות האלה להתקנה חדשה של Apigee Hybrid או אם עדיין לא התקנתם את ASM בהתקנה שלכם של Apigee Hybrid.
- שדרוג התקנה לשימוש ב-Workload Identity פועלים לפי ההוראות האלה כדי להפעיל את Workload Identity בהתקנה קיימת של Apigee Hybrid.
הכנות להפעלת Workload Identity
לפני שמתחילים בתהליך ההתקנה, פועלים לפי השלבים שבקטע הזה.
- מגדירים את הפרויקט לפרויקט שרוצים לשנות:
gcloud config set project $PROJECT_ID
-
מריצים את הפקודה הבאה כדי לקבל את פרטי הכניסה
gcloudשל האשכול שבו מפעילים את Workload Identity:gcloud container clusters get-credentials ${CLUSTER_NAME} \ --region ${CLUSTER_LOCATION} \ --project ${PROJECT_ID} - מריצים את הפקודה הבאה כדי לוודא שהתכונה Workload Identity מופעלת באשכול GKE שבו פועל Apigee:
gcloud container clusters describe $CLUSTER_NAME --region $CLUSTER_LOCATION --project $PROJECT_ID
הפלט צריך לכלול משהו כזה:
… … status: RUNNING subnetwork: default workloadIdentityConfig: workloadPool: my-project-id.svc.id.goog
אם צריך, מפעילים את Workload Identity באשכול. הפעולה הזו יכולה להימשך עד 30 דקות:
gcloud container clusters update $CLUSTER_NAME \ --workload-pool=$PROJECT_ID.svc.id.goog \ --project $PROJECT_ID \ --region $CLUSTER_LOCATION
מידע נוסף זמין במאמר הפעלת Workload Identity.
- מוודאים ש-Workload Identity מופעל בכל מאגר צמתים.
- מריצים את הפקודה הבאה כדי להציג את רשימת מאגרי הצמתים:
gcloud container node-pools list \ --cluster $CLUSTER_NAME \ --region $CLUSTER_LOCATION \ --project $PROJECT_ID
הפלט אמור להיראות כך:
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
- מוודאים שמאפיין Workload Identity מופעל לכל מאגר צמתים באמצעות הפקודה הבאה לכל מאגר צמתים:
gcloud container node-pools update NODE_POOL_NAME \ --cluster=$CLUSTER_NAME \ --region $CLUSTER_LOCATION \ --project $PROJECT_ID \ --workload-metadata=GKE_METADATA
כאשר NODE_POOL_NAME הוא השם של כל מאגר צמתים.
- מריצים את הפקודה הבאה כדי להציג את רשימת מאגרי הצמתים:
אימות או יצירה של חשבונות שירות של Google
במהלך ההתקנה נוצרים חשבונות שירות של Google לרכיבים רבים של Apigee Hybrid. משתמשים בהליך הזה כדי לאמת את חשבונות השירות של Google וליצור את החשבונות שנדרשים.
- כדי לבדוק את השמות של חשבונות השירות של Google בפרויקט, מריצים את הפקודה הבאה:
gcloud iam service-accounts list --project $PROJECT_ID
הפלט אמור להיראות כך:
Prod
לסביבות שאינן סביבות ייצור:
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-prod
לסביבות שאינן סביבות ייצור:
DISPLAY NAME EMAIL DISABLED apigee-non-prod apigee-non-prod@my_project_id.iam.gserviceaccount.com False
אם אתם צריכים ליצור את חשבונות השירות של Google עבור הפרויקט, יש שתי שיטות שבהן תוכלו להשתמש:
- משתמשים בכלי
create-service-accountשכלול ב-Apigee בספרייהapigeectl/tools/. הכלי הזה יכול ליצור את כל חשבונות השירות באמצעות פקודה אחת, או לאפשר לכם ליצור אותם בנפרד. - משתמשים בפקודה
gcloud iam service-accounts createכדי ליצור את חשבונות השירות אחד בכל פעם, ובפקודהgcloud projects add-iam-policy-bindingכדי להקצות לכל חשבון שירות את התפקידים המתאימים. בשיטה הזו צריך ליצור כל חשבון שירות בנפרד, אבל לא צריך להוריד את קובצי המפתחות.
כדי ליצור חשבון שירות של Google לכל רכיב, משתמשים בפקודה הבאה:create-service-accountProd
לסביבות שאינן סביבות ייצור:
$APIGEECTL_HOME/tools/create-service-account --env prod --dir $APIGEECTL_HOME/../service-accounts
הפקודה הזו תיצור את חשבונות השירות הבאים:
apigee-cassandraapigee-loggerapigee-martapigee-metricsapigee-runtimeapigee-synchronizerapigee-udcaapigee-watcher
Non-prod
לסביבות שאינן סביבות ייצור:
$APIGEECTL_HOME/tools/create-service-account --env non-prod --dir $APIGEECTL_HOME/../service-accounts
הפקודה הזו תיצור חשבון שירות יחיד,
apigee-non-prod, עם כל התפקידים שנדרשים לניהול כל רכיבי Apigee.gcloudיוצרים את חשבונות השירות הבאים ומקצים להם תפקידים.
- חשבון שירות:
apigee-cassandra, תפקיד:roles/storage.objectAdminיוצרים את החשבון:
gcloud iam service-accounts create apigee-cassandra \ --display-name="apigee-cassandra" \ --project $PROJECT_IDמקצים את התפקיד:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:apigee-cassandra@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/storage.objectAdmin" - חשבון שירות:
apigee-logger, תפקיד:roles/logging.logWriterיוצרים את החשבון:
gcloud iam service-accounts create apigee-logger \ --display-name="apigee-logger" \ --project $PROJECT_IDמקצים את התפקיד:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:apigee-logger@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/logging.logWriter" - חשבון שירות:
apigee-mart, תפקיד:roles/apigeeconnect.Agentיוצרים את החשבון:
gcloud iam service-accounts create apigee-mart \ --display-name="apigee-mart" \ --project $PROJECT_IDמקצים את התפקיד:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:apigee-mart@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/apigeeconnect.Agent" - חשבון שירות:
apigee-metrics, תפקיד:roles/monitoring.metricWriterיוצרים את החשבון:
gcloud iam service-accounts create apigee-metrics \ --display-name="apigee-metrics" \ --project $PROJECT_IDמקצים את התפקיד:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:apigee-metrics@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/monitoring.metricWriter" - חשבון שירות:
apigee-runtime, תפקיד: לא הוקצה תפקיד.יוצרים את החשבון:
gcloud iam service-accounts create apigee-runtime \ --display-name="apigee-runtime" \ --project $PROJECT_ID - חשבון שירות:
apigee-synchronizer, תפקיד:roles/apigee.synchronizerManagerיוצרים את החשבון:
gcloud iam service-accounts create apigee-synchronizer \ --display-name="apigee-synchronizer" \ --project $PROJECT_IDמקצים את התפקיד:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:apigee-synchronizer@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/apigee.synchronizerManager" - חשבון שירות:
apigee-udca, תפקיד:roles/apigee.analyticsAgentיוצרים את החשבון:
gcloud iam service-accounts create apigee-udca \ --display-name="apigee-udca" \ --project $PROJECT_IDמקצים את התפקיד:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:apigee-udca@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/apigee.analyticsAgent" - חשבון שירות:
apigee-watcher, תפקיד:roles/apigee.runtimeAgentיוצרים את החשבון:
gcloud iam service-accounts create apigee-watcher \ --display-name="apigee-watcher" \ --project $PROJECT_IDמקצים את התפקיד:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:apigee-watcher@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/apigee.runtimeAgent"
- משתמשים בכלי
הגדרה של workloadIdentityEnabled: true ויצירה של חשבונות שירות
apigeectl יוצר חשבונות שירות של Kubernetes לכל רכיב של Apigee hybrid כשמגדירים את workloadIdentityEnabled: true בקובץ ההחלפות ומחילים את השינויים.
- מוסיפים את השורה המודגשת שלמטה לקובץ
overrides.yamlבקטעgcp. הפעולה הזו מפעילה את Workload Identity בהתקנה וגורמת ל-apigeectlליצור את חשבונות השירות של Kubernetes כשמחילים את ההגדרות:gcp: projectID: "my-project-id" name: "my-project-id" region: "analytics-region" workloadIdentityEnabled: true
- מוסיפים את השורות המודגשות הבאות לקובץ
overrides.yamlבקטעcassandra. הפעולה הזו מפעילה את היצירה של חשבון השירותapigee-cassandra-backupב-Kubernetes:cassandra: ... backup: enabled: true - מחילים את השינויים באמצעות
apigeectlעם הדגל--restore: $APIGEECTL_HOME/apigeectl apply -f overrides/overrides.yaml --restore
- מאמתים את חשבונות השירות באמצעות הפקודה הבאה:
kubectl get sa -n $NAMESPACE
הפלט אמור להיראות כך: חשבונות השירות של Kubernetes שמופיעים במודגש הם אלה שצריך להוסיף להם הערות עם חשבונות השירות של 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
הוספת הערות לחשבונות השירות של Kubernetes עם חשבונות השירות של Google
לכל רכיב של Apigee, מוסיפים הערה לחשבונות השירות המתאימים של Kubernetes עם חשבון השירות של Google לרכיב.
רכיבים ברמת הארגון
יהיה לכם רק מופע אחד של כל חשבון שירות של Kubernetes בארגון Apigee.
| רכיב | חשבון שירות ב-Kubernetes | חשבון שירות של 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 |
| מדדים | apigee-metrics-sa |
apigee-metrics |
| UDCA (org-level) | apigee-udca-my-project-id-num-id1-sa |
apigee-udca |
| Watcher | apigee-watcher-my-project-id-num-id1-sa |
apigee-watcher |
רכיבים ברמת הסביבה
תהיה לכם מופע אחד של כל חשבון שירות של Kubernetes לכל סביבת Apigee.
| רכיב | חשבון שירות ב-Kubernetes | חשבון שירות של Google |
|---|---|---|
| Apigee Runtime | apigee-runtime-my-project-id-env-name-num-id2-sa |
apigee-runtime |
| Synchronizer | apigee-synchronizer-my-project-id-env-name-num-id2-sa |
apigee-synchronizer |
| UDCA (env-level) | apigee-udca-my-project-id-env-name-num-id2-sa |
apigee-udca |
בפקודות הבאות, משתמשים בשמות של חשבונות השירות ב-Kubernetes שמוחזרים על ידי הפקודה kubectl get sa -n $NAMESPACE, לדוגמה: apigee-cassandra-schema-val-hybrid-example-project-123abcd.
במסגרת התהליך הזה, לכל חשבון שירות של Kubernetes:
-
מקשרים את חשבון השירות ב-Kubernetes ואת חשבון השירות הראשי ב-Google אל
roles/iam.workloadIdentityUserתפקיד ה-IAM. - מוסיפים הערה לחשבון השירות ב-Kubernetes עם חשבון השירות ב-Google.
- מקשרים את התפקידים ומבצעים הערות לחשבונות השירות.
רכיבים ברמת הארגון
הוספת הערות לחשבונות שירות ב-Kubernetes עבור הרכיבים ברמת הארגון. תצטרכו לעשות את זה פעם אחת לכל רכיב בארגון Apigee.
- Cassandra
לרכיב Cassandra יש שישה חשבונות שירות משויכים ב-Kubernetes:
apigee-cassandra-backupapigee-cassandra-restoreapigee-cassandra-schema-setupapigee-cassandra-schema-val(val= אימות)apigee-cassandra-user-setupapigee-datastore-default
Prod
apigee-cassandra-backup- מגדירים את משתני הסביבה
KSA_NAMEו-GSA_NAME:GSA_NAME="apigee-cassandra"
KSA_NAME="apigee-cassandra-backup" - קישור תפקיד 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
- מוסיפים הערה לחשבון השירות:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
apigee-cassandra-restore- מגדירים מחדש את משתנה הסביבה
KSA_NAME:KSA_NAME="apigee-cassandra-restore"
- קישור תפקיד 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
- מוסיפים הערה לחשבון השירות:
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- מגדירים מחדש את משתנה הסביבה
KSA_NAME:KSA_NAME="apigee-cassandra-schema-setup-service-account-name"
קישור תפקיד 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
- מוסיפים הערה לחשבון השירות:
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- מגדירים מחדש את משתנה הסביבה
KSA_NAME:KSA_NAME="apigee-cassandra-schema-val-service-account-name"
- קישור תפקיד 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
- מוסיפים הערה לחשבון השירות:
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- מגדירים מחדש את משתנה הסביבה
KSA_NAME:KSA_NAME="apigee-cassandra-user-setup-service-account-name"
- קישור תפקיד 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
- מוסיפים הערה לחשבון השירות:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
apigee-datastore-default-sa- מגדירים מחדש את משתנה הסביבה
KSA_NAME:KSA_NAME="apigee-datastore-default-sa"
- קישור תפקיד 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
- מוסיפים הערה לחשבון השירות:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Non-prod
apigee-cassandra-backup- מגדירים את משתני הסביבה
KSA_NAMEו-GSA_NAME:GSA_NAME="apigee-non-prod"
KSA_NAME="apigee-connect-agent-service-account-name" - קישור תפקיד 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
- מוסיפים הערה לחשבון השירות:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
apigee-cassandra-restore- מגדירים מחדש את משתנה הסביבה
KSA_NAME:KSA_NAME="apigee-cassandra-restore"
- קישור תפקיד 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
- מוסיפים הערה לחשבון השירות:
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- מגדירים מחדש את משתנה הסביבה
KSA_NAME:KSA_NAME="apigee-cassandra-schema-setup-service-account-name"
- קישור תפקיד 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
- מוסיפים הערה לחשבון השירות:
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- מגדירים מחדש את משתנה הסביבה
KSA_NAME:KSA_NAME="apigee-cassandra-schema-val-service-account-name"
- קישור תפקיד 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
- מוסיפים הערה לחשבון השירות:
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- מגדירים מחדש את משתנה הסביבה
KSA_NAME:KSA_NAME="apigee-cassandra-user-setup-service-account-name"
- קישור תפקיד 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
- מוסיפים הערה לחשבון השירות:
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- מגדירים מחדש את משתנה הסביבה
KSA_NAME:KSA_NAME="apigee-datastore-default-sa"
- קישור תפקיד 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
- מוסיפים הערה לחשבון השירות:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
- Apigee Connect
Prod
- מגדירים את משתני הסביבה
KSA_NAMEו-GSA_NAME:GSA_NAME="apigee-mart"
KSA_NAME="apigee-connect-agent-service-account-name" - קישור תפקיד 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
- מוסיפים הערה לחשבון השירות:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Non-prod
- מגדירים את משתנה הסביבה
KSA_NAME:KSA_NAME="apigee-connect-agent-service-account-name"
- קישור תפקיד 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
- מוסיפים הערה לחשבון השירות:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
- מגדירים את משתני הסביבה
- MART
Prod
- מגדירים את משתני הסביבה
KSA_NAMEו-GSA_NAME:GSA_NAME="apigee-mart"
KSA_NAME="apigee-mart-service-account-name" - קישור תפקיד 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
- מוסיפים הערה לחשבון השירות:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Non-prod
- מגדירים את משתנה הסביבה
KSA_NAME:KSA_NAME="apigee-mart-service-account-name"
- קישור תפקיד 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
- מוסיפים הערה לחשבון השירות:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
- מגדירים את משתני הסביבה
- מדדים של Apigee
Prod
- מגדירים את משתני הסביבה
KSA_NAMEו-GSA_NAME:GSA_NAME="apigee-metrics"
KSA_NAME="apigee-metrics-sa" - קישור תפקיד 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
- מוסיפים הערה לחשבון השירות:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Non-prod
- מגדירים את משתנה הסביבה
KSA_NAME:KSA_NAME="apigee-metrics-sa"
- קישור תפקיד 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
- מוסיפים הערה לחשבון השירות:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
- מגדירים את משתני הסביבה
- UDCA (org-level)
Prod
- מגדירים את משתני הסביבה
KSA_NAMEו-GSA_NAME:GSA_NAME="apigee-udca"
KSA_NAME="apigee-udca-org-level-service-account-name" - קישור תפקיד 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
- מוסיפים הערה לחשבון השירות:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Non-prod
- מגדירים את משתני הסביבה
KSA_NAME:KSA_NAME="apigee-udca-org-level-service-account-name"
- קישור תפקיד 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 - מוסיפים הערה לחשבון השירות:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
- מגדירים את משתני הסביבה
- Apigee Watcher
Prod
- מגדירים את משתני הסביבה
KSA_NAMEו-GSA_NAME:GSA_NAME="apigee-watcher"
KSA_NAME="apigee-watcher-service-account-name" - קישור תפקיד 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
- מוסיפים הערה לחשבון השירות:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Non-prod
- מגדירים את משתנה הסביבה
KSA_NAME:KSA_NAME="apigee-watcher-service-account-name"
- קישור תפקיד 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
- מוסיפים הערה לחשבון השירות:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
- מגדירים את משתני הסביבה
לכל סביבה:
- זמן ריצה
Prod
- מגדירים את משתני הסביבה
KSA_NAMEו-GSA_NAME:GSA_NAME="apigee-runtime"
KSA_NAME="apigee-runtime-service-account-name" - קישור תפקיד 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
- מוסיפים הערה לחשבון השירות:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Non-prod
- מגדירים את משתנה הסביבה
KSA_NAME:KSA_NAME="apigee-runtime-service-account-name"
- קישור תפקיד 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
- מוסיפים הערה לחשבון השירות:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
- מגדירים את משתני הסביבה
- Synchronizer
Prod
- מגדירים את משתני הסביבה
KSA_NAMEו-GSA_NAME:GSA_NAME="apigee-synchronizer"
KSA_NAME="apigee-synchronizer-service-account-name" - קישור תפקיד 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
- מוסיפים הערה לחשבון השירות:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Non-prod
- מגדירים את משתנה הסביבה
KSA_NAME:KSA_NAME="apigee-synchronizer-service-account-name"
- קישור תפקיד 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
- מוסיפים הערה לחשבון השירות:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
- מגדירים את משתני הסביבה
- UDCA (env-level)
Prod
- מגדירים את משתני הסביבה
KSA_NAMEו-GSA_NAME:GSA_NAME="apigee-udca"
KSA_NAME="apigee-udca-env-level-service-account-name" - קישור תפקיד 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
- מוסיפים הערה לחשבון השירות:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Non-prod
- מגדירים את משתנה הסביבה
KSA_NAME:KSA_NAME="apigee-udca-env-level-service-account-name"
- קישור תפקיד 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
- מוסיפים הערה לחשבון השירות:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
- מגדירים את משתני הסביבה
- Cassandra
- כדי לוודא שהשלבים עבדו:
gcloud config set project $PROJECT_ID
בוחרים חשבון שירות של kubernetes לבדיקה, לדוגמה:
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
אם לא מופיעה שורת פקודה, נסו להקיש על Enter.
אם השלבים בוצעו בצורה נכונה, אמורה להתקבל תגובה כמו זו:
Credentialed Accounts ACTIVE ACCOUNT * GSA@PROJECT_ID.iam.gserviceaccount.com - אם משדרגים מהתקנה קודמת, צריך לנקות סודות שהכילו מפתחות פרטיים של חשבונות שירות:
kubectl delete secrets -n $NAMESPACE $(k get secrets -n $NAMESPACE | grep svc-account | awk '{print $1}') - בדיקת היומנים:
kubectl logs -n $NAMESPACE -l app=apigee=synchronizer,env=$ENV_NAME,org=$ORG_NAME apigee-synchronizer
שדרוג התקנה לשימוש ב-Workload Identity
כדי להוסיף Workload Identity להתקנה היברידית קיימת, פועלים לפי ההוראות הבאות.
הנה דוגמה שמציגה חשבונות שירות של Google (GSA) שנוצרו עבור 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
זוהי דוגמה לחשבונות שירות של Kubernetes (KSA) שנוצרו עבור 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
- מוסיפים את התפקיד Workload Identity לכל חשבון שירות:
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
לדוגמה, אם מגדירים את ההרשאות של Apigee Synchronizer, מריצים את הפקודה:
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
- מוסיפים לכל KSA את פרטי ה-GSA:
kubectl annotate serviceaccount \ --namespace $NAMESPACE \ $KSA_NAME \ iam.gke.io/gcp-service-account=GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
לדוגמה, אם מגדירים את ההרשאות של Apigee Synchronizer, מריצים את הפקודה:
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
- כדי לוודא שהשלבים עבדו:
gcloud config set project $PROJECT_ID
kubectl run --rm -it --image google/cloud-sdk:slim \ --namespace $NAMESPACE workload-identity-test\ -- gcloud auth list
אם לא מופיעה שורת פקודה, נסו להקיש על Enter.
אם השלבים בוצעו בצורה נכונה, אמורה להתקבל תגובה כמו זו:
Credentialed Accounts ACTIVE ACCOUNT * GSA@PROJECT_ID.iam.gserviceaccount.com - אם משדרגים מהתקנה קודמת, צריך לנקות סודות שהכילו מפתחות פרטיים של חשבונות שירות:
kubectl delete secrets -n $NAMESPACE $(k get secrets -n $NAMESPACE | grep svc-account | awk '{print $1}') - בדיקת היומנים:
kubectl logs -n $NAMESPACE -l app=apigee=synchronizer,env=$ENV_NAME,org=$ORG_NAME apigee-synchronizer