סקירה כללית
בשלב הזה מוסבר איך להגדיר את שיטות האימות לחשבונות השירות ב-Google Cloud שיצרתם בשלב הקודם.
בוחרים את ההוראות לשיטת האימות שרוצים להשתמש בה. במאמר שיטות אימות של חשבונות שירות ב-Apigee hybrid מופיעה סקירה כללית של שיטות האימות השונות.
סודות ב-Kubernetes
חשבונות שירות
תצטרכו ליצור סודות של Kubernetes לחשבונות השירות הבאים:
ייצור
apigee-cassandraapigee-guardrailsapigee-loggerapigee-martapigee-metricsapigee-mint-task-scheduler(אם אתם משתמשים ב-Monetization for Apigee hybrid)apigee-runtimeapigee-synchronizerapigee-watcher
Non-prod
apigee-non-prod
תצטרכו לספק כל אחד מהערכים האלה בשלב יצירת קובץ ההחלפות.
בפרוצדורה הזו נעשה שימוש במשתני הסביבה האופציונליים הבאים:
$APIGEE_HELM_CHARTS_HOME$APIGEE_NAMESPACE$PROJECT_ID
אם לא הגדרתם את המשתנים האלה, החליפו את הערך המתאים בכל משתנה בדוגמאות הקוד.
יצירת סודות ב-Kubernetes
יוצרים את הסודות של Kubernetes כדי לאחסן את המפתחות של חשבון השירות.
הפקודה kubectl create secret בדוגמאות הקוד הבאות בנויה כך:
kubectl create secret generic SECRET_NAME \ --from-file="client_secret.json=PATH_TO_SERVICE_ACCOUNT_KEY" \ -n $APIGEE_NAMESPACE
ייצור
kubectl create secret generic apigee-logger-svc-account \ --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-logger.json" \ -n $APIGEE_NAMESPACEkubectl create secret generic apigee-guardrails-svc-account \ --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-guardrails.json" \ -n $APIGEE_NAMESPACEkubectl create secret generic apigee-metrics-svc-account \ --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-metrics.json" \ -n $APIGEE_NAMESPACEkubectl create secret generic apigee-watcher-svc-account \ --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-watcher.json" \ -n $APIGEE_NAMESPACEkubectl create secret generic apigee-mart-svc-account \ --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-mart.json" \ -n $APIGEE_NAMESPACEkubectl create secret generic apigee-synchronizer-svc-account \ --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-synchronizer.json" \ -n $APIGEE_NAMESPACEkubectl create secret generic apigee-runtime-svc-account \ --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-runtime.json" \ -n $APIGEE_NAMESPACE
אם אתם משתמשים במונטיזציה ל-Apigee hybrid, אתם צריכים גם ליצור סוד של Kubernetes לחשבון השירות apigee-mint-task-scheduler:
kubectl create secret generic apigee-mint-task-scheduler-svc-account \ --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-mint-task-scheduler.json" \ -n $APIGEE_NAMESPACE
Non-prod
kubectl create secret generic apigee-non-prod-svc-account \ --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-non-prod.json" \ -n $APIGEE_NAMESPACE
אופציונלי: אפשר למחוק את קובצי ה-JSON של חשבון השירות אחרי שיוצרים את הסודות של Kubernetes.
מידע נוסף על שימוש בסודות של Kubernetes עם Apigee Hybrid זמין במאמר אחסון מפתחות של חשבונות שירות בסודות של Kubernetes.
קובצי JSON
לא צריך לבצע שלבים נוספים כדי להגדיר אימות באמצעות קובצי JSON. ממשיכים אל שלב 6: יצירת אישורי TLS.
Vault
הגדרה של אחסון סודות של חשבון שירות ב-Vault
התקנה של מנהל התקן CSI וספק Vault
אם עדיין לא התקנתם את מנהל ה-CSI באשכול באמצעות Helm, פועלים לפי ההוראות במאמר Secrets Store CSI Driver: Installation. מידע נוסף זמין במאמרי העזרה התקנת פלאגין שמתממשק עם שירותים חיצוניים של כספת במסמכי Vault.
במאמר פלטפורמות וגרסאות נתמכות של Apigee hybrid מפורטות גרסאות ה-CSI Driver המינימליות שנתמכות על ידי Apigee hybrid.
יצירה של סודות, כללי מדיניות ותפקידים ב-Vault
משתמשים בממשק המשתמש או בממשקי ה-API של Vault כדי ליצור סודות ולתת הרשאות לחשבונות השירות של Kubernetes שמשמשים את Apigee Hybrid לקריאת הסודות האלה.
-
יוצרים את הסודות הספציפיים לארגון ולסביבה בפורמט הבא:
מפתח סודי נתונים סודיים secret/data/apigee/orgsakeys
{ "cassandraBackup": "***", "cassandraRestore": "***", "connectAgent": "***", "guardrails": "***", "logger": "***", "mart": "***", "metrics": "***", "mint": "***", "watcher": "***" }secret/data/apigee/envsakeys-ENV_NAME
{ "runtime": "***", "synchronizer": "***" }מחליפים את
"***"בכל זוג בתוכן של קובץ ה-JSON של חשבון השירות של Google שמתאים לרכיב apigee. apigee-cassandra-backupו-apigee-cassandra-restoreמשתמשים בחשבון השירותapigee-cassandra. לדוגמה:{ "cassandraBackup": "{ "type": "service_account", "project_id": "myhybridorg", "private_key_id": "PRIVATE_KEY_ID", "private_key": "-----BEGIN PRIVATE KEY-----\nPRIVATE_KEY_TEXT\n-----END PRIVATE KEY-----\n", "client_email": "apigee-cassandra@myhybridorg.iam.gserviceaccount.com", "client_id": "123456789012345678901", "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://oauth2.googleapis.com/token", "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/apigee-cassandra%40myhybridorg.iam.gserviceaccount.com", "universe_domain": "googleapis.com" }", "cassandraRestore":... ... } - נותנים גישה לסוד הארגון. יוצרים קובץ טקסט בשם orgsakeys-auth-policy.txt עם התוכן הבא:
path "secret/data/apigee/orgsakeys" { capabilities = ["read"] } -
ב-Vault, יוצרים מדיניות שמעניקה גישה לסוד הארגון:
vault policy write apigee-orgsakeys-auth orgsakeys-auth-policy.txt
-
לכל סביבה, יוצרים קובץ טקסט בשם
envsakeys-ENV_NAME-auth-policy.txtעם התוכן הבא:path "secret/data/apigee/envsakeys-ENV_NAME" { capabilities = ["read"] }חוזרים על השלב הזה לכל סביבה.
-
ב-Vault, יוצרים מדיניות שמעניקה גישה לסוד של הסביבה:
vault policy write apigee-envsakeys-ENV_NAME-auth envsakeys-ENV_NAME-auth-policy.txt
חוזרים על השלב הזה לכל סביבה.
-
יוצרים סקריפט בשם
generate-encoded-sas.shעם התוכן הבא:# generate-encoded-sas.sh ORG=$APIGEE_ORG # Apigee organization name ENVS=$APIGEE_ENV_LIST # comma separated env names, for example: dev,prod ORG_SHORT_NAME=$(echo $ORG | head -c 15) ENCODE=$(echo -n $ORG | shasum -a 256 | head -c 7) ORG_ENCODE=$(echo "$ORG_SHORT_NAME-$ENCODE") NAMES=apigee-manager,apigee-cassandra-default,apigee-cassandra-backup-sa,apigee-cassandra-restore-sa,apigee-cassandra-schema-setup-${ORG_ENCODE},apigee-cassandra-schema-val-${ORG_ENCODE},apigee-cassandra-user-setup-${ORG_ENCODE},apigee-mart-${ORG_ENCODE},apigee-mint-task-scheduler-${ORG_ENCODE},apigee-connect-agent-${ORG_ENCODE},apigee-watcher-${ORG_ENCODE},apigee-metrics-apigee-telemetry,apigee-open-telemetry-collector-apigee-telemetry,apigee-logger-apigee-telemetry,apigee-operator-guardrails-sa for ENV in ${ENVS//,/ } do ENV_SHORT_NAME=$(echo $ENV | head -c 15) ENCODE=$(echo -n $ORG:$ENV | shasum -a 256 | head -c 7) ENV_ENCODE=$(echo "$ORG_SHORT_NAME-$ENV_SHORT_NAME-$ENCODE") NAMES+=,apigee-synchronizer-${ENV_ENCODE},apigee-runtime-${ENV_ENCODE} done echo $NAMES -
מריצים את הסקריפט כדי ליצור את רשימת השמות של חשבונות השירות שאליהם רוצים לקשר את המדיניות:
./generate-encoded-sas.sh
הפלט צריך להיות רשימה של שמות חשבונות שירות של Kubernetes, מופרדים בפסיקים, בדומה לדוגמה הבאה:
./generate-encoded-sas.shapigee-manager,apigee-cassandra-default,apigee-cassandra-backup-sa, apigee-cassandra-restore-sa,apigee-cassandra-schema-setup-myhybrido rg-5b044c1,apigee-cassandra-schema-val-myhybridorg-5b044c1,apigee-c assandra-user-setup-myhybridorg-5b044c1,apigee-mart-myhybridorg-5b0 44c1,apigee-mint-task-scheduler-myhybridorg-5b044c1,apigee-connect- agent-myhybridorg-5b044c1,apigee-watcher-myhybridorg-5b044c1,apigee -metrics-apigee-telemetry,apigee-open-telemetry-collector-apigee-te lemetry,apigee-logger-apigee-telemetry,apigee-operator-guardrails-s a,apigee-synchronizer-myhybridorg-dev-ee52aca,apigee-runtime-myhybr idorg-dev-ee52aca,apigee-synchronizer-myhybridorg-prod-2d0221c,apig ee-runtime-myhybridorg-prod-2d0221c -
מעתיקים את טקסט הפלט ומפרידים אותו לרשימות. רשימה אחת לשמות של חשבונות השירות של הארגון ורשימה נפרדת לשם של חשבון השירות של הסביבה לכל סביבה. חשבונות השירות של הארגון מופיעים ראשונים ברשימת הפלט עד
apigee-logger-apigee-telemetry.רשימת שמות השירותים של org מהדוגמה הקודמת:
apigee-manager,apigee-cassandra-default,apigee-cassandra-backup-sa, apigee-cassandra-restore-sa,apigee-cassandra-schema-setup-myhybrido rg-5b044c1,apigee-cassandra-schema-val-myhybridorg-5b044c1,apigee-c assandra-user-setup-myhybridorg-5b044c1,apigee-mart-myhybridorg-5b0 44c1,apigee-mint-task-scheduler-myhybridorg-5b044c1,apigee-connect- agent-myhybridorg-5b044c1,apigee-watcher-myhybridorg-5b044c1,apigee -metrics-apigee-telemetry,apigee-open-telemetry-collector-apigee-te lemetry,apigee-logger-apigee-telemetry,apigee-operator-guardrails-s a
השמות של חשבונות השירות env הם בתבנית
apigee-synchronizer-ORG_NAME-ENV_NAME-HASH_TEXTו-apigee-runtime-ORG_NAME-ENV_NAME-HASH_TEXT. צריך להפריד אותם לרשימות נפרדות לכל סביבה. לדוגמה, אפשר להפריד את הפלט מהדוגמה הקודמת לשתי הרשימות הבאות:סביבה
dev:apigee-synchronizer-myhybridorg-dev-ee52aca,apigee-runtime-myhybrid org-dev-ee52aca
סביבה
prod:apigee-synchronizer-myhybridorg-prod-2d0221c,apigee-runtime-myhybri dorg-prod-2d0221c
-
באמצעות המדיניות, יוצרים תפקיד ב-Vault שמקשר את חשבונות השירות הספציפיים לארגון:
vault write auth/kubernetes/role/apigee-orgsakeys \ bound_service_account_names=LIST_OF_ORG_SA_NAMES \ bound_service_account_namespaces=apigee \ policies=apigee-orgsakeys-auth \ ttl=1m -
לכל סביבה, יוצרים תפקיד ב-Vault בשביל מפתחות חשבון השירות שלה:
vault write auth/kubernetes/role/apigee-envsakeys-ENV_NAME \ bound_service_account_names=LIST_OF_ENV_NAME_SA_NAMES \ bound_service_account_namespaces=apigee \ policies=apigee-envsakeys-ENV_NAME-auth \ ttl=1mחוזרים על השלב הזה לכל סביבה.
יצירת SecretProviderClass אובייקטים
משאב ה-SecretProviderClass מציין לדרייבר CSI עם איזה ספק ליצור קשר כשמבקשים סודות. צריך להגדיר את המפתחות של חשבון השירות באמצעות האובייקט הזה. בטבלה הבאה מפורטים שמות הקבצים (objectNames) שצפויים ב-Apigee Hybrid:
| חשבון שירות | שמות הקבצים הצפויים של הסודות |
|---|---|
| גיבוי של Cassandra | cassandraBackup |
| שחזור Cassandra | cassandraRestore |
| שכבות הגנה | guardrails |
| חיבור לסוכן | connectAgent |
| Logger | logger |
| MART | mart |
| מדדים | metrics |
| מונטיזציה (אם משתמשים במונטיזציה ל-Apigee Hybrid) |
mint |
| זמן ריצה | runtime |
| Synchronizer | synchronizer |
| צופה | watcher |
-
משתמשים בתבנית
SecretProviderClassהבאה כדי להגדיר את המשאב הזה לסודות שספציפיים לארגון:apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: apigee-orgsakeys-spc spec: provider: vault parameters: roleName: apigee-orgsakeys vaultAddress: VAULT_ADDRESS # "objectName" is an alias used within the SecretProviderClass to reference # that specific secret. This will also be the filename containing the secret. # Apigee Hybrid expects these exact values so they must not be changed. # "secretPath" is the path in Vault where the secret should be retrieved. # "secretKey" is the key within the Vault secret response to extract a value from. objects: | - objectName: "cassandraBackup" secretPath: "" secretKey: "" - objectName: "cassandraRestore" secretPath: "" secretKey: "" - objectName: "guardrails" secretPath: "" secretKey: "" - objectName: "connectAgent" secretPath: "" secretKey: "" - objectName: "logger" secretPath: "" secretKey: "" - objectName: "mart" secretPath: "" secretKey: "" - objectName: "metrics" secretPath: "" secretKey: "" - objectName: "mint" secretPath: "" secretKey: "" - objectName: "watcher" secretPath: "" secretKey: ""VAULT_ADDRESS היא נקודת הקצה שבה שרת Vault פועל. אם Vault פועל באותו אשכול כמו Apigee, הפורמט יהיה בדרך כלל
http://vault.$APIGEE_NAMESPACE.svc.cluster.local:VAULT_SERVICE_PORT.שומרים את התבנית בקובץ בשם
spc-org.yaml. -
מחילים את
SecretProviderClassהספציפי לארגון על מרחב השמות של apigee:kubectl -n $APIGEE_NAMESPACE apply -f spc-org.yaml
-
לכל סביבה, משתמשים בתבנית
SecretProviderClassהבאה כדי להגדיר את המשאב הזה לסודות הספציפיים לסביבה. חוזרים על השלב הזה לכל סביבה:apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: apigee-envsakeys-ENV_NAME-spc spec: provider: vault parameters: roleName: apigee-envsakeys-ENV_NAME vaultAddress: VAULT_ADDRESS # "objectName" is an alias used within the SecretProviderClass to reference # that specific secret. This will also be the filename containing the secret. # Apigee Hybrid expects these exact values so they must not be changed. # "secretPath" is the path in Vault where the secret should be retrieved. # "secretKey" is the key within the Vault secret response to extract a value from. objects: | - objectName: "runtime" secretPath: "" secretKey: "" - objectName: "synchronizer" secretPath: "" secretKey: ""VAULT_ADDRESS היא נקודת הקצה שבה שרת Vault פועל. אם Vault פועל באותו אשכול ובאותו מרחב שמות כמו Apigee, הפורמט יהיה בדרך כלל
http://vault.$APIGEE_NAMESPACE.svc.cluster.local:VAULT_SERVICE_PORT.שומרים את התבנית בקובץ בשם
spc-env-ENV_NAME.yaml. -
לכל סביבה, מחילים את
SecretProviderClassהספציפי לסביבה על מרחב השמות של apigee:kubectl -n $APIGEE_NAMESPACE apply -f spc-env-ENV_NAME.yaml
חוזרים על השלב הזה לכל סביבה.
-
אופציונלי: אפשר למחוק את קובצי ה-JSON של חשבון השירות אחרי שיוצרים את אובייקטי
SecretProviderClass.
WIF for GKE
הכנות להגדרה של איחוד זהויות של עומסי עבודה ל-GKE
- מוודאים שאיחוד זהויות של עומסי עבודה ל-GKE מופעל בקובץ ההגדרות החלופיות. צריך להפעיל אותה בקובץ overrides במאפיינים הבאים.
- השדה
namespaceהוא שדה חובה. לדוגמה:instanceID: "hybrid-instance-1" namespace: "apigee"
- אם אתם משתמשים בחשבון שירות יחיד (לא בסביבת ייצור) לכל הרכיבים, צריך לציין אותו באמצעות:
gcp.workloadIdentity.gsa. לדוגמה:gcp: workloadIdentity: enabled: true gsa: "apigee-non-prod@my-hybrid-project.iam.gserviceaccount.com" - אם אתם משתמשים בחשבון שירות נפרד לכל רכיב (התקנות של Production), צריך לציין את חשבון השירות באמצעות המאפיין
gsaשל הרכיב. לדוגמה:logger: gsa: "apigee-logger@my-hybrid-project.iam.gserviceaccount.com"
כדאי לעיין במאמר בנושא
gcp.workloadIdentity.enabled. - השדה
- בודקים שההגדרה הנוכחית של
gcloudמוגדרת למזהה הפרויקט ב-Google Cloud באמצעות הפקודה הבאה:gcloud config get project
- מוודאים שאיחוד זהויות של עומסי עבודה ל-GKE מופעל באשכול GKE. כשיוצרים את האשכול בשלב 1: יצירת אשכול, שלב 6 הוא הפעלת איחוד שירותי אימות הזהויות של עומסי עבודה ב-GKE. כדי לוודא שהיא מופעלת, מריצים את הפקודה הבאה:
אשכולות אזוריים
gcloud container clusters describe $CLUSTER_NAME \ --region $CLUSTER_LOCATION \ --project $PROJECT_ID \ --flatten 'workloadIdentityConfig'
אשכולות אזוריים
gcloud container clusters describe $CLUSTER_NAME \ --zone $CLUSTER_LOCATION \ --project $PROJECT_ID \ --flatten 'workloadIdentityConfig'
הפלט אמור להיראות כך:
--- workloadPool: $PROJECT_ID.svc.id.goog
אם במקום זאת רואים
nullבתוצאות, מריצים את הפקודה הבאה כדי להפעיל איחוד זהויות של עומסי עבודה ל-GKE באשכול:אשכולות אזוריים
gcloud container clusters update $CLUSTER_NAME \ --workload-pool=$PROJECT_ID.svc.id.goog \ --project $PROJECT_ID \ --region $CLUSTER_LOCATION
אשכולות אזוריים
gcloud container clusters update $CLUSTER_NAME \ --workload-pool=$PROJECT_ID.svc.id.goog \ --zone $CLUSTER_LOCATION \ --project $PROJECT_ID
-
מפעילים את איחוד הזהויות של עומסי עבודה ל-GKE לכל מאגר צמתים באמצעות הפקודות הבאות. הפעולה הזו יכולה להימשך עד 30 דקות לכל צומת:
אשכולות אזוריים
gcloud container node-pools update NODE_POOL_NAME \ --cluster=$CLUSTER_NAME \ --region $CLUSTER_LOCATION \ --project $PROJECT_ID \ --workload-metadata=GKE_METADATA
אשכולות אזוריים
gcloud container node-pools update NODE_POOL_NAME \ --cluster=$CLUSTER_NAME \ --zone $CLUSTER_LOCATION \ --project $PROJECT_ID \ --workload-metadata=GKE_METADATA
כאשר NODE_POOL_NAME הוא השם של כל מאגר צמתים. ברוב ההתקנות של Apigee hybrid, שני מאגרי הצמתים שמוגדרים כברירת מחדל נקראים
apigee-dataו-apigee-runtime. - מריצים את הפקודות הבאות כדי לוודא שאיחוד זהויות של עומסי עבודה ל-GKE מופעל במאגרי הצמתים:
אשכולות אזוריים
gcloud container node-pools describe apigee-data \ --cluster $CLUSTER_NAME \ --region $CLUSTER_LOCATION \ --project $PROJECT_ID \ --flatten "config:"
gcloud container node-pools describe apigee-runtime \ --cluster $CLUSTER_NAME \ --region $CLUSTER_LOCATION \ --project $PROJECT_ID \ --flatten "config:"
אשכולות אזוריים
gcloud container node-pools describe apigee-data \ --cluster $CLUSTER_NAME \ --zone $CLUSTER_LOCATION \ --project $PROJECT_ID \ --flatten "config:"
gcloud container node-pools describe apigee-runtime \ --cluster $CLUSTER_NAME \ --zone $CLUSTER_LOCATION \ --project $PROJECT_ID \ --flatten "config:"
הפלט אמור להיראות כך:
--- diskSizeGb: 100 diskType: pd-standard ... workloadMetadataConfig: mode: GKE_METADATA
אם צריך, מגדירים את ההגדרות של gcloud:
gcloud config set project $PROJECT_ID
הגדרת אמצעי בקרה באמצעות איחוד זהויות של עומסי עבודה ל-GKE
במהלך ההתקנה הראשונית, תרשים apigee-operator יוצר pod של אמצעי הגנה כדי לבדוק אם ממשקי ה-API הנכונים מופעלים בפרויקט. כדי להשתמש באמצעי בקרה במהלך ההתקנה, צריך להגדיר את הקישור של חשבון השירות לאיחוד שירותי אימות הזהות של עומסי עבודה ב-GKE לפני שמתקינים את התרשים.
-
כדי לקבל את כתובת האימייל של GSA עם אמצעי הבקרה, מריצים את הפקודה הבאה:
gcloud iam service-accounts list --project ${PROJECT_ID} --filter "apigee"כתובות אימייל של GSA הן בדרך כלל בפורמט הבא:
GSA_NAME@PROJECT_ID.iam.gserviceaccount.com
לדוגמה:
DISPLAY NAME EMAIL DISABLED apigee-guardrails apigee-guardrails@myproject.iam.gserviceaccount.com False
משתמשים בכתובת האימייל הזו למשתנה
GSA_EMAILבשלב הבא. -
חשבון השירות ב-Kubernetes (KSA) של אמצעי הבקרה נקרא
apigee-operator-guardrails-sa. יוצרים את הקישור של GSA של אמצעי הבקרה באמצעות הפקודה הבאה:gcloud iam service-accounts add-iam-policy-binding GSA_EMAIL \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:PROJECT_ID.svc.id.goog[$APIGEE_NAMESPACE/apigee-operator-guardrails-sa]" \ --project PROJECT_ID
מידע נוסף מופיע במאמר אבחון בעיות באמצעי הבקרה.
WIF בפלטפורמות אחרות
כשמשתמשים באיחוד שירותי אימות הזהות של עומסי עבודה בפלטפורמות אחרות מלבד GKE, אפשר להשתמש בשיטות הבאות כדי להגדיר אימות של חשבון שירות:
- סודות ב-Kubernetes
- קובצי JSON של חשבונות שירות
- Vault
בהוראות הבאות, בוחרים את הכרטיסייה של שיטת האימות שבה משתמשים.
בפרוצדורה הזו נעשה שימוש בשני משתני הסביבה הבאים שהוגדרו בשלב 2: הורדת תרשימי Apigee Helm. המשתנים האלה הם אופציונליים. אם לא הגדרתם אותם, החליפו את כל משתנה בדוגמאות הקוד בנתיב המתאים לספרייה.
-
$APIGEE_HELM_CHARTS_HOME: הספרייה שאליה הורדתם את תרשימי Apigee Helm, כפי שמוגדר בשלב 2: הורדת תרשימי Apigee Helm. -
$PROJECT_ID: מזהה הפרויקט ב-Google Cloud, שמוגדר בחלק 1: הגדרת הפרויקט והארגון – שלב 1: הפעלת ממשקי API.
במקרה של התקנות ב-AKS, צריך לוודא שהפעלתם את מנפיק OpenID Connect (OIDC). צריך להפעיל את התכונה הזו כדי שאיחוד שירותי אימות הזהות של עומסי עבודה יוכל לגשת למטא-נתונים של OpenID Connect ול-JSON Web Key Set (JWKS) של האשכול.
מגדירים את האשכול לשימוש באיחוד שירותי אימות הזהות של עומסי עבודה.
-
מריצים את הפקודה הבאה כדי לוודא שההגדרה הנוכחית של
gcloudמוגדרת למזהה הפרויקט בענן ב-Google Cloud:gcloud config get project
-
מפעילים את Security Token Service API:
כדי לוודא ש-Security Token Service API מופעל, מריצים את הפקודה הבאה:
gcloud services list --enabled --project $PROJECT_ID | grep sts.googleapis.com
אם ה-API לא מופעל:
המסוף
מפעילים את Security Token Service API.
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, נדרשת ההרשאה
serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק Service Usage' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידיםשורת הפקודה
מפעילים את ה-API באמצעות הפקודה הבאה:
gcloud services enable sts.googleapis.com --project $PROJECT_ID
-
יוצרים את הספק ואת מאגר הזהויות של עומסי העבודה.
התפקידים הנדרשים
כדי לקבל את ההרשאות שדרושות להגדרה של איחוד שירותי אימות הזהות של עומסי עבודה, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים בפרויקט:
- אדמין במאגר זהויות של עומסי עבודה (
roles/iam.workloadIdentityPoolAdmin) - אדמין בחשבון שירות (
roles/iam.serviceAccountAdmin)
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
לחלופין, התפקיד הבסיסי ב-IAM 'בעלים' (
roles/owner) כולל גם הרשאות להגדרה של איחוד זהויות. בסביבת ייצור לא מומלץ להקצות תפקידים בסיסיים, אבל אפשר להעניק אותם בסביבת פיתוח או בסביבת בדיקה.כדי ליצור ספק ומאגר זהויות של כוח עבודה:
-
קובעים את כתובת ה-URL של מנפיק אשכול ה-AKS:
AKS
az aks show -n CLUSTER_NAME -g RESOURCE_GROUP --query "oidcIssuerProfile.issuerUrl" -otsv
מחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_NAME: שם האשכול. -
RESOURCE_GROUP: קבוצת המשאבים של האשכול.
הפקודה מחזירה את כתובת ה-URL של המנפיק. תצטרכו את כתובת ה-URL של המנפיק באחד מהשלבים הבאים.
אם הפקודה לא מחזירה כתובת URL של מנפיק, צריך לוודא שהפעלתם את התכונה מנפיק OIDC.
EKS
aws eks describe-cluster --name CLUSTER_NAME --query "cluster.identity.oidc.issuer" --output text
מחליפים את
CLUSTER_NAMEבשם האשכול.הפקודה מחזירה את כתובת ה-URL של המנפיק. תצטרכו את כתובת ה-URL של המנפיק באחד מהשלבים הבאים.
Kubernetes אחר
מתחברים לאשכול Kubernetes ומשתמשים ב-`kubectl` כדי לקבוע את כתובת ה-URL של מנפיק האישורים באשכול:
kubectl get --raw /.well-known/openid-configuration | jq -r .issuer
תצטרכו את כתובת ה-URL של המנפיק באחד מהשלבים הבאים.
-
-
אופציונלי: אם אי אפשר לגשת לשרת ה-OIDC שלכם באופן ציבורי, מורידים את קבוצת מפתחות ה-JSON Web Key Set (JWKS) של האשכול:
kubectl get --raw /openid/v1/jwks > cluster-jwks.json
כדי לבדוק אם ספק ה-OIDC שלכם זמין לציבור, אתם צריכים להיות מסוגלים לגשת לכתובת ה-URL של הספק באמצעות פקודת CURL ולקבל תגובה 200.
-
יצירת מאגר זהויות חדש של עומסי עבודה:
gcloud iam workload-identity-pools create POOL_ID \ --location="global" \ --description="DESCRIPTION" \ --display-name="DISPLAY_NAME"מחליפים את מה שכתוב בשדות הבאים:
-
POOL_ID: המזהה הייחודי של המאגר. -
DISPLAY_NAME: (אופציונלי) שם המאגר. -
DESCRIPTION: (אופציונלי) תיאור של המאגר שנבחר. התיאור הזה מופיע כשנותנים גישה לזהויות במאגר.
לדוגמה:
gcloud iam workload-identity-pools create my-wi-pool --display-name="My workload pool" --description="My workload pool description" -
-
מוסיפים את האשכול כספק של מאגר הזהויות של כוח העבודה. בוחרים את הפקודה ליצירת הספק בהתאם לשאלה אם מנפיק ה-OIDC שלכם נגיש לציבור או לא נגיש לציבור:
גלוי לכולם
אם יש גישה ציבורית לשרת שהנפיק את ה-OIDC, יוצרים את הספק באמצעות הפקודה הבאה:
gcloud iam workload-identity-pools providers create-oidc WORKLOAD_PROVIDER_ID \ --location="global" \ --workload-identity-pool="POOL_ID" \ --issuer-uri="ISSUER" \ --attribute-mapping="google.subject=assertion.sub"לא נגיש לציבור
אם מנפיק ה-OIDC שלכם לא נגיש לציבור, יוצרים את הספק באמצעות הפקודה הבאה:
gcloud iam workload-identity-pools providers create-oidc WORKLOAD_PROVIDER_ID \ --location="global" \ --workload-identity-pool="POOL_ID" \ --issuer-uri="ISSUER" \ --jwks-file="cluster-jwks.json" \ --attribute-mapping="google.subject=assertion.sub"מחליפים את מה שכתוב בשדות הבאים:
-
WORKLOAD_PROVIDER_ID: מזהה ייחודי לפי בחירתכם של ספק מאגר הזהויות של עומסי העבודה. -
POOL_ID: המזהה של מאגר הזהויות של עומסי עבודה שיצרתם קודם. -
ISSUER: משתמשים בכתובת ה-URL של המנפיק שנקבעה קודם לכן עבור ה-URI של המנפיק .
attribute-mapping="google.subject=assertion.sub"ממפה את נושא Kubernetes לנושא IAM. -
- אדמין במאגר זהויות של עומסי עבודה (
אם צריך, מגדירים את ההגדרות של gcloud:
gcloud config set project $PROJECT_ID
יצירת קובצי התצורה של פרטי הכניסה
כדי לפרוס עומס עבודה של Kubernetes שיכול לגשת למשאבים של Google Cloud , צריך קודם ליצור קובץ תצורה של פרטי כניסה לכל חשבון שירות של IAM:
-
כדי להציג את רשימת חשבונות השירות ב-IAM (שנקראים גם 'חשבונות שירות של Google'), מריצים את הפקודה הבאה:
gcloud iam service-accounts list --project $PROJECT_ID
תצטרכו ליצור את קובצי ההגדרות של פרטי הכניסה לחשבונות השירות הבאים ב-IAM:
ייצור
לסביבות ייצור:
DISPLAY NAME EMAIL DISABLED apigee-cassandra apigee-cassandra@my_project_id.iam.gserviceaccount.com False apigee-guardrails apigee-guardrails@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-watcher apigee-watcher@my_project_id.iam.gserviceaccount.com False
אם אתם משתמשים במונטיזציה ל-Apigee hybrid, תצטרכו גם ליצור את קובץ התצורה של פרטי הכניסה לחשבון השירות
apigee-mint-task-scheduler.DISPLAY NAME EMAIL DISABLED ... apigee-mint-task-scheduler apigee-mint-task-scheduler@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
-
יוצרים קובץ הגדרות של פרטי כניסה לכל חשבון שירות של IAM ברשימה הקודמת.
WIF: secrets
הגישה הזו מבוססת על הגדרות של פרטי כניסה שמאוחסנות בסודות של Kubernetes. כשיוצרים את קובץ ההחלפות בשלב 7: יצירת ההחלפות, מציינים את שם הסוד של כל חשבון שירות באמצעות המאפיין
serviceAccountRefאוenvs.serviceAccountRefs.יצירת קובצי התצורה של פרטי הכניסה
ייצור
תצטרכו ליצור את קובצי התצורה של פרטי הכניסה לחשבונות השירות הבאים:
apigee-cassandraapigee-guardrailsapigee-martapigee-metrics-
apigee-mint-task-schedulerאם אתם משתמשים במונטיזציה ל-Apigee Hybrid. apigee-runtimeapigee-synchronizer
- יוצרים ספרייה לקובצי התצורה של פרטי הכניסה. אפשר לתת למדריך כל שם שרוצים. במקרה הזה, שם הספרייה הוא
credential-configurations:mkdir $APIGEE_HELM_CHARTS_HOME/credential-configurations
-
יוצרים את קובץ התצורה של פרטי הכניסה בשביל
apigee-cassandra:gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \ --service-account=apigee-cassandra@$PROJECT_ID.iam.gserviceaccount.com \ --credential-source-file=/var/run/service-account/token \ --credential-source-type=text \ --output-file=$APIGEE_HELM_CHARTS_HOME/credential-configurations/apigee-cassandra-credential-configuration.json
כאשר:
-
PROJECT_NUMBER: מספר הפרויקט שמכיל את מאגר הזהויות של עומסי העבודה. צריך להזין את מספר הפרויקט ולא את מזהה הפרויקט. -
POOL_ID: המזהה של מאגר זהויות של עומסי עבודה -
WORKLOAD_PROVIDER_ID: מזהה הספק של מאגר הזהויות של כוח העבודה
-
-
יוצרים את קובץ התצורה של פרטי הכניסה בשביל
apigee-guardrails:gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \ --service-account=apigee-guardrails@$PROJECT_ID.iam.gserviceaccount.com \ --credential-source-file=/var/run/service-account/token \ --credential-source-type=text \ --output-file=$APIGEE_HELM_CHARTS_HOME/credential-configurations/apigee-guardrails-credential-configuration.json
-
יוצרים את קובץ התצורה של פרטי הכניסה בשביל
apigee-mart:gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \ --service-account=apigee-mart@$PROJECT_ID.iam.gserviceaccount.com \ --credential-source-file=/var/run/service-account/token \ --credential-source-type=text \ --output-file=$APIGEE_HELM_CHARTS_HOME/credential-configurations/apigee-mart-credential-configuration.json
-
יוצרים את קובץ התצורה של פרטי הכניסה בשביל
apigee-metrics:gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \ --service-account=apigee-metrics@$PROJECT_ID.iam.gserviceaccount.com \ --credential-source-file=/var/run/service-account/token \ --credential-source-type=text \ --output-file=$APIGEE_HELM_CHARTS_HOME/credential-configurations/apigee-metrics-credential-configuration.json
-
יוצרים את קובץ התצורה של פרטי הכניסה בשביל
apigee-runtime:gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \ --service-account=apigee-runtime@$PROJECT_ID.iam.gserviceaccount.com \ --credential-source-file=/var/run/service-account/token \ --credential-source-type=text \ --output-file=$APIGEE_HELM_CHARTS_HOME/credential-configurations/apigee-runtime-credential-configuration.json
-
יוצרים את קובץ התצורה של פרטי הכניסה בשביל
apigee-synchronizer:gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \ --service-account=apigee-synchronizer@$PROJECT_ID.iam.gserviceaccount.com \ --credential-source-file=/var/run/service-account/token \ --credential-source-type=text \ --output-file=$APIGEE_HELM_CHARTS_HOME/credential-configurations/apigee-synchronizer-credential-configuration.json
-
יוצרים את קובץ התצורה של פרטי הכניסה בשביל
apigee-watcher:gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \ --service-account=apigee-watcher@$PROJECT_ID.iam.gserviceaccount.com \ --credential-source-file=/var/run/service-account/token \ --credential-source-type=text \ --output-file=$APIGEE_HELM_CHARTS_HOME/credential-configurations/apigee-watcher-credential-configuration.json
-
אם אתם משתמשים במונטיזציה ב-Apigee Hybrid, תצטרכו גם ליצור את קובץ התצורה של פרטי הכניסה עבור
apigee-mint-task-scheduler:gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \ --service-account=apigee-mint-task-scheduler@$PROJECT_ID.iam.gserviceaccount.com \ --credential-source-file=/var/run/service-account/token \ --credential-source-type=text \ --output-file=$APIGEE_HELM_CHARTS_HOME/credential-configurations/apigee-mint-task-scheduler-credential-configuration.json
Non-prod
- יוצרים ספרייה לקובץ התצורה של פרטי הכניסה. אפשר לתת למדריך כל שם שרוצים. במקרה הזה, שם הספרייה הוא
credential-configurations:mkdir $APIGEE_HELM_CHARTS_HOME/credential-configurations
-
יוצרים את קובץ התצורה של פרטי הכניסה לחשבון השירות
apigee-non-prodבתיקייהcredential-configurationsבאמצעות הפקודה הבאה:gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \ --service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com \ --credential-source-file=/var/run/service-account/token \ --credential-source-type=text \ --output-file=$APIGEE_HELM_CHARTS_HOME/credential-configurations/apigee-non-prod-credential-configuration.json
כאשר:
-
PROJECT_NUMBER: מספר הפרויקט שמכיל את מאגר הזהויות של עומסי העבודה. צריך להזין את מספר הפרויקט ולא את מזהה הפרויקט. -
POOL_ID: המזהה של מאגר זהויות של עומסי עבודה -
WORKLOAD_PROVIDER_ID: מזהה הספק של מאגר הזהויות של כוח העבודה
-
יצירת סודות Kubernetes
יוצרים את הסודות של Kubernetes כדי לאחסן את קובצי התצורה של פרטי הכניסה לכל חשבון שירות.
הפקודה
kubectl create secretבדוגמאות הקוד הבאות בנויה כך:kubectl create secret generic SECRET_NAME \ --from-file="client_secret.json=PATH_TO_CREDENTIAL_CONFIGURATION_FILE" \ -n $APIGEE_NAMESPACEייצור
-
יוצרים את הקובץ הסודי עבור
apigee-cassandra:kubectl create secret generic apigee-cassandra-svc-account \ --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/credential-configurations/$PROJECT_ID-apigee-cassandra.json" \ -n $APIGEE_NAMESPACE
-
יוצרים את הקובץ הסודי עבור
apigee-guardrails:kubectl create secret generic apigee-guardrails-svc-account \ --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/credential-configurations/$PROJECT_ID-apigee-guardrails.json" \ -n $APIGEE_NAMESPACE
-
יוצרים את הקובץ הסודי עבור
apigee-mart:kubectl create secret generic apigee-mart-svc-account \ --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/credential-configurations/$PROJECT_ID-apigee-mart.json" \ -n $APIGEE_NAMESPACE
-
יוצרים את הקובץ הסודי עבור
apigee-metrics:kubectl create secret generic apigee-metrics-svc-account \ --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/credential-configurations/$PROJECT_ID-apigee-metrics.json" \ -n $APIGEE_NAMESPACE
-
יוצרים את הקובץ הסודי עבור
apigee-runtime:kubectl create secret generic apigee-runtime-svc-account \ --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/credential-configurations/$PROJECT_ID-apigee-runtime.json" \ -n $APIGEE_NAMESPACE
-
יוצרים את הקובץ הסודי עבור
apigee-synchronizer:kubectl create secret generic apigee-synchronizer-svc-account \ --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/credential-configurations/$PROJECT_ID-apigee-synchronizer.json" \ -n $APIGEE_NAMESPACE
-
יוצרים את הקובץ הסודי עבור
apigee-watcher:kubectl create secret generic apigee-watcher-svc-account \ --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/credential-configurations/$PROJECT_ID-apigee-watcher.json" \ -n $APIGEE_NAMESPACE
-
אם אתם משתמשים במונטיזציה ב-Apigee Hybrid, צריך ליצור את קובץ הסוד עבור
apigee-mint-task-scheduler:kubectl create secret generic apigee-mint-task-scheduler-svc-account \ --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/credential-configurations/$PROJECT_ID-apigee-mint-task-scheduler.json" \ -n $APIGEE_NAMESPACE
יוצרים את קובץ הסוד בשביל apigee-non-prod:Non-prod
kubectl create secret generic apigee-non-prod-svc-account \ --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/credential-configurations/$PROJECT_ID-apigee-non-prod.json" \ -n $APIGEE_NAMESPACEWIF: files
בגישה הזו משתמשים בקובצי הגדרות של פרטי כניסה במקום בקובצי מפתח של חשבון שירות ב-Google. כשיוצרים את קובץ ההחלפות בשלב 7: יצירת ההחלפות, מציינים את הנתיב לקובץ הגדרות האישורים של כל מאפיין
serviceAccountPathאוenvs.serviceAccountPaths.ייצור
תצטרכו ליצור את קובצי התצורה של פרטי הכניסה בספריות התרשימים המתאימות:
חשבון שירות ספריית תרשימי Helm של Apigee apigee-cassandraapigee-datastore/apigee-guardrailsapigee-operator/apigee-martapigee-org/apigee-metricsapigee-telemetry/apigee-mint-task-scheduler
(אם משתמשים במונטיזציה ב-Apigee Hybrid)apigee-org/apigee-runtimeapigee-env/apigee-synchronizerapigee-env/apigee-watcherapigee-org/יוצרים את קובצי התצורה של פרטי הכניסה באמצעות הפקודות הבאות:
-
apigee-cassandra:gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \ --service-account=apigee-cassandra@$PROJECT_ID.iam.gserviceaccount.com \ --credential-source-file=/var/run/service-account/token \ --credential-source-type=text \ --output-file=$APIGEE_HELM_CHARTS_HOME/apigee-datastore/apigee-cassandra-credential-configuration.json
כאשר:
-
PROJECT_NUMBER: מספר הפרויקט שמכיל את מאגר הזהויות של עומסי העבודה. צריך להזין את מספר הפרויקט ולא את מזהה הפרויקט. -
POOL_ID: המזהה של מאגר זהויות של עומסי עבודה -
WORKLOAD_PROVIDER_ID: מזהה הספק של מאגר הזהויות של כוח העבודה
-
-
apigee-guardrails:gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \ --service-account=apigee-guardrails@$PROJECT_ID.iam.gserviceaccount.com \ --credential-source-file=/var/run/service-account/token \ --credential-source-type=text \ --output-file=$APIGEE_HELM_CHARTS_HOME/apigee-operator/apigee-guardrails-credential-configuration.json
-
apigee-mart:gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \ --service-account=apigee-mart@$PROJECT_ID.iam.gserviceaccount.com \ --credential-source-file=/var/run/service-account/token \ --credential-source-type=text \ --output-file=$APIGEE_HELM_CHARTS_HOME/apigee-org/apigee-mart-credential-configuration.json
-
apigee-metrics:gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \ --service-account=apigee-metrics@$PROJECT_ID.iam.gserviceaccount.com \ --credential-source-file=/var/run/service-account/token \ --credential-source-type=text \ --output-file=$APIGEE_HELM_CHARTS_HOME/apigee-telemetry/apigee-metrics-credential-configuration.json
-
apigee-runtime:gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \ --service-account=apigee-runtime@$PROJECT_ID.iam.gserviceaccount.com \ --credential-source-file=/var/run/service-account/token \ --credential-source-type=text \ --output-file=$APIGEE_HELM_CHARTS_HOME/apigee-env/apigee-runtime-credential-configuration.json
-
apigee-synchronizer:gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \ --service-account=apigee-synchronizer@$PROJECT_ID.iam.gserviceaccount.com \ --credential-source-file=/var/run/service-account/token \ --credential-source-type=text \ --output-file=$APIGEE_HELM_CHARTS_HOME/apigee-env/apigee-synchronizer-credential-configuration.json
-
apigee-watcher:gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \ --service-account=apigee-watcher@$PROJECT_ID.iam.gserviceaccount.com \ --credential-source-file=/var/run/service-account/token \ --credential-source-type=text \ --output-file=$APIGEE_HELM_CHARTS_HOME/apigee-org/apigee-watcher-credential-configuration.json
-
אם אתם משתמשים במונטיזציה ל-Apigee Hybrid, תצטרכו גם ליצור את קובץ התצורה של פרטי הכניסה עבור
apigee-mint-task-scheduler:gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \ --service-account=apigee-mint-task-scheduler@$PROJECT_ID.iam.gserviceaccount.com \ --credential-source-file=/var/run/service-account/token \ --credential-source-type=text \ --output-file=$APIGEE_HELM_CHARTS_HOME/apigee-org/apigee-mint-task-scheduler-credential-configuration.json
Non-prod
תצטרכו ליצור את קובץ התצורה של פרטי הכניסה ולהעתיק אותו לתיקיות התרשימים המתאימות:
חשבון שירות תרשים Helm של Apigee apigee-non-prodapigee-datastore/
apigee-telemetry/
apigee-org/
apigee-env/-
יוצרים את קובץ התצורה של פרטי הכניסה בספריית התרשים
apigee-datastoreבאמצעות הפקודה הבאה:gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \ --service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com \ --credential-source-file=/var/run/service-account/token \ --credential-source-type=text \ --output-file=$APIGEE_HELM_CHARTS_HOME/apigee-datastore/apigee-non-prod-credential-configuration.json
כאשר:
-
PROJECT_NUMBER: מספר הפרויקט שמכיל את מאגר הזהויות של עומסי העבודה. צריך להזין את מספר הפרויקט ולא את מזהה הפרויקט. -
POOL_ID: המזהה של מאגר זהויות של עומסי עבודה -
WORKLOAD_PROVIDER_ID: מזהה הספק של מאגר הזהויות של כוח העבודה
-
-
מעתיקים את קובץ פרטי הכניסה לתיקיית התרשים
apigee-env,apigee-org/ו-apigee-telemetry/.cp $APIGEE_HELM_CHARTS_HOME/apigee-datastore/apigee-non-prod-credential-configuration.json \ $APIGEE_HELM_CHARTS_HOME/apigee-env/apigee-non-prod-credential-configuration.json
cp $APIGEE_HELM_CHARTS_HOME/apigee-datastore/apigee-non-prod-credential-configuration.json \ $APIGEE_HELM_CHARTS_HOME/apigee-org/apigee-non-prod-credential-configuration.json
cp $APIGEE_HELM_CHARTS_HOME/apigee-datastore/apigee-non-prod-credential-configuration.json \ $APIGEE_HELM_CHARTS_HOME/apigee-telemetry/apigee-non-prod-credential-configuration.json
WIF: Vault
בגישה הזו נעשה שימוש בהגדרות של פרטי כניסה שמאוחסנות במנהל סודות חיצוני, Hashicorp Vault. כשיוצרים את קובץ ההחלפות בשלב 7: יצירת ההחלפות, מציינים את סודות הכספת ברמת הארגון וברמת הסביבה באמצעות המאפיינים
serviceAccountSecretProviderClassאוenvs.serviceAccountSecretProviderClass.יצירת קובצי התצורה של פרטי הכניסה
ייצור
תצטרכו ליצור את קובצי התצורה של פרטי הכניסה לחשבונות השירות הבאים:
apigee-cassandraapigee-guardrailsapigee-martapigee-metrics-
apigee-mint-task-scheduler(אם משתמשים במונטיזציה ל-Apigee Hybrid) apigee-runtimeapigee-synchronizer
- יוצרים ספרייה לקובצי התצורה של פרטי הכניסה. אפשר לתת למדריך כל שם שרוצים. במקרה הזה, שם הספרייה הוא
credential-configurations:mkdir $APIGEE_HELM_CHARTS_HOME/credential-configurations
-
יוצרים את קובץ התצורה של פרטי הכניסה בשביל
apigee-cassandra:gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \ --service-account=apigee-cassandra@$PROJECT_ID.iam.gserviceaccount.com \ --credential-source-file=/var/run/service-account/token \ --credential-source-type=text \ --output-file=$APIGEE_HELM_CHARTS_HOME/credential-configurations/apigee-cassandra-credential-configuration.json
כאשר:
-
PROJECT_NUMBER: מספר הפרויקט שמכיל את מאגר הזהויות של עומסי העבודה. צריך להזין את מספר הפרויקט ולא את מזהה הפרויקט. -
POOL_ID: המזהה של מאגר זהויות של עומסי עבודה -
WORKLOAD_PROVIDER_ID: מזהה הספק של מאגר הזהויות של כוח העבודה
-
-
יוצרים את קובץ התצורה של פרטי הכניסה בשביל
apigee-guardrails:gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \ --service-account=apigee-guardrails@$PROJECT_ID.iam.gserviceaccount.com \ --credential-source-file=/var/run/service-account/token \ --credential-source-type=text \ --output-file=$APIGEE_HELM_CHARTS_HOME/credential-configurations/apigee-guardrails-credential-configuration.json
-
יוצרים את קובץ התצורה של פרטי הכניסה בשביל
apigee-mart:gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \ --service-account=apigee-mart@$PROJECT_ID.iam.gserviceaccount.com \ --credential-source-file=/var/run/service-account/token \ --credential-source-type=text \ --output-file=$APIGEE_HELM_CHARTS_HOME/credential-configurations/apigee-mart-credential-configuration.json
-
יוצרים את קובץ התצורה של פרטי הכניסה בשביל
apigee-metrics:gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \ --service-account=apigee-metrics@$PROJECT_ID.iam.gserviceaccount.com \ --credential-source-file=run/service-account/token \ --credential-source-type=text \ --output-file=$APIGEE_HELM_CHARTS_HOME/credential-configurations/apigee-metrics-credential-configuration.json
-
יוצרים את קובץ התצורה של פרטי הכניסה בשביל
apigee-runtime:gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \ --service-account=apigee-runtime@$PROJECT_ID.iam.gserviceaccount.com \ --credential-source-file=/var/run/service-account/token \ --credential-source-type=text \ --output-file=$APIGEE_HELM_CHARTS_HOME/credential-configurations/apigee-runtime-credential-configuration.json
-
יוצרים את קובץ התצורה של פרטי הכניסה בשביל
apigee-synchronizer:gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \ --service-account=apigee-synchronizer@$PROJECT_ID.iam.gserviceaccount.com \ --credential-source-file=/var/run/service-account/token \ --credential-source-type=text \ --output-file=$APIGEE_HELM_CHARTS_HOME/credential-configurations/apigee-synchronizer-credential-configuration.json
-
יוצרים את קובץ התצורה של פרטי הכניסה בשביל
apigee-watcher:gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \ --service-account=apigee-watcher@$PROJECT_ID.iam.gserviceaccount.com \ --credential-source-file=/var/run/service-account/token \ --credential-source-type=text \ --output-file=$APIGEE_HELM_CHARTS_HOME/credential-configurations/apigee-watcher-credential-configuration.json
-
אם אתם משתמשים במונטיזציה ב-Apigee Hybrid, תצטרכו גם ליצור את קובץ התצורה של פרטי הכניסה עבור
apigee-mint-task-scheduler:gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \ --service-account=apigee-mint-task-scheduler@$PROJECT_ID.iam.gserviceaccount.com \ --credential-source-file=/var/run/service-account/token \ --credential-source-type=text \ --output-file=$APIGEE_HELM_CHARTS_HOME/credential-configurations/apigee-mint-task-scheduler-credential-configuration.json
Non-prod
- יוצרים ספרייה לקובץ התצורה של פרטי הכניסה. אפשר לתת למדריך כל שם שרוצים. במקרה הזה, שם הספרייה הוא
credential-configurations:mkdir $APIGEE_HELM_CHARTS_HOME/credential-configurations
-
יוצרים את קובץ התצורה של פרטי הכניסה לחשבון השירות
apigee-non-prodבתיקייהcredential-configurationsבאמצעות הפקודה הבאה:gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \ --service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com \ --credential-source-file=/var/run/service-account/token \ --credential-source-type=text \ --output-file=$APIGEE_HELM_CHARTS_HOME/credential-configurations/apigee-non-prod-credential-configuration.json
כאשר:
-
PROJECT_NUMBER: מספר הפרויקט שמכיל את מאגר הזהויות של עומסי העבודה. צריך להזין את מספר הפרויקט ולא את מזהה הפרויקט. -
POOL_ID: המזהה של מאגר זהויות של עומסי עבודה -
WORKLOAD_PROVIDER_ID: מזהה הספק של מאגר הזהויות של כוח העבודה
-
התקנה של מנהל התקן CSI וספק Vault
אם עדיין לא התקנתם את מנהל ה-CSI באשכול באמצעות Helm, פועלים לפי ההוראות במאמר Secrets Store CSI Driver: Installation. מידע נוסף זמין במאמרי העזרה התקנת פלאגין שמתממשק עם שירותים חיצוניים של כספת במסמכי Vault.
במאמר פלטפורמות וגרסאות נתמכות של Apigee hybrid מפורטות גרסאות ה-CSI Driver המינימליות שנתמכות על ידי Apigee hybrid.
יצירה של סודות, כללי מדיניות ותפקידים ב-Vault
משתמשים בממשק המשתמש או בממשקי ה-API של Vault כדי ליצור סודות ולתת הרשאות לחשבונות השירות של Kubernetes שמשמשים את Apigee Hybrid לקריאת הסודות האלה.
-
יוצרים את הסודות הספציפיים לארגון ולסביבה בפורמט הבא:
מפתח סודי נתונים סודיים secret/data/apigee/orgsakeys
{ "cassandraBackup": "***", "cassandraRestore": "***", "connectAgent": "***", "guardrails": "***", "mart": "***", "metrics": "***", "mint": "***", "watcher": "***" }secret/data/apigee/envsakeys-ENV_NAME
{ "runtime": "***", "synchronizer": "***" }ייצור
מחליפים את
"***"בכל זוג בתוכן של קובץ התצורה של פרטי הכניסה לחשבון השירות של Google שמתאים לרכיב Apigee. apigee-cassandra-backupו-apigee-cassandra-restoreמשתמשים בחשבון השירותapigee-cassandra. לדוגמה:{ "cassandraBackup": "{ "universe_domain": "googleapis.com", "type": "external_account:," "audience": "//iam.googleapis.com/projects/123123123123/locations/global/workloadIdentityPools/my-wi-pool/providers/my-wi-provider", "subject_token_type": "urn:ietf:params:oauth: token-type:jwt", "token_url": "https://sts.googleapis.com/v1/token", "service "impersonation_url": "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/apigee-cassandra@my-project.iam.gserviceaccount.com:generateAccessToken", "credential_source": { "file": "/var/run/service-account/token", "format": { "type": "text" } } }", "cassandraRestore":... ... }Non-prod
מחליפים את
"***"בכל זוג בתוכן של קובץ התצורה של פרטי הכניסה לחשבון השירותapigee-non-prod. apigee-cassandra-backupו-apigee-cassandra-restoreמשתמשים בחשבון השירותapigee-cassandra. לדוגמה:{ "cassandraBackup": "{ "universe_domain": "googleapis.com", "type": "external_account:," "audience": "//iam.googleapis.com/projects/123123123123/locations/global/workloadIdentityPools/my-wi-pool/providers/my-wi-provider", "subject_token_type": "urn:ietf:params:oauth: token-type:jwt", "token_url": "https://sts.googleapis.com/v1/token", "service "impersonation_url": "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/apigee-non-prod@my-project.iam.gserviceaccount.com:generateAccessToken", "credential_source": { "file": "/var/run/service-account/token", "format": { "type": "text" } } }", "cassandraRestore":... ... } - נותנים גישה לסוד הארגון. יוצרים קובץ טקסט בשם orgsakeys-auth-policy.txt עם התוכן הבא:
path "secret/data/apigee/orgsakeys" { capabilities = ["read"] } -
ב-Vault, יוצרים מדיניות שמעניקה גישה לסוד הארגון:
vault policy write apigee-orgsakeys-auth orgsakeys-auth-policy.txt
-
לכל סביבה, יוצרים קובץ טקסט בשם
envsakeys-ENV_NAME-auth-policy.txtעם התוכן הבא:path "secret/data/apigee/envsakeys-ENV_NAME" { capabilities = ["read"] }חוזרים על השלב הזה לכל סביבה.
-
ב-Vault, יוצרים מדיניות שמעניקה גישה לסוד של הסביבה:
vault policy write apigee-envsakeys-ENV_NAME-auth envsakeys-ENV_NAME-auth-policy.txt
חוזרים על השלב הזה לכל סביבה.
-
יוצרים סקריפט בשם
generate-encoded-sas.shעם התוכן הבא:# generate-encoded-sas.sh ORG=$APIGEE_ORG # Apigee organization name ENVS=$APIGEE_ENV_LIST # comma separated env names, for example: dev,prod ORG_SHORT_NAME=$(echo $ORG | head -c 15) ENCODE=$(echo -n $ORG | shasum -a 256 | head -c 7) ORG_ENCODE=$(echo "$ORG_SHORT_NAME-$ENCODE") NAMES=apigee-manager,apigee-cassandra-default,apigee-cassandra-backup-sa,apigee-cassandra-restore-sa,apigee-cassandra-schema-setup-${ORG_ENCODE},apigee-cassandra-schema-val-${ORG_ENCODE},apigee-cassandra-user-setup-${ORG_ENCODE},apigee-operator-guardrails-sa,apigee-mart-${ORG_ENCODE},apigee-mint-task-scheduler-${ORG_ENCODE},apigee-connect-agent-${ORG_ENCODE},apigee-watcher-${ORG_ENCODE},apigee-metrics-apigee-telemetry,apigee-open-telemetry-collector-apigee-telemetry,apigee-logger-apigee-telemetry for ENV in ${ENVS//,/ } do ENV_SHORT_NAME=$(echo $ENV | head -c 15) ENCODE=$(echo -n $ORG:$ENV | shasum -a 256 | head -c 7) ENV_ENCODE=$(echo "$ORG_SHORT_NAME-$ENV_SHORT_NAME-$ENCODE") NAMES+=,apigee-synchronizer-${ENV_ENCODE},apigee-runtime-${ENV_ENCODE} done echo $NAMES -
מריצים את הסקריפט כדי ליצור את רשימת השמות של חשבונות השירות שאליהם רוצים לקשר את המדיניות:
./generate-encoded-sas.sh
הפלט צריך להיות רשימה של שמות חשבונות שירות של Kubernetes, מופרדים בפסיקים, בדומה לדוגמה הבאה:
./generate-encoded-sas.shapigee-manager,apigee-cassandra-default,apigee-cassandra-backup-sa, apigee-cassandra-restore-sa,apigee-cassandra-schema-setup-myhybrido rg-5b044c1,apigee-cassandra-schema-val-myhybridorg-5b044c1,apigee-c assandra-user-setup-myhybridorg-5b044c1,apigee-operator-guardrails- sa,apigee-mart-myhybridorg-5b044c1,apigee-mint-task-scheduler-myhyb ridorg-5b044c1,apigee-connect-agent-myhybridorg-5b044c1,apigee-watc her-myhybridorg-5b044c1,apigee-metrics-apigee-telemetry,apigee-open -telemetry-collector-apigee-telemetry,apigee-logger-apigee-telemetr y,apigee-synchronizer-myhybridorg-dev-ee52aca,apigee-runtime-myhybr idorg-dev-ee52aca,apigee-synchronizer-myhybridorg-prod-2d0221c,apig ee-runtime-myhybridorg-prod-2d0221c -
מעתיקים את טקסט הפלט ומפרידים אותו לרשימות. רשימה אחת לשמות של חשבונות השירות של הארגון ורשימה נפרדת לשם של חשבון השירות של הסביבה לכל סביבה. חשבונות השירות של הארגון מופיעים ראשונים ברשימת הפלט עד
apigee-logger-apigee-telemetry.רשימת שמות השירותים של org מהדוגמה הקודמת:
apigee-manager,apigee-cassandra-default,apigee-cassandra-backup-sa, apigee-cassandra-restore-sa,apigee-cassandra-schema-setup-myhybrido rg-5b044c1,apigee-cassandra-schema-val-myhybridorg-5b044c1,apigee-c assandra-user-setup-myhybridorg-5b044c1,apigee-operator-guardrails- sa,apigee-mart-myhybridorg-5b044c1,apigee-mint-task-scheduler-myhyb ridorg-5b044c1,apigee-connect-agent-myhybridorg-5b044c1,apigee-watc her-myhybridorg-5b044c1,apigee-metrics-apigee-telemetry,apigee-open -telemetry-collector-apigee-telemetry,apigee-logger-apigee-telemetr y
השמות של חשבונות השירות env הם בתבנית
apigee-synchronizer-ORG_NAME-ENV_NAME-HASH_TEXTו-apigee-runtime-ORG_NAME-ENV_NAME-HASH_TEXT. צריך להפריד אותם לרשימות נפרדות לכל סביבה. לדוגמה, אפשר להפריד את הפלט מהדוגמה הקודמת לשתי הרשימות הבאות:סביבה
dev:apigee-synchronizer-myhybridorg-dev-ee52aca,apigee-runtime-myhybrid org-dev-ee52aca
סביבה
prod:apigee-synchronizer-myhybridorg-prod-2d0221c,apigee-runtime-myhybri dorg-prod-2d0221c
-
באמצעות המדיניות, יוצרים תפקיד ב-Vault שמקשר את חשבונות השירות הספציפיים לארגון:
vault write auth/kubernetes/role/apigee-orgsakeys \ bound_service_account_names=LIST_OF_ORG_SA_NAMES \ bound_service_account_namespaces=apigee \ policies=apigee-orgsakeys-auth \ ttl=1m -
לכל סביבה, יוצרים תפקיד ב-Vault בשביל מפתחות חשבון השירות שלה:
vault write auth/kubernetes/role/apigee-envsakeys-ENV_NAME \ bound_service_account_names=LIST_OF_ENV_NAME_SA_NAMES \ bound_service_account_namespaces=apigee \ policies=apigee-envsakeys-ENV_NAME-auth \ ttl=1m
חוזרים על השלב הזה לכל סביבה.
יצירת
SecretProviderClassאובייקטיםמשאב ה-
SecretProviderClassמציין לדרייבר CSI עם איזה ספק ליצור קשר כשמבקשים סודות. צריך להגדיר את המפתחות של חשבון השירות באמצעות האובייקט הזה. בטבלה הבאה מפורטים שמות הקבצים (objectNames) שצפויים ב-Apigee Hybrid:חשבון שירות שמות הקבצים הצפויים של הסודות גיבוי של Cassandra cassandraBackupשחזור Cassandra cassandraRestoreחיבור לסוכן connectAgentשכבות הגנה guardrailsMART martמדדים metricsמונטיזציה
(אם משתמשים במונטיזציה ל-Apigee Hybrid)mintזמן ריצה runtimeSynchronizer synchronizerצופה watcher-
משתמשים בתבנית
SecretProviderClassהבאה כדי להגדיר את המשאב הזה לסודות שספציפיים לארגון:apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: apigee-orgsakeys-spc spec: provider: vault parameters: roleName: apigee-orgsakeys vaultAddress: VAULT_ADDRESS # "objectName" is an alias used within the SecretProviderClass to reference # that specific secret. This will also be the filename containing the secret. # Apigee Hybrid expects these exact values so they must not be changed. # "secretPath" is the path in Vault where the secret should be retrieved. # "secretKey" is the key within the Vault secret response to extract a value from. objects: | - objectName: "cassandraBackup" secretPath: "" secretKey: "" - objectName: "cassandraRestore" secretPath: "" secretKey: "" - objectName: "connectAgent" secretPath: "" secretKey: "" - objectName: "guardrails" secretPath: "" secretKey: "" - objectName: "mart" secretPath: "" secretKey: "" - objectName: "metrics" secretPath: "" secretKey: "" - objectName: "mint" secretPath: "" secretKey: "" - objectName: "watcher" secretPath: "" secretKey: ""VAULT_ADDRESS היא נקודת הקצה שבה שרת Vault פועל. אם Vault פועל באותו אשכול כמו Apigee, הפורמט יהיה בדרך כלל
http://vault.$APIGEE_NAMESPACE.svc.cluster.local:VAULT_SERVICE_PORT.שומרים את התבנית בקובץ בשם
spc-org.yaml. -
מחילים את
SecretProviderClassהספציפי לארגון על מרחב השמות של apigee:kubectl -n $APIGEE_NAMESPACE apply -f spc-org.yaml
-
לכל סביבה, משתמשים בתבנית
SecretProviderClassהבאה כדי להגדיר את המשאב הזה לסודות הספציפיים לסביבה. חוזרים על השלב הזה לכל סביבה:apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: apigee-envsakeys-ENV_NAME-spc spec: provider: vault parameters: roleName: apigee-envsakeys-ENV_NAME vaultAddress: VAULT_ADDRESS # "objectName" is an alias used within the SecretProviderClass to reference # that specific secret. This will also be the filename containing the secret. # Apigee Hybrid expects these exact values so they must not be changed. # "secretPath" is the path in Vault where the secret should be retrieved. # "secretKey" is the key within the Vault secret response to extract a value from. objects: | - objectName: "runtime" secretPath: "" secretKey: "" - objectName: "synchronizer" secretPath: "" secretKey: ""VAULT_ADDRESS היא נקודת הקצה שבה שרת Vault פועל. אם Vault פועל באותו אשכול ובאותו מרחב שמות כמו Apigee, הפורמט יהיה בדרך כלל
http://vault.$APIGEE_NAMESPACE.svc.cluster.local:VAULT_SERVICE_PORT.שומרים את התבנית בקובץ בשם
spc-env-ENV_NAME.yaml. -
לכל סביבה, מחילים את
SecretProviderClassהספציפי לסביבה על מרחב השמות של apigee:kubectl -n $APIGEE_NAMESPACE apply -f spc-env-ENV_NAME.yaml
חוזרים על השלב הזה לכל סביבה.
הגדרת אמצעי בקרה באמצעות איחוד זהויות של עומסי עבודה ל-GKE
במהלך ההתקנה הראשונית, תרשים apigee-operator יוצר pod של אמצעי הגנה כדי לבדוק אם ממשקי ה-API הנכונים מופעלים בפרויקט. כדי להשתמש באמצעי בקרה במהלך ההתקנה, צריך להגדיר את הקישור של חשבון השירות לאיחוד שירותי אימות הזהות של עומסי עבודה ב-GKE לפני שמתקינים את התרשים.
-
כדי לקבל את כתובת האימייל של GSA עם אמצעי הבקרה, מריצים את הפקודה הבאה:
gcloud iam service-accounts list --project ${PROJECT_ID} --filter "apigee"כתובות אימייל של GSA הן בדרך כלל בפורמט הבא:
GSA_NAME@PROJECT_ID.iam.gserviceaccount.com
לדוגמה:
DISPLAY NAME EMAIL DISABLED apigee-guardrails apigee-guardrails@myproject.iam.gserviceaccount.com False
משתמשים בכתובת האימייל הזו כמשתנה
GSA_EMAILבשלבים הבאים.
חשבון השירות ב-Kubernetes (KSA) של אמצעי הבקרה נקרא -
GSA_EMAIL: כתובת האימייל של חשבון השירות של Guardrails IAM. -
PROJECT_NUMBER: מספר הפרויקט שבו יצרתם את מאגר הזהויות של עומסי העבודה. -
POOL_ID: המזהה של מאגר הזהויות של עומסי העבודה. -
MAPPED_SUBJECT: חשבון השירות של Kubernetes מתוך ההצהרה בטוקן של המזהה. ברוב ההתקנות ההיברידיות, הפורמט יהיה:system:serviceaccount:$APIGEE_NAMESPACE:KSA_NAME.במקרה של
apigee-operator-guardrails-sa, זה יהיה משהו דומה ל-system:serviceaccount:apigee:apigee-operator-guardrails-sa.
apigee-operator-guardrails-sa. כדי ליצור את הקישור ולהעניק ל-KSA גישה ל-apigee-guardrails GSA לצורך התחזות, מריצים את הפקודה הבאה:
ייצור
תבנית
gcloud iam service-accounts add-iam-policy-binding \
GSA_EMAIL \
--member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/MAPPED_SUBJECT" \
--role=roles/iam.workloadIdentityUserדוגמה
gcloud iam service-accounts add-iam-policy-binding \
apigee-guardrails@my-project.iam.gserviceaccount.com \
--member="principal://iam.googleapis.com/projects/1234567890/locations/global/workloadIdentityPools/my-pool/subject/system:serviceaccount:apigee:apigee-operator-guardrails-sa" \
--role=roles/iam.workloadIdentityUserNon-prod
תבנית
gcloud iam service-accounts add-iam-policy-binding \
NON_PROD_GSA_EMAIL \
--member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/MAPPED_SUBJECT" \
--role=roles/iam.workloadIdentityUserדוגמה
gcloud iam service-accounts add-iam-policy-binding \
apigee-non-prod@my-project.iam.gserviceaccount.com \
--member="principal://iam.googleapis.com/projects/1234567890/locations/global/workloadIdentityPools/my-pool/subject/system:serviceaccount:apigee:apigee-operator-guardrails-sa" \
--role=roles/iam.workloadIdentityUserכאשר:
מידע נוסף מופיע במאמר אבחון בעיות באמצעי הבקרה.