במאמר הזה מוסבר איך להגדיר ולהשתמש ב-Workload Identity Cluster Authentication ב-Google Distributed Cloud (תוכנה בלבד) בשרת Bare Metal. במקום מפתחות של חשבונות שירות, אימות של אשכולות Workload Identity משתמש באסימונים לטווח קצר ובאיחוד שירותי אימות הזהות של עומסי עבודה כדי ליצור את האשכולות ולאבטח אותם. פרטי הכניסה לטווח קצר לחשבון השירות הם בצורה של אסימוני גישה מסוג OAuth 2.0. כברירת מחדל, התוקף של אסימוני הגישה פג אחרי שעה אחת. באופן דומה, התוקף של אסימונים לשליפת תמונות פג אחרי שעה אחת כברירת מחדל.
לעומת זאת, במצב מבוסס-מפתח, השיטה הרגילה ליצירה ולאבטחה של אשכולות, נעשה שימוש במפתחות של חשבונות שירות שהורדו. כשיוצרים אשכול בניהול עצמי (אדמין, היברידי או עצמאי), מציינים את הנתיב למפתחות שהורדו. המפתחות מאוחסנים כסודות באשכול ובכל אשכול משתמש מנוהל. כברירת מחדל, למפתחות של חשבונות שירות אין תאריך תפוגה, והם עלולים לסכן את האבטחה אם לא מנהלים אותם בצורה נכונה. למידע על הגדרת זמן תפוגה למפתחות של חשבונות השירות, אפשר לעיין במאמר בנושא מועדי תפוגה של מפתחות בניהול משתמשים.
אימות אשכולות באמצעות Workload Identity מספק שני יתרונות עיקריים בהשוואה לשימוש במפתחות של חשבון שירות:
אבטחה משופרת: מפתחות של חשבונות שירות מהווים סיכון אבטחה אם לא מנהלים אותם בצורה נכונה. אסימוני OAuth 2.0 ואיחוד שירותי אימות הזהות של עומסי עבודה נחשבים לחלופות מומלצות למפתחות של חשבונות שירות. מידע נוסף על אסימונים של חשבון שירות זמין במאמר פרטי כניסה לטווח קצר לחשבון שירות. מידע נוסף על איחוד שירותי אימות הזהות של עומסי עבודה זמין במאמר איחוד שירותי אימות הזהות של עומסי עבודה.
פחות תחזוקה: מפתחות של חשבונות שירות דורשים יותר תחזוקה. החלפה ושמירה של המפתחות האלה באופן קבוע יכולות להיות משימה מנהלית מורכבת.
הגרסה הראשונה של אימות אשכולות של Workload Identity הייתה גרסת Preview, גרסה 1.30. הגרסה הזמינה לכולם (GA) היא גרסה 1.33 ואילך. אפשר להפעיל אימות של אשכולות Workload Identity רק כשיוצרים אשכולות חדשים. אי אפשר להגדיר אשכול קיים לשימוש באימות אשכולות של Workload Identity במהלך עדכון או שדרוג. הגבלות נוספות מפורטות במאמר בנושא מגבלות.
הדף הזה מיועד לאדמינים, לארכיטקטים ולמפעילים שמגדירים, מנטרים ומנהלים את מחזור החיים של התשתית הטכנולוגית הבסיסית. כדי לקבל מידע נוסף על תפקידים נפוצים ועל משימות לדוגמה שאנחנו מתייחסים אליהם בGoogle Cloud תוכן, אפשר לעיין במאמר תפקידים נפוצים של משתמשי GKE ומשימות.
לפני שמתחילים
בקטעים הבאים יוצרים חשבונות שירות ומקצים תפקידים שנדרשים לאימות של Workload Identity Cluster. ההוראות להגדרה שמופיעות במסמך הזה לא מחליפות את ההוראות שבמאמר הגדרת משאבים Google Cloud, אלא הן נדרשות בנוסף לדרישות המוקדמות הרגילות להתקנה של Google Distributed Cloud רק באמצעות תוכנה. חשבונות השירות שנדרשים לאימות של אשכולות עם Workload Identity דומים לחשבונות השירות שמתוארים במאמר הגדרת משאביGoogle Cloud , אבל יש להם שמות ייחודיים, כך שהם לא מפריעים לאשכולות שמשתמשים במפתחות ברירת המחדל של חשבונות השירות.
חשבונות השירות שנדרשים לאימות של אשכול Workload Identity שונים בגרסת התצוגה המקדימה ובגרסה הזמינה לכולם, כמו שמתואר בטבלה הבאה:
1.33 ואילך
| חשבון שירות | מטרה | תפקידים |
|---|---|---|
admin-sa |
משתמשים בחשבון השירות הזה כדי ליצור אסימונים. לכל אסימון יש את ההרשאות שמשויכות לתפקידים בחשבון השירות. |
roles/gkehub.adminroles/iam.serviceAccountAdminroles/iam.serviceAccountTokenCreatorroles/iam.workloadIdentityPoolAdmin*roles/logging.adminroles/monitoring.adminroles/resourcemanager.projectIamAdmin
|
baremetal-gcr |
Google Distributed Cloud משתמש בחשבון השירות הזה כדי להוריד קובצי אימג' של קונטיינרים מ-Artifact Registry. | ללא |
*תפקיד ה-IAM roles/iam.workloadIdentityPoolAdmin נדרש רק בגרסה 1.34 ואילך.
1.30-1.32
| חשבון שירות | מטרה | תפקידים |
|---|---|---|
admin-sa |
משתמשים בחשבון השירות הזה כדי ליצור אסימונים. לכל אסימון יש את ההרשאות שמשויכות לתפקידים בחשבון השירות. |
roles/gkehub.adminroles/iam.serviceAccountAdminroles/iam.serviceAccountTokenCreatorroles/logging.adminroles/monitoring.admin
|
baremetal-controller |
Connect Agent
משתמש בחשבון השירות הזה כדי לשמור על חיבור בין האשכול לבין
Google Cloud וכדי לרשום את האשכולות ב צי.
חשבון השירות הזה גם מרענן אסימונים עבור חשבון השירות baremetal-gcr.
|
roles/gkehub.adminroles/monitoring.dashboardEditorroles/serviceusage.serviceUsageViewer
|
baremetal-cloud-ops |
סוכן Stackdriver משתמש בחשבון השירות הזה כדי לייצא יומנים ומדדים מאשכולות אל Cloud Logging וCloud Monitoring. |
roles/kubernetesmetadata.publisherroles/logging.logWriterroles/monitoring.dashboardEditorroles/monitoring.metricWriterroles/monitoring.viewerroles/opsconfigmonitoring.resourceMetadata.writerroles/serviceusage.serviceUsageViewerroles/stackdriver.resourceMetadata.writer
|
baremetal-gcr |
Google Distributed Cloud משתמש בחשבון השירות הזה כדי להוריד קובצי אימג' של קונטיינרים מ-Artifact Registry. | ללא |
הגדרה של חשבונות שירות
בקטעים הבאים מפורטות הוראות ליצירת חשבונות השירות הנדרשים ולהקצאת התפקידים הדרושים להם לצורך אימות של אשכולות Workload Identity. בטבלה שבקטע הקודם מופיעה רשימה של חשבונות השירות והתפקידים הנדרשים שלהם.
יצירת חשבונות שירות
כדי ליצור את חשבונות השירות לאימות של Workload Identity Cluster, פועלים לפי השלבים הבאים:
בתחנת העבודה של האדמין, מתחברים אל Google Cloud CLI:
gcloud auth loginיוצרים את חשבונות השירות הנדרשים לאימות של Workload Identity Cluster:
השם של חשבון השירות
admin-saהוא שרירותי. אפשר לשנות את השם אם הוא גורם לקונפליקט בפרויקט. לחשבונות שירות אחרים לאימות אשכולות של Workload Identity יש שמות שנקבעו מראש, ואפשר להתאים אותם אישית אם רוצים.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
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 ואילך
מוסיפים קישורים בין תפקידים למדיניות 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
מוסיפים קישורים בין תפקידים למדיניות 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מוסיפים קישורים בין תפקידים למדיניות 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מוסיפים קישורים בין תפקידים למדיניות 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נותנים לחשבון השירות
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
מגדירים אימות
בשלבים הבאים מוגדר תהליך האימות שמשתמש בטוקן לטווח קצר כדי לאמת פעולות באשכול:
בתחנת העבודה של האדמין, מתחברים אל Google Cloud CLI:
gcloud auth loginבמחשב האדמין, יוצרים ומורידים מפתח עבור
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בנתיב, כולל שם הקובץ, של קובץ המפתח שהורד.במחשב של האדמין, יוצרים משתנה סביבה
GOOGLE_APPLICATION_CREDENTIALSעם הערך של מפתח חשבון השירות שהורד:export GOOGLE_APPLICATION_CREDENTIALS=TMP_KEY_FILE_PATHבתחנת העבודה של האדמין, יוצרים
GCP_ACCESS_TOKENמשתנה סביבה עם הערך של אסימון גישה שנוצר על ידי חשבון השירותadmin-sa:export GCP_ACCESS_TOKEN=$(gcloud auth application-default print-access-token)כברירת מחדל, משך החיים של אסימון הגישה הוא שעה אחת.
מוודאים שהאסימון נוצר על ידי חשבון השירות
admin-saעם תאריך התפוגה הנכון:curl "https://oauth2.googleapis.com/tokeninfo?access_token=$GCP_ACCESS_TOKEN"התגובה צריכה לכלול שורות שדומות לאלה:
... "exp": "1759512810", "expires_in": "3589", ...ערך התפוגה הוא בשניות, והוא צריך להיות קטן מ-
3600, מה שאומר שהאסימון יפוג תוך פחות משעה.
הגדרת איחוד שירותי אימות הזהות של עומסי העבודה באשכולות
כדי לספק גישה ל-GKE באמצעות איחוד זהויות של עומסי עבודה ל-GKE ב- Google Cloud , אתם יוצרים מדיניות הרשאה של 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 נמצא בתצוגה מקדימה, צריך להגדיר את איחוד שירותי אימות הזהות של עומסי עבודה עבור האשכולות באופן ידני, כמו שמתואר בקטעים הבאים.
הוספת קישורי מדיניות IAM לאופרטור של האשכול
הפקודות הבאות מעניקות לחשבון השירות של anthos-cluster-operator Kubernetes את היכולת להתחזות לחשבון השירות של baremetal-controller ולקיים אינטראקציה עם משאבי Google Cloud בשם האשכול:
לכל אשכול שהוגדר לאימות אשכולות באמצעות Workload Identity (או שמתוכנן להשתמש באימות אשכולות באמצעות Workload Identity), כולל אשכול האתחול, צריך להעניק ל-
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מחליפים את מה שכתוב בשדות הבאים:
PROJECT_NUM: המזהה הייחודי של הפרויקט שנוצר באופן אוטומטי.
REGION: המיקום של החברות בצי עבור האשכול, שהואglobalכברירת מחדל. מידע נוסף זמין במאמר בנושא מיקום החברות בצי.
CLUSTER_NAME: שם האשכול. כברירת מחדל, שם אשכול האתחול הואbmctl-MACHINE_NAME.
בודקים את קשרי המדיניות של חשבון השירות
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-logginggke-metrics-agentkubestore-collectormetadata-agentstackdriver-log-forwarder
לכל אשכול שהוגדר לאימות אשכולות באמצעות Workload Identity (או שמתוכנן להשתמש באימות אשכולות באמצעות Workload Identity), כולל אשכול האתחול, צריך להעניק לאופרטורים של 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בודקים את קשרי המדיניות של חשבון השירות
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
יצירת אשכול אדמין
השלבים ליצירת אשכול אדמין שונים מעט בגרסת התצוגה המקדימה (גרסאות 1.30 עד 1.32) ובגרסה הזמינה לכולם (GA) (גרסאות 1.33 ומעלה). בשלבים של GA נעשה שימוש בפקודה bmctl configure
projects כדי להגדיר איחוד זהויות של עומסי עבודה עבור האשכולות.
1.33 ואילך
ההבדל הכי ברור בתצורת האשכולות באשכולות שמשתמשים באימות אשכולות של Workload Identity הוא שלא מציינים נתיבים למפתחות של חשבונות שירות שהורדו.
כשממלאים את הגדרות האשכול בקובץ התצורה, משאירים את הנתיבים של מפתחות חשבון השירות ריקים בקטע של פרטי הכניסה, כמו בדוגמה הבאה:
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 ...מוסיפים את ההערה
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 ...בתחנת העבודה של האדמין, מעדכנים את משתנה הסביבה
GCP_ACCESS_TOKENבאמצעות אסימון גישה חדש שאוחזר:export GCP_ACCESS_TOKEN=$(gcloud auth application-default print-access-token)כברירת מחדל, משך החיים של אסימון הגישה הוא 3,600 שניות (שעה אחת). כשמשתמשים באימות של אשכולות עם Workload Identity,
bmctlבודק את זמן התפוגה של הטוקן. אם תוקף האסימון יפוג תוך 1,800 שניות (30 דקות),bmctlידווח על שגיאה ויסיים את הפעולה.מגדירים את האיחוד של Workload Identity עבור האשכול שיוצרים:
bmctl configure projects --project-id=PROJECT_ID \ --admin-cluster=ADMIN_CLUSTER_NAMEמריצים את הפקודה
bmctl create clusterכדי ליצור את אשכול האדמין.
1.30-1.32
ההבדל הכי ברור בתצורת האשכולות באשכולות שמשתמשים באימות אשכולות של Workload Identity הוא שלא מציינים נתיבים למפתחות של חשבונות שירות שהורדו.
כשממלאים את הגדרות האשכול בקובץ התצורה, משאירים את הנתיבים של מפתחות חשבון השירות ריקים בקטע של פרטי הכניסה, כמו בדוגמה הבאה:
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 ...במחשב האדמין, יוצרים ומורידים מפתח עבור
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בנתיב, כולל שם הקובץ, של קובץ המפתח שהורד.מתן הרשאת גישה אל Google Cloud באמצעות חשבון השירות
admin-sa:gcloud auth activate-service-account admin-sa@PROJECT_ID.iam.gserviceaccount.com \ --key-file=TMP_KEY_FILE_PATHמוחקים את קובץ מפתח ה-JSON שהורדתם:
rm TMP_KEY_FILE_PATHאסימון הגישה הוא לזמן קצר, ולכן בדרך כלל צריך ליצור אותו מחדש לפני שמריצים פקודות
bmctlלפעולות באשכול, כמו יצירה, שדרוג או איפוס של אשכול.בתחנת העבודה של האדמין, יוצרים
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 שניות (שעה אחת).
מריצים את הפקודה
bmctl create clusterכדי ליצור את אשכול האדמין.
יצירת אשכול משתמשים
השלבים ליצירת אשכול אדמין שונים מעט בגרסת התצוגה המקדימה (גרסאות 1.30 עד 1.32) ובגרסה הזמינה לכולם (GA) (גרסאות 1.33 ומעלה). בשלבים של GA נעשה שימוש בפקודה bmctl configure
projects כדי להגדיר איחוד זהויות של עומסי עבודה עבור האשכולות.
1.33 ואילך
מוסיפים את ההערה
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לפעולות באשכול, כמו יצירה, שדרוג או איפוס של אשכול.בתחנת העבודה של האדמין, מעדכנים את משתנה הסביבה
GCP_ACCESS_TOKENבאמצעות אסימון גישה חדש שאוחזר:export GCP_ACCESS_TOKEN=$(gcloud auth application-default print-access-token)כברירת מחדל, משך החיים של אסימון הגישה הוא 3,600 שניות (שעה אחת).
מגדירים את האיחוד של Workload Identity עבור האשכול שיוצרים:
bmctl configure projects --project-id=PROJECT_ID \ --user-clusters=USER_CLUSTER_NAMEמשתמשים בפקודה
kubectlכדי לפרוס את המניפסט של אשכול המשתמשים:kubectl apply -f USER_CLUSTER_CONFIG \ --kubeconfig ADMIN_KUBECONFIG
מחליפים את מה שכתוב בשדות הבאים:
USER_CLUSTER_CONFIG: הנתיב של קובץ התצורה של אשכול המשתמשים.
ADMIN_KUBECONFIG: הנתיב לקובץ kubeconfig של אשכול האדמין.
1.30-1.32
במחשב האדמין, יוצרים ומורידים מפתח עבור
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בנתיב, כולל שם הקובץ, של קובץ המפתח שהורד.מתן הרשאת גישה אל Google Cloud באמצעות חשבון השירות
admin-sa:gcloud auth activate-service-account admin-sa@PROJECT_ID.iam.gserviceaccount.com \ --key-file=TMP_KEY_FILE_PATHמוחקים את קובץ מפתח ה-JSON שהורדתם:
rm TMP_KEY_FILE_PATHאסימון הגישה הוא לזמן קצר, ולכן בדרך כלל צריך ליצור אותו מחדש לפני שמריצים פקודות
bmctlלפעולות באשכול, כמו יצירה, שדרוג או איפוס של אשכול.בתחנת העבודה של האדמין, יוצרים
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 שניות (שעה אחת).
מריצים את הפקודה
bmctl create clusterכדי ליצור את אשכול המשתמשים.
פעולות אחרות באשכול
במקרה של אשכולות שמשתמשים ב-Workload Identity Cluster Authentication, כדי להשתמש בפקודות bmctl הבאות צריך להגדיר את משתנה הסביבה GCP_ACCESS_TOKEN לאסימון גישה פעיל ותקין:
bmctl configure projectsbmctl create clusterbmctl register bootstrapbmctl reset clusterbmctl 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
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 Cluster, כל עוד יש להם קשרים לתפקידים הנדרשים.
1.33 ואילך
כברירת מחדל, אימות אשכולות באמצעות Workload Identity בגרסה 1.33 ואילך של אשכולות משתמש בbaremetal-gcr חשבון שירות בלבד. לכן, זהו חשבון השירות היחיד שאפשר להתאים אישית.
מוודאים שלחשבון השירות שבו רוצים להשתמש יש את התפקידים שמפורטים בטבלה שבקטע לפני שמתחילים.
מוסיפים הערות לקובץ התצורה של האשכול כדי לציין את השם המותאם אישית של חשבון השירות של 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/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
מוודאים שלחשבונות השירות שבהם רוצים להשתמש יש את התפקידים שמפורטים בטבלה שבקטע לפני שמתחילים.
מוסיפים הערות לקובץ התצורה של האשכול כדי לציין את השמות המותאמים אישית של חשבונות השירות של שירות האימות של Workload Identity Cluster:
הגדרת שמות בהתאמה אישית מאפשרת לכם להשתמש בחשבונות שירות קיימים. חשוב לוודא ששמות חשבונות השירות המותאמים אישית שאתם מציינים שונים זה מזה. אנחנו לא תומכים בשימוש בחשבון שירות יחיד כדי להחליף שניים או יותר מחשבונות השירות שמוגדרים כברירת מחדל.
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 Cluster Authentication ב-Google Distributed Cloud (תוכנה בלבד) בשרת פיזי:
- שימוש בשרת Proxy
- VPC Service Controls
- עדכון אשכולות קיימים במצב עם מפתח לשימוש באימות אשכולות של Workload Identity
- ניהול מחזור החיים של אשכולות באמצעות לקוחות GKE On-Prem API, כמו Google Cloud CLI, Terraform או מסוף Google Cloud