תנאים לניהול הזהויות והרשאות הגישה (IAM) לכללי העברה

תנאי ניהול הזהויות והרשאות הגישה (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.

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