שלב 5: הגדרת אימות של חשבון שירות

סקירה כללית

בשלב הזה מוסבר איך להגדיר את שיטות האימות לחשבונות השירות ב-Google Cloud שיצרתם בשלב הקודם.

בוחרים את ההוראות לשיטת האימות שרוצים להשתמש בה. במאמר שיטות אימות של חשבונות שירות ב-Apigee hybrid מופיעה סקירה כללית של שיטות האימות השונות.

סודות ב-Kubernetes

חשבונות שירות

תצטרכו ליצור סודות של Kubernetes לחשבונות השירות הבאים:

ייצור

  • apigee-cassandra
  • apigee-logger
  • apigee-mart
  • apigee-metrics
  • apigee-mint-task-scheduler (אם אתם משתמשים ב-Monetization for Apigee hybrid)
  • apigee-runtime
  • apigee-synchronizer
  • apigee-udca
  • apigee-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_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

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 לקריאת הסודות האלה.

  1. יוצרים את הסודות הספציפיים לארגון ולסביבה בפורמט הבא:
    מפתח סודינתונים סודיים
    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":...
    ...
    }
  2. נותנים גישה לסוד הארגון. יוצרים קובץ טקסט בשם orgsakeys-auth-policy.txt עם התוכן הבא:
    path "secret/data/apigee/orgsakeys" {
        capabilities = ["read"]
    }
  3. ב-Vault, יוצרים מדיניות שמעניקה גישה לסוד הארגון:
    vault policy write apigee-orgsakeys-auth orgsakeys-auth-policy.txt
  4. לכל סביבה, יוצרים קובץ טקסט בשם envsakeys-ENV_NAME-auth-policy.txt עם התוכן הבא:
    path "secret/data/apigee/envsakeys-ENV_NAME" {
        capabilities = ["read"]
    }

    חוזרים על השלב הזה לכל סביבה.

  5. ב-Vault, יוצרים מדיניות שמעניקה גישה לסוד של הסביבה:
    vault policy write apigee-envsakeys-ENV_NAME-auth envsakeys-ENV_NAME-auth-policy.txt

    חוזרים על השלב הזה לכל סביבה.

  6. יוצרים סקריפט בשם 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
    
  7. מריצים את הסקריפט כדי ליצור את רשימת השמות של חשבונות השירות שאליהם רוצים לקשר את המדיניות:
    ./generate-encoded-sas.sh

    הפלט צריך להיות רשימה של שמות חשבונות שירות של Kubernetes, מופרדים בפסיקים, בדומה לדוגמה הבאה:

    ./generate-encoded-sas.sh
    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,apigee-synchronizer-myhybridorg-dev-ee52aca,apigee-runtime-myhy
    bridorg-dev-ee52aca,apigee-synchronizer-myhybridorg-prod-2d0221c,ap
    igee-runtime-myhybridorg-prod-2d0221c
  8. מעתיקים את טקסט הפלט ומפרידים אותו לרשימות. רשימה אחת לשמות של חשבונות השירות של הארגון ורשימה נפרדת לשם של חשבון השירות של הסביבה לכל סביבה. חשבונות השירות של הארגון מופיעים ראשונים ברשימת הפלט עד 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
  9. באמצעות המדיניות, יוצרים תפקיד ב-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
    
  10. לכל סביבה, יוצרים תפקיד ב-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 synchronizer
UDCA udca
צופה watcher
  1. משתמשים בתבנית 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.

  2. מחילים את SecretProviderClass הספציפי לארגון על מרחב השמות של apigee:
    kubectl -n $APIGEE_NAMESPACE apply -f spc-org.yaml
  3. לכל סביבה, משתמשים בתבנית 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.

  4. לכל סביבה, מחילים את SecretProviderClass הספציפי לסביבה על מרחב השמות של apigee:
    kubectl -n $APIGEE_NAMESPACE apply -f spc-env-ENV_NAME.yaml

    חוזרים על השלב הזה לכל סביבה.

  5. אופציונלי: אפשר למחוק את קובצי ה-JSON של חשבון השירות אחרי שיוצרים את אובייקטי SecretProviderClass.

WIF for GKE

הכנות להגדרה של איחוד זהויות של עומסי עבודה ל-GKE

  1. מוודאים שאיחוד זהויות של עומסי עבודה ל-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.

  2. בודקים שההגדרה הנוכחית של gcloud מוגדרת למזהה הפרויקט ב-Google Cloud באמצעות הפקודה הבאה:
    gcloud config get project
  3. אם צריך, מגדירים את ההגדרה הנוכחית של gcloud:

    gcloud config set project $PROJECT_ID
  4. מוודאים שאיחוד זהויות של עומסי עבודה ל-GKE מופעל באשכול GKE. כשיוצרים את האשכול בשלב 1: יצירת אשכול, השלב השישי הוא הפעלת איחוד זהויות של עומסי עבודה ל-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
  5. מפעילים את איחוד הזהויות של עומסי עבודה ל-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.

  6. מריצים את הפקודות הבאות כדי לוודא שאיחוד זהויות של עומסי עבודה ל-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
        

WIF בפלטפורמות אחרות

כשמשתמשים באיחוד שירותי אימות הזהות של עומסי עבודה בפלטפורמות אחרות מלבד GKE, אפשר להשתמש בשיטות הבאות כדי להגדיר אימות של חשבון שירות:

  • סודות ב-Kubernetes
  • קובצי JSON של חשבונות שירות
  • Vault

בהוראות הבאות, בוחרים את הכרטיסייה של שיטת האימות שבה משתמשים.

בפרוצדורה הזו נעשה שימוש בשני משתני הסביבה הבאים שהוגדרו בשלב 2: הורדת תרשימי Apigee Helm. המשתנים האלה הם אופציונליים. אם לא הגדרתם אותם, החליפו את כל משתנה בדוגמאות הקוד בנתיב המתאים לספרייה.

במקרה של התקנות ב-AKS, צריך לוודא שהפעלתם את מנפיק OpenID Connect‏ (OIDC). צריך להפעיל את התכונה הזו כדי שאיחוד שירותי אימות הזהות של עומסי עבודה יוכל לגשת למטא-נתונים של OpenID Connect ול-JSON Web Key Set‏ (JWKS) של האשכול.

מגדירים את האשכול לשימוש באיחוד שירותי אימות הזהות של עומסי עבודה.

  1. מריצים את הפקודה הבאה כדי לוודא שההגדרה הנוכחית של gcloud היא מזהה הפרויקט שלכם ב-Google Cloud:
    gcloud config get project
  2. אם צריך, מגדירים את ההגדרה הנוכחית של gcloud:

    gcloud config set project $PROJECT_ID
  3. מפעילים את 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). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק 'שימוש בשירות'' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים

    להפעלת ה-API

    שורת הפקודה

    מפעילים את ה-API באמצעות הפקודה הבאה:

    gcloud services enable sts.googleapis.com --project $PROJECT_ID
  4. יוצרים את הספק ואת מאגר הזהויות של עומסי העבודה.

    התפקידים הנדרשים

    כדי לקבל את ההרשאות שדרושות להגדרה של איחוד שירותי אימות הזהות של עומסי עבודה, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים בפרויקט:

    להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.

    יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.

    לחלופין, התפקיד הבסיסי ב-IAM 'בעלים' (roles/owner) כולל גם הרשאות להגדרה של איחוד זהויות. בסביבת ייצור לא מומלץ להקצות תפקידים בסיסיים, אבל אפשר להעניק אותם בסביבת פיתוח או בסביבת בדיקה.

    כדי ליצור ספק ומאגר זהויות של כוח עבודה:

    1. קובעים את כתובת ה-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 של המנפיק באחד מהשלבים הבאים.

    2. אופציונלי: אם אי אפשר לגשת לשרת ה-OIDC שלכם באופן ציבורי, מורידים את קבוצת מפתחות ה-JSON Web Key Set ‏ (JWKS) של האשכול:
      kubectl get --raw /openid/v1/jwks > cluster-jwks.json

      כדי לבדוק אם ספק ה-OIDC שלכם זמין לציבור, אתם צריכים להיות מסוגלים לגשת לכתובת ה-URL של הספק באמצעות פקודת CURL ולקבל תגובה 200.

    3. יצירת מאגר זהויות חדש של עומסי עבודה:
      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"
    4. מוסיפים את האשכול כספק של מאגר זהויות של עומסי עבודה. בוחרים את הפקודה ליצירת הפלאגין שמתממשק עם שירותים חיצוניים בהתאם לשאלה אם המוסד המנפיק של 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.

יצירת קובצי התצורה של פרטי הכניסה

כדי לפרוס עומס עבודה של Kubernetes שיכול לגשת למשאבים של Google Cloud , צריך קודם ליצור קובץ תצורה של פרטי כניסה לכל חשבון שירות של IAM:

  1. כדי להציג את רשימת חשבונות השירות ב-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
    ...

    Non-prod

    לסביבות שאינן סביבות ייצור:

    DISPLAY NAME         EMAIL                                                      DISABLED
    apigee-non-prod      apigee-non-prod@my_project_id.iam.gserviceaccount.com      False
    
  2. יוצרים קובץ הגדרות של פרטי כניסה לכל חשבון שירות של IAM ברשימה הקודמת.

    WIF: secrets

    הגישה הזו מבוססת על הגדרות של פרטי כניסה שמאוחסנות בסודות של Kubernetes. כשיוצרים את קובץ ההחלפות בשלב 7: יצירת ההחלפות, מציינים את שם הסוד של כל חשבון שירות באמצעות המאפיין serviceAccountRef או envs.serviceAccountRefs.

    יצירת קובצי התצורה של פרטי הכניסה

    ייצור

    תצטרכו ליצור את קובצי התצורה של פרטי הכניסה לחשבונות השירות הבאים:

    • apigee-cassandra
    • apigee-mart
    • apigee-metrics
    • apigee-mint-task-scheduler אם אתם משתמשים במונטיזציה ל-Apigee Hybrid.
    • apigee-runtime
    • apigee-synchronizer
    • apigee-udca
    1. יוצרים ספרייה לקובצי התצורה של פרטי הכניסה. אפשר לתת למדריך כל שם שרוצים. במקרה הזה, שם הספרייה הוא credential-configurations:
      mkdir $APIGEE_HELM_CHARTS_HOME/credential-configurations
    2. יוצרים את קובץ התצורה של פרטי הכניסה בשביל 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: מזהה הספק של מאגר הזהויות של כוח העבודה
    3. יוצרים את קובץ התצורה של פרטי הכניסה בשביל 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
      
    4. יוצרים את קובץ התצורה של פרטי הכניסה בשביל 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
      
    5. יוצרים את קובץ התצורה של פרטי הכניסה בשביל 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
      
    6. יוצרים את קובץ התצורה של פרטי הכניסה בשביל 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
      
    7. יוצרים את קובץ התצורה של פרטי הכניסה בשביל 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
      
    8. יוצרים את קובץ התצורה של פרטי הכניסה בשביל 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
      
    9. אם אתם משתמשים במונטיזציה ב-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

    1. יוצרים ספרייה לקובץ התצורה של פרטי הכניסה. אפשר לתת למדריך כל שם שרוצים. במקרה הזה, שם הספרייה הוא credential-configurations:
      mkdir $APIGEE_HELM_CHARTS_HOME/credential-configurations
    2. יוצרים את קובץ התצורה של פרטי הכניסה לחשבון השירות 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

    ייצור

    1. יוצרים את הקובץ הסודי עבור 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
      
    2. יוצרים את הקובץ הסודי עבור 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
      
    3. יוצרים את הקובץ הסודי עבור 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
      
    4. יוצרים את הקובץ הסודי עבור 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
    5. יוצרים את הקובץ הסודי עבור 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
      
    6. יוצרים את הקובץ הסודי עבור 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
      
    7. יוצרים את הקובץ הסודי עבור 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
      
    8. אם אתם משתמשים במונטיזציה ב-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_NAMESPACE

    WIF: files

    בגישה הזו משתמשים בקובצי הגדרות של פרטי כניסה במקום בקובצי מפתח של חשבון שירות ב-Google. כשיוצרים את קובץ ההחלפות בשלב 7: יצירת ההחלפות, מציינים את הנתיב לקובץ הגדרות האישורים של כל מאפיין serviceAccountPath או envs.serviceAccountPaths.

    ייצור

    תצטרכו ליצור את קובצי התצורה של פרטי הכניסה בספריות התרשימים המתאימות:

    חשבון שירות ספריית תרשימי Helm של Apigee
    apigee-cassandra apigee-datastore/
    apigee-mart apigee-org/
    apigee-metrics apigee-telemetry/
    apigee-mint-task-scheduler
    (אם משתמשים במונטיזציה ב-Apigee Hybrid)
    apigee-org/
    apigee-runtime apigee-env/
    apigee-synchronizer apigee-env/
    apigee-udca apigee-org/
    apigee-env/
    apigee-watcher apigee-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.

      1. יוצרים את קובץ התצורה של פרטי הכניסה בספריית התרשים 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
        
      2. מעתיקים את קובץ התצורה של פרטי הכניסה לספריית התרשים 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">Monetization for 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-prod apigee-datastore/
    apigee-telemetry/
    apigee-org/
    apigee-env/
    1. יוצרים את קובץ התצורה של פרטי הכניסה בספריית התרשים 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: מזהה הספק של מאגר הזהויות של כוח העבודה
    2. מעתיקים את קובץ פרטי הכניסה לתיקיית התרשים 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-cassandra
    • apigee-mart
    • apigee-metrics
    • apigee-mint-task-scheduler (אם משתמשים במונטיזציה ל-Apigee Hybrid)
    • apigee-runtime
    • apigee-synchronizer
    • apigee-udca
    1. יוצרים ספרייה לקובצי התצורה של פרטי הכניסה. אפשר לתת למדריך כל שם שרוצים. במקרה הזה, שם הספרייה הוא credential-configurations:
      mkdir $APIGEE_HELM_CHARTS_HOME/credential-configurations
    2. יוצרים את קובץ התצורה של פרטי הכניסה בשביל 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: מזהה הספק של מאגר הזהויות של כוח העבודה
    3. יוצרים את קובץ התצורה של פרטי הכניסה בשביל 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
      
    4. יוצרים את קובץ התצורה של פרטי הכניסה בשביל 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
      
    5. יוצרים את קובץ התצורה של פרטי הכניסה בשביל 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
      
    6. יוצרים את קובץ התצורה של פרטי הכניסה בשביל 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
      
    7. יוצרים את קובץ התצורה של פרטי הכניסה בשביל 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
      
    8. יוצרים את קובץ התצורה של פרטי הכניסה בשביל 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
      
    9. אם אתם משתמשים במונטיזציה ב-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

    1. יוצרים ספרייה לקובץ התצורה של פרטי הכניסה. אפשר לתת למדריך כל שם שרוצים. במקרה הזה, שם הספרייה הוא credential-configurations:
      mkdir $APIGEE_HELM_CHARTS_HOME/credential-configurations
    2. יוצרים את קובץ התצורה של פרטי הכניסה לחשבון השירות 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 לקריאת הסודות האלה.

    1. יוצרים את הסודות הספציפיים לארגון ולסביבה בפורמט הבא:
      מפתח סודינתונים סודיים
      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":...
      ...
      }

      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":...
      ...
      }
    2. נותנים גישה לסוד הארגון. יוצרים קובץ טקסט בשם orgsakeys-auth-policy.txt עם התוכן הבא:
      path "secret/data/apigee/orgsakeys" {
        capabilities = ["read"]
      }
    3. ב-Vault, יוצרים מדיניות שמעניקה גישה לסוד הארגון:
      vault policy write apigee-orgsakeys-auth orgsakeys-auth-policy.txt
    4. לכל סביבה, יוצרים קובץ טקסט בשם envsakeys-ENV_NAME-auth-policy.txt עם התוכן הבא:
      path "secret/data/apigee/envsakeys-ENV_NAME" {
        capabilities = ["read"]
      }

      חוזרים על השלב הזה לכל סביבה.

    5. ב-Vault, יוצרים מדיניות שמעניקה גישה לסוד של הסביבה:
      vault policy write apigee-envsakeys-ENV_NAME-auth envsakeys-ENV_NAME-auth-policy.txt

      חוזרים על השלב הזה לכל סביבה.

    6. יוצרים סקריפט בשם 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
      
    7. מריצים את הסקריפט כדי ליצור את רשימת השמות של חשבונות השירות שאליהם רוצים לקשר את המדיניות:
      ./generate-encoded-sas.sh

      הפלט צריך להיות רשימה של שמות חשבונות שירות של Kubernetes, מופרדים בפסיקים, בדומה לדוגמה הבאה:

      ./generate-encoded-sas.sh
      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,apigee-synchronizer-myhybridorg-dev-ee52aca,apigee-runtime-myhy
      bridorg-dev-ee52aca,apigee-synchronizer-myhybridorg-prod-2d0221c,ap
      igee-runtime-myhybridorg-prod-2d0221c
    8. מעתיקים את טקסט הפלט ומפרידים אותו לרשימות. רשימה אחת לשמות של חשבונות השירות של הארגון ורשימה נפרדת לשם של חשבון השירות של הסביבה לכל סביבה. חשבונות השירות של הארגון מופיעים ראשונים ברשימת הפלט עד 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
    9. באמצעות המדיניות, יוצרים תפקיד ב-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
          
    10. לכל סביבה, יוצרים תפקיד ב-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
    MART mart
    מדדים metrics
    מונטיזציה
    (אם משתמשים במונטיזציה ל-Apigee Hybrid)
    mint
    זמן ריצה runtime
    Synchronizer synchronizer
    UDCA udca
    צופה watcher
    1. משתמשים בתבנית 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.

    2. מחילים את SecretProviderClass הספציפי לארגון על מרחב השמות של apigee:
      kubectl -n $APIGEE_NAMESPACE apply -f spc-org.yaml
    3. לכל סביבה, משתמשים בתבנית 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.

    4. לכל סביבה, מחילים את SecretProviderClass הספציפי לסביבה על מרחב השמות של apigee:
      kubectl -n $APIGEE_NAMESPACE apply -f spc-env-ENV_NAME.yaml

      חוזרים על השלב הזה לכל סביבה.

השלב הבא

1 2 3 4 5 (NEXT) Step 6: Create TLS certificates 7 8 9 10 11