אימות של אשכולות Workload Identity

אימות אשכולות של Workload Identity מאפשר ליצור ולאבטח אשכולות לתוכנת Distributed Cloud רק ל-bare metal באמצעות אסימונים לטווח קצר ואיחוד שירותי אימות הזהות של עומסי עבודה. בגישה הזו, מפתחות קבועים של חשבונות שירות מוחלפים בטוקנים של גישה מסוג OAuth 2.0, וכך מצטמצם הצורך בתחזוקה ונמנעים סיכוני האבטחה שקשורים לפרטי כניסה לטווח ארוך.

אפשר להפעיל את התכונה הזו רק כשיוצרים אשכולות חדשים. התכונה הזו זמינה בגרסה 1.33 ואילך, ובגרסת תצוגה מקדימה בגרסאות 1.30, ‏ 1.31 ו-1.32. אי אפשר לעדכן אשכולות קיימים כדי להשתמש בו. הגבלות נוספות מפורטות בקטע מגבלות.

איך פועל אימות אשכולות של Workload Identity

פרטי הכניסה לטווח קצר של חשבון השירות הם בצורת טוקני גישה מסוג OAuth 2.0. כברירת מחדל, התוקף של טוקני הגישה פג אחרי שעה אחת. באופן דומה, גם התוקף של אסימוני משיכת תמונות פג אחרי שעה אחת כברירת מחדל.

לעומת זאת, במצב עם מפתחות, השיטה הרגילה ליצירה ולאבטחה של אשכולות, משתמשים במפתחות של חשבונות שירות שהורדו. כשיוצרים אשכול בניהול עצמי (אדמין, היברידי או עצמאי), מציינים את הנתיב למפתחות שהורדתם. לאחר מכן המפתחות מאוחסנים כסודות באשכול ובכל אשכול מנוהל של משתמשים. כברירת מחדל, למפתחות של חשבונות שירות אין תאריך תפוגה, ואם לא מנהלים אותם בצורה נכונה הם עלולים לסכן את האבטחה. למידע על הגדרת מועד תפוגה למפתחות של חשבונות שירות, ראו מועדי תפוגה של מפתחות בניהול המשתמש.

לאימות אשכולות של Workload Identity יש שני יתרונות עיקריים על פני שימוש במפתחות של חשבונות שירות:

  • אבטחה משופרת: מפתחות של חשבונות שירות מהווים סיכון אבטחה אם לא מנהלים אותם בצורה נכונה. אסימוני OAuth 2.0 ואיחוד שירותי אימות הזהות של עומסי עבודה נחשבים לחלופות מומלצות למפתחות של חשבונות שירות. למידע נוסף על אסימונים של חשבונות שירות, קראו את המאמר פרטי כניסה לטווח קצר לחשבון שירות. מידע נוסף על איחוד שירותי אימות הזהות של עומסי עבודה זמין במאמר איחוד שירותי אימות הזהות של עומסי עבודה.

  • פחות תחזוקה: מפתחות של חשבונות שירות דורשים יותר תחזוקה. החלפה ואבטחה של המפתחות האלה באופן קבוע יכולות להיות נטל ניהולי משמעותי.

לפני שמתחילים

בקטעים הבאים תיצרו חשבונות שירות ותקצו את התפקידים שנדרשים לאימות אשכולות של Workload Identity. הוראות ההגדרה במסמך הזה לא מחליפות את ההוראות במאמר הגדרת משאבים Google Cloud, אלא נדרשות בנוסף לדרישות המוקדמות הרגילות להתקנת Distributed Cloud בגרסת התוכנה בלבד. חשבונות השירות שנדרשים לאימות אשכולות של Workload Identity דומים לחשבונות השירות שמתוארים בקטע הגדרת משאביGoogle Cloud , אבל יש להם שמות ייחודיים, כך שהם לא מפריעים לאשכולות שמשתמשים במפתחות של חשבונות השירות שמוגדרים כברירת מחדל.

חשבונות השירות שנדרשים לאימות אשכולות של Workload Identity שונים בגרסת טרום-השקה (Preview) ובגרסת הזמינות הכללית (GA), כמו שמתואר בטבלה הבאה:

‫1.33 ואילך

חשבון שירות מטרה תפקידים
admin-sa אתם משתמשים בחשבון השירות הזה כדי ליצור אסימונים. לכל אסימון יש את ההרשאות שמשויכות לתפקידים של חשבון השירות. roles/gkehub.admin
roles/iam.serviceAccountAdmin
roles/iam.serviceAccountTokenCreator
roles/iam.workloadIdentityPoolAdmin*
roles/logging.admin
roles/monitoring.admin
roles/resourcemanager.projectIamAdmin
baremetal-gcr ‫Google Distributed Cloud משתמש בחשבון השירות הזה כדי להוריד קובצי אימג' של קונטיינרים מ-Artifact Registry. ללא

*תפקיד ה-IAM‏ roles/iam.workloadIdentityPoolAdmin נדרש רק לגרסה 1.34 ואילך.

1.30-1.32

חשבון שירות מטרה תפקידים
admin-sa אתם משתמשים בחשבון השירות הזה כדי ליצור אסימונים. לכל אסימון יש את ההרשאות שמשויכות לתפקידים של חשבון השירות. roles/gkehub.admin
roles/iam.serviceAccountAdmin
roles/iam.serviceAccountTokenCreator
roles/logging.admin
roles/monitoring.admin
baremetal-controller ‫Connect Agent משתמש בחשבון השירות הזה כדי לשמור על החיבור בין האשכול לבין Google Cloud , ולרשום את האשכולות ב צי. חשבון השירות הזה גם מרענן טוקנים של חשבון השירות baremetal-gcr. roles/gkehub.admin
roles/monitoring.dashboardEditor
roles/serviceusage.serviceUsageViewer
baremetal-cloud-ops הסוכן של Stackdriver משתמש בחשבון השירות הזה כדי לייצא יומנים ומדדים מאשכולות אל Cloud Logging ואל Cloud Monitoring. roles/kubernetesmetadata.publisher
roles/logging.logWriter
roles/monitoring.dashboardEditor
roles/monitoring.metricWriter
roles/monitoring.viewer
roles/opsconfigmonitoring.resourceMetadata.writer
roles/serviceusage.serviceUsageViewer
roles/stackdriver.resourceMetadata.writer
baremetal-gcr ‫Google Distributed Cloud משתמש בחשבון השירות הזה כדי להוריד קובצי אימג' של קונטיינרים מ-Artifact Registry. ללא

הגדרת חשבונות שירות

בקטעים הבאים מוסבר איך ליצור את חשבונות השירות הנדרשים ולהקצות להם את התפקידים שדרושים לאימות אשכולות של Workload Identity. בטבלה שבקטע הקודם מופיעה רשימה של חשבונות השירות והתפקידים הנדרשים שלהם.

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

כדי ליצור את חשבונות השירות לאימות אשכולות של Workload Identity, מבצעים את השלבים הבאים:

  1. בתחנת העבודה של האדמין, מתחברים ל-Google Cloud CLI:

    gcloud auth login
    
  2. יוצרים את חשבונות השירות הנדרשים לאימות של אשכול Workload Identity:

    השם של חשבון השירות admin-sa הוא שרירותי. אם השם הזה גורם להתנגשות בפרויקט, אתם יכולים לשנות אותו. לחשבונות השירות האחרים של Workload Identity Cluster Authentication יש שמות שנקבעו מראש, ואפשר להתאים אותם אישית אם רוצים.

    ‫1.33 ואילך

    gcloud iam service-accounts create admin-sa \
        --project=PROJECT_ID
    
    gcloud iam service-accounts create baremetal-gcr \
        --project=PROJECT_ID
    

    מחליפים את PROJECT_ID במזהה הפרויקט ב-Google Cloud .

    1.30-1.32

    ```sh gcloud iam service-accounts create admin-sa
    --project=PROJECT_ID

    gcloud iam service-accounts create baremetal-controller
    --project=PROJECT_ID

    gcloud iam service-accounts create baremetal-cloud-ops
    --project=PROJECT_ID

    gcloud iam service-accounts create baremetal-gcr
    --project=PROJECT_ID ```

    מחליפים את PROJECT_ID במזהה הפרויקט ב-Google Cloud .

הוספת קישורי מדיניות של ניהול זהויות והרשאות גישה (IAM) לחשבונות שירות

כדי להחיל את קישורי המדיניות הנדרשים של ניהול זהויות והרשאות גישה (IAM) על חשבונות השירות החדשים:

‫1.33 ואילך

  1. מוסיפים קישורי מדיניות IAM לתפקידים הנדרשים לחשבון השירות admin-sa:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/gkehub.admin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountAdmin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountTokenCreator
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/logging.admin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/monitoring.admin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/resourcemanager.projectIamAdmin
    

1.30-1.32

  1. מוסיפים קישורי מדיניות IAM לתפקידים הנדרשים לחשבון השירות admin-sa:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/gkehub.admin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountAdmin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountTokenCreator
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/logging.admin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/monitoring.admin
    
  2. מוסיפים קישורי מדיניות IAM לתפקידים הנדרשים לחשבון השירות baremetal-controller:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-controller@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/gkehub.admin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-controller@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/monitoring.dashboardEditor
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-controller@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/serviceusage.serviceUsageViewer
    
  3. מוסיפים קישורי מדיניות IAM לתפקידים הנדרשים לחשבון השירות baremetal-cloud-ops:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/kubernetesmetadata.publisher
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/logging.logWriter
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/monitoring.dashboardEditor
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/monitoring.metricWriter
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/monitoring.viewer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/opsconfigmonitoring.resourceMetadata.writer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/serviceusage.serviceUsageViewer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/stackdriver.resourceMetadata.writer
    
  4. נותנים לחשבון השירות baremetal-controller את היכולת ליצור טוקני גישה בשם חשבון השירות baremetal-gcr:

    gcloud iam service-accounts add-iam-policy-binding \
        baremetal-gcr@PROJECT_ID.iam.gserviceaccount.com \
        --member=serviceAccount:baremetal-controller@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountTokenCreator
    

מגדירים אימות

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

  1. בתחנת העבודה של האדמין, נכנסים ל-Google Cloud CLI:

    gcloud auth login
    
  2. בתחנת העבודה של האדמין, יוצרים ומורידים מפתח לחשבון השירות admin-sa:

    המפתח הזה נדרש כדי לאשר גישה לחשבון השירות admin-sa.

    gcloud iam service-accounts keys create TMP_KEY_FILE_PATH \
        --iam-account=admin-sa@PROJECT_ID.iam.gserviceaccount.com
    

    מחליפים את TMP_KEY_FILE_PATH בנתיב של קובץ המפתח שהורדתם, כולל שם הקובץ.

  3. בתחנת העבודה של האדמין, יוצרים משתנה סביבה GOOGLE_APPLICATION_CREDENTIALS עם הערך של מפתח חשבון השירות שהורדתם:

    export GOOGLE_APPLICATION_CREDENTIALS=TMP_KEY_FILE_PATH
    
  4. בתחנת העבודה של האדמין, יוצרים משתנה סביבה של GCP_ACCESS_TOKEN עם הערך של אסימון הגישה שנוצר על ידי חשבון השירות admin-sa:

    export GCP_ACCESS_TOKEN=$(gcloud auth application-default print-access-token)
    

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

  5. מוודאים שהאסימון נוצר על ידי חשבון השירות admin-sa עם תאריך התפוגה הנכון:

    curl "https://oauth2.googleapis.com/tokeninfo?access_token=$GCP_ACCESS_TOKEN"
    

    התגובה אמורה לכלול שורות שנראות כך:

    ...
    "exp": "1759512810",
    "expires_in": "3589",
    ...
    

    ערך התפוגה הוא בשניות וצריך להיות קטן מ-3600, מה שמציין שהאסימון יפוג תוך פחות משעה.

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

כדי לתת גישה ל- Google Cloud באמצעות איחוד זהויות של עומסי עבודה ל-GKE, יוצרים מדיניות הרשאה ב-IAM שנותנת גישה למשאב ספציפי ב-Google Cloud לחשבון שמתאים לזהות של האפליקציה. במקרה כזה, איחוד שירותי אימות הזהות של עומסי עבודה נותן גישה לאופרטורים ספציפיים באשכול. מידע נוסף על איחוד זהויות של עומסי עבודה ל-GKE זמין במאמר איחוד זהויות של עומסי עבודה במסמכי התיעוד של IAM.

‫1.33 ואילך

בגרסאות של אשכולות שבהן האימות של אשכול Workload Identity נמצא בזמינות כללית (GA), משתמשים בפקודה bmctl configure projects כדי להגדיר את איחוד שירותי אימות הזהות של עומסי עבודה באשכולות. הפקודה הזו משולבת בשלבים ליצירת אשכול אדמין וליצירת אשכול משתמש.

כדי למנוע חוסר יציבות ב-containerd כשמשתמשים ב-registry mirror כדי לשלוף קובצי אימג' של קונטיינרים לאשכול, צריך להוסיף את ההערה baremetal.cluster.gke.io/enable-gcr-image-credential-refresh: "false" לאשכול. ההערה הזו זמינה בגרסאות ‎1.33.200-gke.70‎ ואילך:

---
...
registryMirrors:
  - endpoint: https://198.51.20.1:5000
    caCertPath: /root/ca.crt
    pullCredentialConfigPath: /root/.docker/config.json
    hosts:
      - somehost.io
      - otherhost.io
---
apiVersion: v1
kind: Namespace
metadata:
  name: cluster-admin1
---
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
  name: admin1
  namespace: cluster-admin1
  annotations:
    baremetal.cluster.gke.io/enable-gcr-image-credential-refresh: "false"
spec:
  type: admin
  anthosBareMetalVersion: 1.33.200-gke.70
  ...

1.30-1.32

בגרסאות של אשכולות שבהן אימות אשכולות של Workload Identity נמצא בגרסת טרום-השקה (Preview), צריך להגדיר באופן ידני את איחוד שירותי אימות הזהות של עומסי עבודה באשכולות, כמו שמתואר בקטעים הבאים.

הוספת קישורי מדיניות IAM למפעיל האשכול

הפקודות הבאות נותנות לחשבון השירות anthos-cluster-operator ב-Kubernetes את היכולת להתחזות לחשבון השירות baremetal-controller ולקיים אינטראקציה עם משאבי Google Cloud בשם האשכול:

  1. לכל אשכול שמוגדר לאימות אשכולות של Workload Identity (או שמתוכנן להשתמש באימות אשכולות של Workload Identity), כולל אשכול ה-bootstrap, נותנים ל-anthos-cluster-operator באשכול את היכולת להתחזות לחשבון השירות baremetal-controller:

    בפקודה הבאה, principalSet מורכב ממאגר הזהויות של עומסי העבודה ומחשבון שירות של Kubernetes,‏ anthos-cluster-operator, במרחב השמות kube-system.

    gcloud iam service-accounts add-iam-policy-binding \
        baremetal-controller@PROJECT_ID.iam.gserviceaccount.com \
        --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/anthos-cluster-operator \
        --role=roles/iam.workloadIdentityUser \
        --project=PROJECT_ID
    

    מחליפים את מה שכתוב בשדות הבאים:

  2. בודקים את הקישורים של המדיניות לחשבון השירות baremetal-controller:

    gcloud iam service-accounts get-iam-policy \
        baremetal-controller@PROJECT_ID.iam.gserviceaccount.com
    

    התגובה אמורה להיראות כך:

    bindings:
    - members:
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/anthos-cluster-operator
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/anthos-cluster-operator
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/anthos-cluster-operator
      role: roles/iam.workloadIdentityUser
    etag: BwYoN3QLig0=
    version: 1
    

הוספת קישורי מדיניות IAM למפעילי Google Cloud Observability

הפקודות הבאות נותנות לחשבונות השירות הבאים של Google Cloud Observability Kubernetes את היכולת להתחזות לחשבון השירות baremetal-cloud-ops ולקיים אינטראקציה עם משאבי Google Cloud בשם האשכול:

  • cloud-audit-logging
  • gke-metrics-agent
  • kubestore-collector
  • metadata-agent
  • stackdriver-log-forwarder
  1. בכל אשכול שמוגדר לאימות אשכולות של Workload Identity (או שמתוכנן להשתמש באימות אשכולות של Workload Identity), כולל אשכול ה-bootstrap, נותנים למפעילי Google Cloud Observability באשכול את היכולת להתחזות לחשבון השירות baremetal-cloud-ops:

    בכל אחת מהפקודות הבאות, principalSet מורכב ממאגר הזהויות של עומסי העבודה ומחשבון שירות של Kubernetes, כמו cloud-audit-logging, במרחב השמות kube-system.

    gcloud iam service-accounts add-iam-policy-binding \
        baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/cloud-audit-logging \
        --role=roles/iam.workloadIdentityUser \
        --project=PROJECT_ID
    
    gcloud iam service-accounts add-iam-policy-binding \
        baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/gke-metrics-agent \
        --role=roles/iam.workloadIdentityUser \
        --project=PROJECT_ID
    
    gcloud iam service-accounts add-iam-policy-binding \
        baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/kubestore-collector \
        --role=roles/iam.workloadIdentityUser \
        --project=PROJECT_ID
    
    gcloud iam service-accounts add-iam-policy-binding \
        baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/metadata-agent \
        --role=roles/iam.workloadIdentityUser \
        --project=PROJECT_ID
    
    gcloud iam service-accounts add-iam-policy-binding \
        baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \
        --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/stackdriver-log-forwarder \
        --role=roles/iam.workloadIdentityUser \
        --project=PROJECT_ID
    
  2. בודקים את הקישורים של המדיניות לחשבון השירות baremetal-cloud-ops:

    gcloud iam service-accounts get-iam-policy \
        baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com
    

    התגובה אמורה להיראות כך:

    bindings:
    - members:
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/cloud-audit-logging
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/gke-metrics-agent
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/kubestore-collector
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/metadata-agent
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/stackdriver-log-forwarder
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/cloud-audit-logging
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/gke-metrics-agent
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/kubestore-collector
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/metadata-agent
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/stackdriver-log-forwarder
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/cloud-audit-logging
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/gke-metrics-agent
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/kubestore-collector
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/metadata-agent
      - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/stackdriver-log-forwarder
      role: roles/iam.workloadIdentityUser
    etag: BwYhT4gL-dY=
    version: 1
    

יצירת אשכול אדמין

השלבים ליצירת אשכול אדמין שונים מעט בין גרסת טרום-ההשקה (Preview) (גרסאות 1.30 עד 1.32) לבין הגרסה הזמינה לכלל המשתמשים (גרסאות 1.33 ואילך). בשלבי ה-GA משתמשים בפקודה bmctl configure projects כדי להגדיר את איחוד שירותי אימות הזהות של עומסי עבודה באשכולות.

‫1.33 ואילך

ההבדל הבולט ביותר בהגדרת אשכולות שמשתמשים באימות אשכולות של Workload Identity הוא שלא מציינים נתיבים למפתחות של חשבונות שירות שהורדו.

  1. כשממלאים את הגדרות האשכול בקובץ התצורה, משאירים ריקים את הנתיבים של מפתחות חשבונות השירות בקטע של פרטי הכניסה, כמו בדוגמה הבאה:

    gcrKeyPath:
    sshPrivateKeyPath: /home/USERNAME/.ssh/id_rsa
    gkeConnectAgentServiceAccountKeyPath:
    gkeConnectRegisterServiceAccountKeyPath:
    cloudOperationsServiceAccountKeyPath:
    ---
    apiVersion: v1
    kind: Namespace
    metadata:
      name: cluster-ADMIN_CLUSTER_NAME
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: ADMIN_CLUSTER_NAME
      namespace: cluster-ADMIN_CLUSTER_NAME
    spec:
      type: admin
      profile: default
      anthosBareMetalVersion: 1.33.0-gke.799
      ...
    
  2. מוסיפים את ההערה baremetal.cluster.gke.io/enable-workload-identity-cluster-authentication: "true" לקובץ התצורה של האשכול:

    gcrKeyPath:
    sshPrivateKeyPath: /home/USERNAME/.ssh/id_rsa
    gkeConnectAgentServiceAccountKeyPath:
    gkeConnectRegisterServiceAccountKeyPath:
    cloudOperationsServiceAccountKeyPath:
    ---
    apiVersion: v1
    kind: Namespace
    metadata:
      name: cluster-ADMIN_CLUSTER_NAME
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: ADMIN_CLUSTER_NAME
      namespace: cluster-ADMIN_CLUSTER_NAME
      annotations:
        baremetal.cluster.gke.io/enable-workload-identity-cluster-authentication: "true"
    spec:
      type: admin
      profile: default
      anthosBareMetalVersion: 1.33.0-gke.799
      ...
    
  3. בתחנת העבודה של האדמין, מעדכנים את משתנה הסביבה GCP_ACCESS_TOKEN באמצעות אסימון גישה חדש שאוחזר:

    export GCP_ACCESS_TOKEN=$(gcloud auth application-default print-access-token)
    

    כברירת מחדל, משך החיים של טוקן הגישה הוא 3,600 שניות (שעה אחת). כשמשתמשים באימות אשכול של Workload Identity, ‏bmctl בודק את זמן התפוגה של הטוקן. אם תוקף האסימון יפוג תוך 1,800 שניות (30 דקות), bmctl ידווח על שגיאה וייסגר.

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

    bmctl configure projects --project-id=PROJECT_ID \
        --admin-cluster=ADMIN_CLUSTER_NAME
    
  5. מריצים את הפקודה bmctl create cluster כדי ליצור את אשכול האדמין.

1.30-1.32

ההבדל הבולט ביותר בהגדרת אשכולות שמשתמשים באימות אשכולות של Workload Identity הוא שלא מציינים נתיבים למפתחות של חשבונות שירות שהורדו.

  1. כשממלאים את הגדרות האשכול בקובץ התצורה, משאירים ריקים את הנתיבים של מפתחות חשבונות השירות בקטע של פרטי הכניסה, כמו בדוגמה הבאה:

    gcrKeyPath:
    sshPrivateKeyPath: /home/USERNAME/.ssh/id_rsa
    gkeConnectAgentServiceAccountKeyPath:
    gkeConnectRegisterServiceAccountKeyPath:
    cloudOperationsServiceAccountKeyPath:
    ---
    apiVersion: v1
    kind: Namespace
    metadata:
      name: cluster-ADMIN_CLUSTER_NAME
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: ADMIN_CLUSTER_NAME
      namespace: cluster-ADMIN_CLUSTER_NAME
    spec:
      type: admin
      profile: default
      anthosBareMetalVersion: 1.33.0-gke.799
      ...
    
  2. בתחנת העבודה של האדמין, יוצרים ומורידים מפתח לחשבון השירות admin-sa:

    המפתח הזה נדרש כדי לאשר את הגישה לחשבון השירות admin-sa, וצריך למחוק אותו מיד אחרי שחשבון השירות מקבל הרשאה.

    gcloud iam service-accounts keys create TMP_KEY_FILE_PATH \
        --iam-account=admin-sa@PROJECT_ID.iam.gserviceaccount.com
    

    מחליפים את TMP_KEY_FILE_PATH בנתיב של קובץ המפתח שהורדתם, כולל שם הקובץ.

  3. אישור הגישה אל Google Cloud באמצעות חשבון השירות admin-sa:

    gcloud auth activate-service-account admin-sa@PROJECT_ID.iam.gserviceaccount.com \
        --key-file=TMP_KEY_FILE_PATH
    
  4. מוחקים את קובץ המפתח בפורמט JSON שהורדתם:

    rm TMP_KEY_FILE_PATH
    

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

  5. בתחנת העבודה של האדמין, יוצרים משתנה סביבה של GCP_ACCESS_TOKEN עם הערך של אסימון הגישה שנוצר על ידי חשבון השירות admin-sa:

    export GCP_ACCESS_TOKEN=$(gcloud auth print-access-token \
        --impersonate-service-account=admin-sa@PROJECT_ID.iam.gserviceaccount.com)
    

    כברירת מחדל, משך החיים של טוקן הגישה הוא 3,600 שניות (שעה אחת).

  6. מריצים את הפקודה bmctl create cluster כדי ליצור את אשכול האדמין.

יצירת אשכול משתמשים

השלבים ליצירת אשכול אדמין שונים מעט בין גרסת טרום-ההשקה (Preview) (גרסאות 1.30 עד 1.32) לבין הגרסה הזמינה לכלל המשתמשים (גרסאות 1.33 ואילך). בשלבי ה-GA משתמשים בפקודה bmctl configure projects כדי להגדיר את איחוד שירותי אימות הזהות של עומסי עבודה באשכולות.

‫1.33 ואילך

  1. מוסיפים את ההערה baremetal.cluster.gke.io/enable-workload-identity-cluster-authentication: "true" לקובץ התצורה של האשכול:

    apiVersion: v1
    kind: Namespace
    metadata:
      name: cluster-USER_CLUSTER_NAME
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: USER_CLUSTER_NAME
      namespace: cluster-USER_CLUSTER_NAME
      annotations:
        baremetal.cluster.gke.io/enable-workload-identity-cluster-authentication: "true"
    spec:
      type: admin
      profile: default
      anthosBareMetalVersion: 1.33.0-gke.799
      ...
    

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

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

    export GCP_ACCESS_TOKEN=$(gcloud auth application-default print-access-token)
    

    כברירת מחדל, משך החיים של טוקן הגישה הוא 3,600 שניות (שעה אחת).

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

    bmctl configure projects --project-id=PROJECT_ID \
        --user-clusters=USER_CLUSTER_NAME
    
  4. משתמשים ב-kubectl כדי לפרוס את המניפסט של אשכול המשתמשים:

    kubectl apply -f USER_CLUSTER_CONFIG \
        --kubeconfig ADMIN_KUBECONFIG
    

מחליפים את מה שכתוב בשדות הבאים:

  • ‫USER_CLUSTER_CONFIG: הנתיב של קובץ התצורה של אשכול המשתמש.

  • ‫ADMIN_KUBECONFIG: הנתיב של קובץ ה-kubeconfig של אשכול האדמין.

1.30-1.32

  1. בתחנת העבודה של האדמין, יוצרים ומורידים מפתח לחשבון השירות admin-sa:

    המפתח הזה נדרש כדי לאשר את הגישה לחשבון השירות admin-sa, וצריך למחוק אותו מיד אחרי שחשבון השירות מקבל הרשאה.

    gcloud iam service-accounts keys create TMP_KEY_FILE_PATH \
        --iam-account=admin-sa@PROJECT_ID.iam.gserviceaccount.com
    

    מחליפים את TMP_KEY_FILE_PATH בנתיב של קובץ המפתח שהורדתם, כולל שם הקובץ.

  2. אישור הגישה אל Google Cloud באמצעות חשבון השירות admin-sa:

    gcloud auth activate-service-account admin-sa@PROJECT_ID.iam.gserviceaccount.com \
        --key-file=TMP_KEY_FILE_PATH
    
  3. מוחקים את קובץ המפתח בפורמט JSON שהורדתם:

    rm TMP_KEY_FILE_PATH
    

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

  4. בתחנת העבודה של האדמין, יוצרים משתנה סביבה של GCP_ACCESS_TOKEN עם הערך של אסימון הגישה שנוצר על ידי חשבון השירות admin-sa:

    export GCP_ACCESS_TOKEN=$(gcloud auth print-access-token \
        --impersonate-service-account=admin-sa@PROJECT_ID.iam.gserviceaccount.com)
    

    כברירת מחדל, משך החיים של טוקן הגישה הוא 3,600 שניות (שעה אחת).

  5. מריצים את הפקודה bmctl create cluster כדי ליצור את אשכול המשתמשים.

פעולות אחרות באשכולות

באשכולות שמשתמשים באימות אשכולות של Workload Identity, בפקודות הבאות של bmctl צריך להגדיר את משתנה הסביבה GCP_ACCESS_TOKEN לאסימון גישה פעיל ותקף:

  • bmctl configure projects
  • bmctl create cluster
  • bmctl register bootstrap
  • bmctl reset cluster
  • bmctl upgrade cluster

ב-bmctl register bootstrap אפשר להשתמש במשתנה הסביבה GCP_ACCESS_TOKEN לאימות של Workload Identity באשכול רק ב-Google Distributed Cloud מגרסה 1.34.0 ואילך. בגרסאות שקודמות ל-1.34.0, צריך להשתמש בקובצי מפתחות של חשבונות שירות כדי לאמת את bmctl register bootstrap.

אם bmctl מזהה שמשתנה הסביבה GCP_ACCESS_TOKEN הוגדר, הוא מבצע אימות של האסימון:

  • אם הטוקן תקין, bmctl משתמש בו לפעולות באשכול.

  • אם האסימון לא תקין, צריך לאחזר אסימון חדש:

    לטוקן הגישה יש תוקף קצר, ולכן בדרך כלל צריך ליצור אותו מחדש לפני שמריצים פקודות bmctl לפעולות באשכול, כמו יצירה, שדרוג או איפוס של אשכול. בתחנת העבודה של האדמין, מעדכנים את משתנה הסביבה GCP_ACCESS_TOKEN באמצעות אסימון גישה חדש שאוחזר:

    ‫1.33 ואילך

    export GCP_ACCESS_TOKEN=$(gcloud auth application-default print-access-token)
    

    1.30-1.32

    sh export GCP_ACCESS_TOKEN=$(gcloud auth print-access-token \ --impersonate-service-account=admin-sa@PROJECT_ID.iam.gserviceaccount.com)

    כברירת מחדל, משך החיים של טוקן הגישה הוא 3,600 שניות (שעה אחת). כשמשתמשים באימות אשכול של Workload Identity, ‏bmctl בודק את זמן התפוגה של הטוקן. אם תוקף האסימון יפוג תוך 1,800 שניות (30 דקות), bmctl ידווח על שגיאה וייסגר.

התאמה אישית

אתם יכולים להשתמש בחשבונות שירות עם שמות ייחודיים לאימות אשכולות של Workload Identity, כל עוד יש להם קישורים לתפקידים הנדרשים.

‫1.33 ואילך

כברירת מחדל, אימות אשכולות של Workload Identity באשכולות מגרסה 1.33 ואילך משתמש רק בחשבון השירות baremetal-gcr. לכן, זהו חשבון השירות היחיד שאפשר להתאים אישית.

  1. מוודאים שלחשבון השירות שבו רוצים להשתמש יש את התפקידים שמפורטים בטבלה בקטע לפני שמתחילים.

  2. מוסיפים הערה לקובץ התצורה של האשכול כדי לציין את השם בהתאמה אישית של חשבון השירות לאימות אשכולות של Workload Identity:

    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: my-cluster
      namespace: cluster-my-cluster
      annotations:
        ...
        baremetal.cluster.gke.io/gcr-service-account: "CUSTOM_AR_GSA"
    spec:
      type: admin
      profile: default
      anthosBareMetalVersion: 1.33.0-gke.799
      ...
    

מחליפים את CUSTOM_AR_GSA בשם האימייל של חשבון השירות שמשמש את Google Distributed Cloud להורדת קובצי אימג' של קונטיינרים מ-Artifact Registry.

1.30-1.32

  1. מוודאים שלחשבונות השירות שבהם רוצים להשתמש יש את התפקידים שמפורטים בטבלה בקטע לפני שמתחילים.

  2. מוסיפים הערות לקובץ התצורה של האשכול כדי לציין את השמות בהתאמה אישית של חשבונות השירות של Workload Identity Cluster Authentication:

    אם תציינו שמות בהתאמה אישית, תוכלו להשתמש בחשבונות שירות קיימים. חשוב לוודא שהשמות של חשבונות השירות בהתאמה אישית שאתם מציינים שונים זה מזה. אנחנו לא תומכים בשימוש בחשבון שירות אחד כדי להחליף שניים או יותר מחשבונות השירות שמוגדרים כברירת מחדל.

    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: my-cluster
      namespace: cluster-my-cluster
      annotations:
        ...
        baremetal.cluster.gke.io/controller-service-account: "CUSTOM_CONTROLLER_GSA"
        baremetal.cluster.gke.io/cloud-ops-service-account: "CUSTOM_CLOUD_OPS_GSA"
        baremetal.cluster.gke.io/gcr-service-account: "CUSTOM_AR_GSA"
    spec:
      type: admin
      profile: default
      anthosBareMetalVersion: 1.30.0-gke.1930
      ...
    

מחליפים את מה שכתוב בשדות הבאים:

  • ‫CUSTOM_CONTROLLER_GSA: שם האימייל של חשבון השירות שמשמש את Connect Agent כדי לשמור על החיבור בין האשכול לבין Google Cloud, ולרשום את האשכולות.

  • ‫CUSTOM_CLOUD_OPS_GSA: שם האימייל של חשבון השירות שמשמש את Stackdriver Agent לייצוא יומנים ומדדים מאשכולות ל-Cloud Logging ול-Cloud Monitoring.

  • ‫CUSTOM_AR_GSA: שם האימייל של חשבון השירות שמשמש את Google Distributed Cloud להורדת קובצי אימג' של קונטיינרים מ-Artifact Registry.

מגבלות

התכונות והיכולות הבאות לא נתמכות כשמשתמשים באימות אשכולות של Workload Identity לתוכנת Distributed Cloud לשרת פיזי בלבד:

  • שימוש בשרת proxy
  • VPC Service Controls
  • עדכון אשכולות קיימים במצב מבוסס-מפתח לשימוש באימות אשכולות של Workload Identity
  • ניהול מחזור החיים של אשכולות באמצעות לקוחות API של GKE On-Prem, כמו Google Cloud CLI,‏ Terraform או מסוף Google Cloud

המאמרים הבאים