שלב 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

לא בסביבת ייצור

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

  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. מעתיקים את טקסט הפלט ומחלקים אותו לרשימות: רשימה אחת של שמות חשבונות השירות של 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
  9. משתמשים במדיניות כדי ליצור תפקיד ב-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
    
  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
UDCA udca
Watcher 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 ל-GKE

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

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

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

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

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

  • סודות ב-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:

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

    לא בסביבת ייצור

    בסביבות ללא ייצור:

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

    ‫WIF: סודות

    בגישה הזו משתמשים בהגדרות של פרטי כניסה שמאוחסנות בסודות של 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
      

    לא בסביבת ייצור

    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:

    לא בסביבת ייצור

    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: קבצים

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

    ייצור

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

    חשבון שירות ספריית תרשימי Helm של Apigee
    apigee-cassandra apigee-datastore/
    apigee-mart apigee-org/
    apigee-metrics apigee-telemetry/
    apigee-mint-task-scheduler
    (אם משתמשים ב-Monetization for 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">מונטיזציה ל-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-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: יצירת השינויים, מספקים סודות של Vault ברמת הארגון וברמת הסביבה באמצעות המאפיינים 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
      

    לא בסביבת ייצור

    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 CSI במסמכי התיעוד של Vault.

    במאמר הפלטפורמות והגרסאות שנתמכות ב-Apigee Hybrid מפורטות הגרסאות המינימליות של מנהל ההתקן של CSI שנתמכות ב-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":...
      ...
      }

      לא בסביבת ייצור

      מחליפים את "***" בכל זוג בתוכן של קובץ התצורה של פרטי הכניסה לחשבון השירות 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. מעתיקים את טקסט הפלט ומחלקים אותו לרשימות: רשימה אחת של שמות חשבונות השירות של 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
    9. משתמשים במדיניות כדי ליצור תפקיד ב-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
          
    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
    UDCA udca
    Watcher 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 (השלב הבא) שלב 6: יצירת אישורי TLS 7 8 9 10 11