תנאי ניהול הזהויות והרשאות הגישה (IAM) מאפשרים לכם להגדיר מדיניות IAM עם הרשאות מותנות. אתם מציינים את התנאים בקישורי התפקידים של מדיניות ה-IAM של המשאב. אם קיים תנאי, התפקיד מוענק רק אם ביטוי התנאי שווה ל-true. כל אחד מביטויי התנאי הוא קבוצה של הצהרות לוגיות שמאפשרות לכם לציין מאפיין אחד או יותר. מידע נוסף מופיע במאמר הסבר על מאפיינים לתנאים ב-IAM.
כשמשתמשים בתנאי IAM עם Cloud Load Balancing, אפשר להעניק באופן מותנה תפקידים מוגדרים מראש – כמו אדמין של איזון עומסים או אדמין של רשת – או תפקידים בהתאמה אישית.
תנאי IAM תומכים בביטוי תנאי לבדיקת סכימת איזון העומסים של כלל העברה. לדוגמה, אתם יכולים להעניק לישות מורשית ב-IAM את היכולת ליצור מאזני עומסים פנימיים, אבל לא חיצוניים. אם יש ניסיון ליצור כלל העברה למאזן עומסים חיצוני על ידי חשבון ראשי של IAM,Google Cloud הפעולה נדחית ומוחזרת שגיאה כמו זו שמוצגת בהמשך:
ERROR: (gcloud.compute.forwarding-rules.create) Could not fetch resource: - Required 'compute.forwardingRules.create' permission for 'projects/PROJECT_ID/regions/REGION/forwardingRules/FORWARDING_RULE_NAME'
שימוש בתנאי IAM ב Google Cloud מאזני עומסים
סכמת איזון העומסים של כלל העברה קובעת את הסוג או הסוגים של מאזן העומסים שיכולים להשתמש בכלל ההעברה. במילים אחרות, סכמת איזון העומסים תואמת לסוג מאזן העומסים, כפי שמוצג בטבלה הבאה.
תנאי IAM משפיעים גם על העברת פרוטוקולים ועל שערים של VPN קלאסי.| סכמת איזון עומסים | תיאור |
|---|---|
| חיצוני |
מאזן עומסים קלאסי של אפליקציות (ALB) מאזן עומסי רשת קלאסי בשרת proxy מאזן עומסי רשת חיצוני להעברת סיגנל ללא שינוי |
| EXTERNAL_MANAGED |
מאזן עומסים גלובלי חיצוני של אפליקציות (ALB) מאזן עומסי רשת גלובלי חיצוני בשרת proxy מאזן עומסים חיצוני אזורי של אפליקציות (ALB) מאזן עומסי רשת אזורי חיצוני בשרת proxy |
| פנימי | מאזן עומסי רשת פנימי להעברת סיגנל ללא שינוי |
| INTERNAL_MANAGED | מאזן עומסים פנימי אזורי של אפליקציות (ALB) מאזן עומסי רשת פנימי אזורי בשרת proxy מאזן עומסים פנימי חוצה-אזורים של אפליקציות (ALB) מאזן עומסי רשת פנימי חוצה-אזורים בשרת proxy |
| INTERNAL_SELF_MANAGED | Cloud Service Mesh |
מציינים את השדה loadBalancingScheme כשיוצרים את מאזן העומסים.
אם מסמנים את השדה loadBalancingScheme בתנאי IAM, אפשר לתת לחשבונות משתמשים את היכולת ליצור סוגים מסוימים של מאזני עומסים.
ציון תנאים ב-IAM
אפשר להגדיר קישורי תפקידים מותנים באמצעות אותה שיטה של setIamPolicy שבה משתמשים כדי להגדיר קישורי תפקידים אחרים. כדי להגדיר קישור תפקיד עם תנאי בפרויקט, אפשר להשתמש ב-API בארכיטקטורת REST, בכלי gcloud של שורת הפקודה או בדף IAM במסוף Google Cloud .
מידע נוסף מופיע במאמר בנושא ניהול מדיניות מותנית.
דוגמאות לביטויי תנאים לאיזון עומסים
ביטוי התנאי הבא, שאפשר להשתמש בו במדיניות IAM, מאפשר בקשת API רק אם אחד מהתנאים הבאים מתקיים:
- הבקשה לא כוללת יצירה של כלל העברה.
הבקשה היא ליצור כלל העברה שיש לו אחת מסכמות איזון העומסים הפנימיות.
!compute.isForwardingRuleCreationOperation() || ( compute.isForwardingRuleCreationOperation() && compute.matchLoadBalancingSchemes(['INTERNAL', 'INTERNAL_MANAGED']) )
סכמת איזון העומסים EXTERNAL מושמטת.
אם חשבון משתמש ינסה ליצור כלל העברה עם סכמת איזון העומסים EXTERNAL, תופיע הודעת שגיאה לגבי הרשאות.
מדיניות לדוגמה
במדיניות ה-IAM לדוגמה הזו לפרויקט, חשבון המשתמש jane@example.com מקבל את התפקיד המוגדר מראש 'אדמין של מאזן עומסים', ללא היכולת ליצור מאזני עומסים חיצוניים (כי סכמת איזון העומסים EXTERNAL לא נכללת). jane@example.com
יכול ליצור מאזני עומסים פנימיים, ויכול לנהל, לשנות ולמחוק כל מאזן עומסים.
{
"bindings": [
{
"role": "roles/compute.loadBalancerAdmin",
"members": ["user:jane@example.com"],
"condition": {
"title": "only_internal_lb_schemes",
"description": "Internal LB creation only permitted",
"expression": "
!compute.isForwardingRuleCreationOperation() || (
compute.isForwardingRuleCreationOperation() &&
compute.matchLoadBalancingSchemes(['INTERNAL', 'INTERNAL_MANAGED'])
)
"
}
}
]
}
מתן הרשאות לחשבון השירות של GKE לסוגים ספציפיים של כללי העברה
אפשר גם להשתמש בתנאים של IAM כדי להגביל את הגישה לחשבון השירות של GKE, כך שניתן יהיה ליצור רק סוגים מסוימים של כללי העברה.
בדוגמה הבאה בפורמט JSON מוצגת מדיניות IAM מלאה להענקת התפקיד סוכן שירות של Kubernetes Engine לחשבון השירות של GKE (service-PROJECT_ID@container-engine-robot.iam.gserviceaccount.com). התפקיד הזה מאפשר לחשבון השירות ליצור, לשנות ולמחוק רכיבים של איזון עומסים, למעט כללי העברה חיצוניים.
באמצעות ההרשאה המותנית הזו, חשבון השירות של GKE יכול ליצור רק כללי העברה פנימיים חדשים, אבל הוא יכול לנהל את כל כללי ההעברה הקיימים.
{
"bindings": [
{
"role": "roles/container.serviceAgent",
"members": ["serviceAccount:service-<var>PROJECT_ID</var>@container-engine-robot.iam.gserviceaccount.com"],
"condition": {
"title": "only_internal_lb_schemes",
"description": "Internal LB Creation Only Permitted",
"expression": "(
compute.isForwardingRuleCreationOperation()
&&
compute.matchLoadBalancingSchemes(['INTERNAL', 'INTERNAL_MANAGED'])
)
||
!compute.isForwardingRuleCreationOperation()
"
}
}
]
}
אם לא הוענקו הרשאות אחרות, ניסיון ליצור שירות GKE חדש מסוג LoadBalancer, בלי ההערה לגבי מאזן עומסי רשת פנימי להעברת סיגנל ללא שינוי, יגרום להצגת הודעת שגיאה כמו הבאה:
Error creating load balancer (will retry): failed to ensure load balancer for service default/SERVICE-NAME: failed to create forwarding rule for load balancer (a01d427111c7011ea96e142010a80006(default/SERVICE-NAME)): googleapi: Error 403: Required 'compute.forwardingRules.create' permission for 'projects/PROJECT_ID/regions/[region]/forwardingRules/FORWARDING_RULE_NAME', forbidden
בנוסף, בלי הרשאות אחרות, ניסיון ליצור אובייקט Ingress חדש גורם להודעת שגיאה דומה, כי בקר Cloud Load Balancing Ingress צריך ליצור מאזן עומסים חיצוני של אפליקציות.
אפשר לראות את הודעות השגיאה של GKE באמצעות הפקודות kubectl describe ו-kubectl get events -w.