סקירה כללית
בשלב הזה מוסבר איך להגדיר את שיטות האימות לחשבונות השירות ב-Google Cloud שיצרתם בשלב הקודם.
בוחרים את ההוראות לשיטת האימות שבה רוצים להשתמש. במאמר שיטות אימות של חשבונות שירות ב-Apigee Hybrid מופיעה סקירה כללית של שיטות האימות השונות.
סודות של Kubernetes
חשבונות שירות
צריך ליצור סודות של Kubernetes לחשבונות השירות הבאים:
ייצור
apigee-cassandraapigee-loggerapigee-martapigee-metrics-
apigee-mint-task-scheduler(אם אתם משתמשים ב-Monetization for Apigee hybrid) apigee-runtimeapigee-synchronizerapigee-udcaapigee-watcher
לא בסביבת ייצור
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_NAMESPACE
kubectl 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_NAMESPACE
kubectl 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_NAMESPACE
kubectl create secret generic apigee-udca-svc-account \
--from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/service-accounts/$PROJECT_ID-apigee-udca.json" \
-n $APIGEE_NAMESPACE
kubectl 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_NAMESPACE
kubectl 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_NAMESPACE
kubectl 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
לא בסביבת ייצור
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, פעלו לפי ההוראות במאמר מנהל ההתקן של CSI ב-Secrets Store: התקנה. מידע נוסף זמין במאמר התקנת ספק Vault CSI במסמכי התיעוד של Vault.
במאמר הפלטפורמות והגרסאות שנתמכות ב-Apigee Hybrid מפורטות הגרסאות המינימליות של מנהל ההתקן של CSI שנתמכות ב-Apigee Hybrid.
יצירת סודות, כללי מדיניות ותפקידים ב-Vault
משתמשים בממשק המשתמש או בממשקי ה-API של Vault כדי ליצור סודות ולתת הרשאות לחשבונות השירות של Kubernetes שמשמשים את Apigee Hybrid לקריאת הסודות האלה.
-
יוצרים את הסודות הספציפיים לארגון ולסביבה בפורמט הבא:
מפתח סודי נתונים סודיים secret/data/apigee/orgsakeys
{ "cassandraBackup": "***", "cassandraRestore": "***", "connectAgent": "***", "logger": "***", "mart": "***", "metrics": "***", "mint": "***", "udca": "***", "watcher": "***" }secret/data/apigee/envsakeys-ENV_NAME
{ "runtime": "***", "synchronizer": "***", "udca": "***". }מחליפים את
"***"בכל זוג בתוכן של קובץ ה- .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-udca-${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-mart-myhybridorg-5b0 44c1,apigee-mint-task-scheduler-myhybridorg-5b044c1,apigee-connect- agent-myhybridorg-5b044c1,apigee-watcher-myhybridorg-5b044c1,apigee -udca-myhybridorg-5b044c1,apigee-metrics-apigee-telemetry,apigee-op en-telemetry-collector-apigee-telemetry,apigee-logger-apigee-teleme try,apigee-synchronizer-myhybridorg-dev-ee52aca,apigee-runtime-myhy bridorg-dev-ee52aca,apigee-synchronizer-myhybridorg-prod-2d0221c,ap igee-runtime-myhybridorg-prod-2d0221c -
מעתיקים את טקסט הפלט ומחלקים אותו לרשימות: רשימה אחת של שמות חשבונות השירות של org ורשימה נפרדת של שמות חשבונות השירות של env לכל סביבה. חשבונות השירות של הארגון מופיעים ראשונים ברשימת הפלט, עד
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 -udca-myhybridorg-5b044c1,apigee-metrics-apigee-telemetry,apigee-op en-telemetry-collector-apigee-telemetry,apigee-logger-apigee-teleme try
השמות של חשבונות השירות 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 שמקושר לחשבונות השירות של Apigee שספציפיים לארגון:
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 |
| כלי לרישום ביומן | logger |
| MART | mart |
| מדדים | metrics |
| מונטיזציה (אם משתמשים במונטיזציה ב-Apigee Hybrid) |
mint |
| זמן ריצה | runtime |
| מסנכרן | synchronizer |
| UDCA | udca |
| Watcher | 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: "logger" secretPath: "" secretKey: "" - objectName: "mart" secretPath: "" secretKey: "" - objectName: "metrics" secretPath: "" secretKey: "" - objectName: "mint" secretPath: "" secretKey: "" - objectName: "udca" 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: "" - objectName: "udca" 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 ל-GKE
הכנות להגדרת איחוד זהויות של עומסי עבודה ל-GKE
- מוודאים שאיחוד זהויות של עומסי עבודה ל-GKE מופעל בקובץ השינויים. צריך להפעיל אותן בקובץ השינויים במאפיינים הבאים.
- השדה
namespaceהוא שדה חובה. לדוגמה:instanceID: "hybrid-instance-1" namespace: "apigee"
- אם אתם משתמשים בחשבון שירות אחד (לא בסביבת ייצור) לכל הרכיבים, ציינו אותו באמצעות:
gcp.workloadIdentity.gsa. לדוגמה:gcp: workloadIdentity: enabled: true gsa: "apigee-non-prod@my-hybrid-project.iam.gserviceaccount.com" - אם משתמשים בחשבון שירות נפרד לכל רכיב (התקנות בסביבת ייצור), צריך לציין את חשבון השירות במאפיין
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
WIF בפלטפורמות אחרות
אם אתם משתמשים באיחוד שירותי אימות הזהות של עומסי עבודה בפלטפורמות אחרות, אתם יכולים להגדיר אימות של חשבון שירות בשיטות הבאות:
- סודות ב-Kubernetes
- קובצי JSON של חשבונות שירות
- Vault
בהוראות הבאות, בוחרים את הכרטיסייה של שיטת האימות שבה משתמשים.
בתהליך הזה משתמשים בשני משתני הסביבה הבאים, שהוגדרו בשלב 2: הורדת תרשימי Apigee Helm. המשתנים האלה הם אופציונליים. אם לא הגדרתם אותם, החליפו את נתיב הספרייה המתאים לכל משתנה בדוגמאות הקוד.
-
$APIGEE_HELM_CHARTS_HOME: הספרייה שאליה הורדתם את תרשימי ה-Helm של Apigee, שמוגדרת בשלב 2: הורדת תרשימי ה-Helm של Apigee. -
$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:
מריצים את הפקודה הבאה כדי לוודא שה-API של שירות אבטחת האסימון מופעל:
gcloud services list --enabled --project $PROJECT_ID | grep sts.googleapis.com
אם ה-API לא מופעל:
המסוף
מפעילים את Security Token Service API, אם הוא עדיין לא מופעל.
התפקידים שנדרשים כדי להפעיל ממשקי API
כדי להפעיל ממשקי API, צריך את ההרשאה
serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד "בעלים" (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד "אדמין בממשק 'שימוש בשירות'" (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-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
אם אתם משתמשים במונטיזציה ב-Apigee Hybrid בגרסה v1.15.1 ואילך, תצטרכו גם ליצור את קובץ התצורה של פרטי הכניסה לחשבון השירות
apigee-mint-task-scheduler.DISPLAY NAME EMAIL DISABLED ... apigee-mint-task-scheduler apigee-mint-task-scheduler@my_project_id.iam.gserviceaccount.com False ...
לא בסביבת ייצור
בסביבות ללא ייצור:
DISPLAY NAME EMAIL DISABLED apigee-non-prod apigee-non-prod@my_project_id.iam.gserviceaccount.com False
-
יוצרים קובץ תצורה של פרטי כניסה לכל חשבון שירות ב-IAM ברשימה הקודמת.
WIF: סודות
בגישה הזו משתמשים בהגדרות של פרטי כניסה שמאוחסנות בסודות של Kubernetes. כשיוצרים את קובץ השינויים בשלב 7: יצירת השינויים, צריך לציין את שם הסוד של כל חשבון שירות במאפיין
serviceAccountRefאוenvs.serviceAccountRefs.יצירת קובצי התצורה של פרטי הכניסה
ייצור
תצטרכו ליצור את קובצי התצורה של פרטי הכניסה לחשבונות השירות הבאים:
apigee-cassandraapigee-martapigee-metricsapigee-mint-task-schedulerאם אתם משתמשים במונטיזציה ב-Apigee Hybrid.apigee-runtimeapigee-synchronizerapigee-udca
- יוצרים ספרייה לקובצי התצורה של פרטי הכניסה. אפשר לתת לספרייה כל שם שרוצים. במדריך הזה, הספרייה נקראת
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-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-udca:gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \ --service-account=apigee-udca@$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-udca-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
לא בסביבת ייצור
- יוצרים ספרייה לקובץ התצורה של פרטי הכניסה. אפשר לתת לספרייה כל שם שרוצים. במדריך הזה, הספרייה נקראת
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-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-udca:kubectl create secret generic apigee-udca-svc-account \ --from-file="client_secret.json=$APIGEE_HELM_CHARTS_HOME/credential-configurations/$PROJECT_ID-apigee-udca.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:לא בסביבת ייצור
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: קבצים
בגישה הזו משתמשים בקובצי התצורה של פרטי הכניסה במקום בקובצי המפתחות של חשבונות השירות ב-Google. כשיוצרים את קובץ שינויי ברירת המחדל בשלב 7: יצירת שינויי ברירת המחדל, צריך לציין את הנתיב לקובץ תצורת פרטי הכניסה של כל נכס
serviceAccountPathאוenvs.serviceAccountPaths.ייצור
צריך ליצור את קובצי התצורה של פרטי הכניסה בספריות התרשימים המתאימות:
חשבון שירות ספריית תרשימי Helm של Apigee apigee-cassandraapigee-datastore/apigee-martapigee-org/apigee-metricsapigee-telemetry/apigee-mint-task-scheduler
(אם משתמשים ב-Monetization for Apigee hybrid)apigee-org/apigee-runtimeapigee-env/apigee-synchronizerapigee-env/apigee-udcaapigee-org/
apigee-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-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-udca:חשבון השירות
apigee-udcaמשמש גם את התרשיםapigee-orgוגם את התרשיםapigee-env.-
יוצרים את קובץ התצורה של פרטי הכניסה בספריית התרשים של
apigee-org.gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \ --service-account=apigee-udca@$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-udca-credential-configuration.json
-
מעתיקים את קובץ התצורה של פרטי הכניסה לספריית התרשים
apigee-env.cp $APIGEE_HELM_CHARTS_HOME/apigee-org/apigee-udca-credential-configuration.json \ $APIGEE_HELM_CHARTS_HOME/apigee-env/apigee-udca-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
-
אם אתם משתמשים ב-href="monetization-for-hybrid">מונטיזציה ל-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
לא בסביבת ייצור
צריך ליצור את קובץ התצורה של פרטי הכניסה ולהעתיק אותו לספריות התרשים המתאימות:
חשבון שירות תרשים 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.jsoncp $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: יצירת השינויים, מספקים סודות של Vault ברמת הארגון וברמת הסביבה באמצעות המאפיינים
serviceAccountSecretProviderClassאוenvs.serviceAccountSecretProviderClass.יצירת קובצי התצורה של פרטי הכניסה
ייצור
תצטרכו ליצור את קובצי התצורה של פרטי הכניסה לחשבונות השירות הבאים:
apigee-cassandraapigee-martapigee-metricsapigee-mint-task-scheduler(אם משתמשים במונטיזציה ב-Apigee Hybrid)apigee-runtimeapigee-synchronizerapigee-udca
- יוצרים ספרייה לקובצי התצורה של פרטי הכניסה. אפשר לתת לספרייה כל שם שרוצים. במדריך הזה, הספרייה נקראת
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-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-udca:gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/WORKLOAD_PROVIDER_ID \ --service-account=apigee-udca@$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-udca-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
לא בסביבת ייצור
- יוצרים ספרייה לקובץ התצורה של פרטי הכניסה. אפשר לתת לספרייה כל שם שרוצים. במדריך הזה, הספרייה נקראת
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 CSI במסמכי התיעוד של Vault.
במאמר הפלטפורמות והגרסאות שנתמכות ב-Apigee Hybrid מפורטות הגרסאות המינימליות של מנהל ההתקן של CSI שנתמכות ב-Apigee Hybrid.
יצירת סודות, כללי מדיניות ותפקידים ב-Vault
משתמשים בממשק המשתמש או בממשקי ה-API של Vault כדי ליצור סודות ולתת הרשאות לחשבונות השירות של Kubernetes שמשמשים את Apigee Hybrid לקריאת הסודות האלה.
-
יוצרים את הסודות הספציפיים לארגון ולסביבה בפורמט הבא:
מפתח סודי נתונים סודיים secret/data/apigee/orgsakeys
{ "cassandraBackup": "***", "cassandraRestore": "***", "connectAgent": "***", "logger": "***", "mart": "***", "metrics": "***", "mint": "***", "udca": "***", "watcher": "***" }secret/data/apigee/envsakeys-ENV_NAME
{ "runtime": "***", "synchronizer": "***", "udca": "***". }ייצור
מחליפים את
"***"בכל זוג בתוכן של קובץ התצורה של פרטי הכניסה לחשבון השירות של 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":... ... }לא בסביבת ייצור
מחליפים את
"***"בכל זוג בתוכן של קובץ התצורה של פרטי הכניסה לחשבון השירות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-mart-${ORG_ENCODE},apigee-mint-task-scheduler-${ORG_ENCODE},apigee-connect-agent-${ORG_ENCODE},apigee-watcher-${ORG_ENCODE},apigee-udca-${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-mart-myhybridorg-5b0 44c1,apigee-mint-task-scheduler-myhybridorg-5b044c1,apigee-connect- agent-myhybridorg-5b044c1,apigee-watcher-myhybridorg-5b044c1,apigee -udca-myhybridorg-5b044c1,apigee-metrics-apigee-telemetry,apigee-op en-telemetry-collector-apigee-telemetry,apigee-logger-apigee-teleme try,apigee-synchronizer-myhybridorg-dev-ee52aca,apigee-runtime-myhy bridorg-dev-ee52aca,apigee-synchronizer-myhybridorg-prod-2d0221c,ap igee-runtime-myhybridorg-prod-2d0221c -
מעתיקים את טקסט הפלט ומחלקים אותו לרשימות: רשימה אחת של שמות חשבונות השירות של org ורשימה נפרדת של שמות חשבונות השירות של env לכל סביבה. חשבונות השירות של הארגון מופיעים ראשונים ברשימת הפלט, עד
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 -udca-myhybridorg-5b044c1,apigee-metrics-apigee-telemetry,apigee-op en-telemetry-collector-apigee-telemetry,apigee-logger-apigee-teleme try
השמות של חשבונות השירות 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 שמקושר לחשבונות השירות של Apigee שספציפיים לארגון:
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חיבור נציג connectAgentMART martמדדים metricsמונטיזציה
(אם משתמשים במונטיזציה ל-Apigee Hybrid)mintזמן ריצה runtimeמסנכרן synchronizerUDCA udcaWatcher 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: "logger" secretPath: "" secretKey: "" - objectName: "mart" secretPath: "" secretKey: "" - objectName: "metrics" secretPath: "" secretKey: "" - objectName: "mint" secretPath: "" secretKey: "" - objectName: "udca" 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: "" - objectName: "udca" 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
חוזרים על השלב הזה בכל סביבה.