בארגונים גדולים, כדאי לאפשר לצוותים לנהל באופן עצמאי את כללי מדיניות ההרשאה של המשאבים שלהם. עם זאת, אם תאפשרו לחשבון משתמש להקצות או לבטל את כל תפקידי ה-IAM, אתם עלולים להגדיל משמעותית את סיכוני האבטחה.
אפשר להגדיר הגבלות על התפקידים שחשבון משתמש יכול להקצות ולבטל באמצעות תנאים של ניהול זהויות והרשאות גישה (IAM) ובאמצעות מאפיין ה-API iam.googleapis.com/modifiedGrantsByRole. ההגבלות האלו מאפשרות ליצור אדמיני IAM מוגבלים שיכולים לנהל את כללי מדיניות ההרשאה של הצוות שלהם, אבל רק בתוך הגבולות שהגדרתם.
לפני שמתחילים
Enable the Resource Manager API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.חשוב להכיר את המבנה של כללי מדיניות ההרשאה.
מומלץ להבין את התנאים של IAM.
ההרשאות הנדרשות
כדי לקבל את ההרשאות שדרושות ליצירת אדמיני IAM מוגבלים לפרויקט, לתיקייה או לארגון, צריך לבקש מהאדמין להקצות את תפקידי ה-IAM הבאים במשאב שרוצים ליצור בשבילו אדמין IAM מוגבל (פרויקט, תיקייה או ארגון):
-
כדי ליצור אדמין IAM מוגבל לפרויקט:
אדמין IAM בפרויקט (
roles/resourcemanager.projectIamAdmin) -
כדי ליצור אדמין IAM מוגבל לתיקייה:
אדמין תיקיות (
roles/resourcemanager.folderAdmin) -
כדי ליצור אדמין IAM מוגבל לפרויקט, לתיקייה או לארגון:
אדמין ארגונים (
roles/resourcemanager.organizationAdmin)
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
התפקידים המוגדרים מראש האלה מכילים את ההרשאות שדרושות ליצירת אדמיני IAM מוגבלים לפרויקט, תיקייה או ארגון. כדי לראות בדיוק אילו הרשאות נדרשות, אפשר להרחיב את הקטע ההרשאות הנדרשות:
ההרשאות הנדרשות
ההרשאות הבאות נדרשות כדי ליצור אדמיני IAM מוגבלים לפרויקט, תיקייה או ארגון:
-
כדי ליצור אדמין IAM מוגבל לפרויקט:
-
resourcemanager.projects.getIamPolicy -
resourcemanager.projects.setIamPolicy
-
-
כדי ליצור אדמין IAM מוגבל לתיקייה:
-
resourcemanager.folders.getIamPolicy -
resourcemanager.folders.setIamPolicy
-
-
כדי ליצור אדמין IAM מוגבל לארגון:
-
resourcemanager.organizations.getIamPolicy -
resourcemanager.organizations.setIamPolicy
-
יכול להיות שתקבלו את ההרשאות האלה באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש אחרים.
תרחישים נפוצים לדוגמה
בקטעים הבאים מוסבר איך להשתמש בהקצאת תפקידים מוגבלת כדי לאפשר ניהול בשירות עצמי של כללי מדיניות ההרשאה.
יצירת אדמינים מוגבלים ב-IAM
נבחן תרחיש שבו רוצים לאפשר למשתמש Noam לשמש כאדמין IAM מוגבל לפרויקט. אתם רוצים של-Noam תהיה אפשרות להקצות ולבטל רק את התפקידים 'אדמין App Engine' (roles/appengine.appAdmin) ו'צפייה App Engine' (roles/appengine.appViewer) לפרויקט.
כדי להעניק את היכולת המוגבלת, מקצים ל-Noam את התפקיד 'אדמין IAM בפרויקט' (roles/resourcemanager.projectIamAdmin). התפקיד 'אדמין IAM בפרויקט' מאפשר ל-Noam להקצות ולבטל תפקידי IAM, והתנאי מגביל את התפקידים ש-Noam יכול להקצות ולבטל:
{ "version": 3, "etag": "BwWKmjvelug=", "bindings": [ { "members": [ "user:owner@example.com" ], "role": "roles/owner" }, { "members": [ "user:noam@example.com" ], "role": "roles/resourcemanager.projectIamAdmin", "condition": { "title": "only_appengine_admin_viewer_roles", "description": "Only allows changes to role bindings with the App Engine Admin or Viewer roles", "expression": "api.getAttribute('iam.googleapis.com/modifiedGrantsByRole', []).hasOnly(['roles/appengine.appAdmin', 'roles/appengine.appViewer'])" } } ] }
קישור התפקיד המותנה מאפשר לנעם לבצע את הפעולות הבאות:
- הקצאת התפקיד 'אדמין App Engine' ו'צפייה App Engine' לפרויקט.
- ביטול התפקידים 'אדמין App Engine' ו'צפייה App Engine' לפרויקט.
- הוספה, הסרה או שינוי של תנאים לקישורי תפקידים ברמת הפרויקט שמקצים את התפקידים 'אדמין App Engine' ו'צפייה App Engine'.
- ביצוע פעולות אחרות שקיבלו הרשאות מהתפקיד'אדמין IAM בפרויקט' ושלא משנות את מדיניות ההרשאה של הפרויקט. לדוגמה, נועם יכול להשתמש בשיטה
projects.getIamPolicyכדי לקבל את מדיניות ההרשאה של הפרויקט.
קישור התפקיד המותנה לא מאפשר לנועם לבצע אף אחת מהפעולות הבאות:
- לשנות את כללי מדיניות ההרשאה למשאבים אחרים מלבד הפרויקט.
- הקצאת תפקידים שאינם 'אדמין App Engine' ו'צפייה App Engine'.
- ביטול תפקידים שאינם 'אדמין App Engine' ו'צפייה App Engine'.
- הוספה, הסרה ושינוי של תנאים של קישור תפקידים שלא מקצים את התפקידים 'אדמין App Engine' ו'צפייה App Engine'.
מתן הרשאה למשתמשים לנהל אדמינים מוגבלים ב-IAM
נבחן תרחיש שבו רוצים להפוך את המשתמשת Lila, לאדמין מוגבל ב-IAM בשביל הצוות שלה. רוצים ש-Lila תוכל להקצות ולבטל את התפקיד 'אדמין Compute' (roles/compute.admin) לפרויקט שלה.
עם זאת, רוצים גם לאפשר ל-Lila לבחור משתמשים אחרים שישמשו כאדמינים מוגבלים ב-IAM. במילים אחרות, אתם רוצים לאפשר ל-Lila לתת הרשאה למשתמשים אחרים להקצות ולבטל רק את התפקיד 'אדמין Compute'.
יכול להיות שחשבתם לפתור זאת באמצעות הקצאת התפקיד 'אדמין IAM בפרויקט' (roles/resourcemanager.projectIamAdmin) ל-Lila, ואז לתת לה את היכולת להקצות או לבטל את התפקיד הזה לאחרים. עם זאת, אם מקצים ל-Lila את התפקיד 'אדמין IAM בפרויקט', היא תוכל להסיר את התנאי מהתפקיד שלה ולהעניק לעצמה את היכולת להקצות או לבטל כל תפקיד IAM.
כדי למנוע את הסלמת ההרשאות (privilege escalation), אפשר במקום זאת ליצור קבוצה ב-Google, (iam-compute-admins), לאדמינים מוגבלים ב-IAM של הפרויקט. לאחר מכן, צריך להוסיף את Lila לקבוצה ולהפוך אותה למנהלת הקבוצה.
אחרי יצירת הקבוצה, מקצים לה את התפקיד 'אדמין IAM בפרויקט' (roles/resourcemanager.projectIamAdmin) עם תנאי. התפקיד 'אדמין IAM בפרויקט', מאפשר לחברי הקבוצה להקצות ולבטל תפקידי IAM, והתנאי מגביל את התפקידים שהם יכולים להקצות ולבטל:
{ "version": 3, "etag": "BwWKmjvelug=", "bindings": [ { "members": [ "user:owner@example.com" ], "role": "roles/owner" }, { "members": [ "group:iam-compute-admins@example.com" ], "role": "roles/resourcemanager.projectIamAdmin", "condition": { "title": "only_compute_admin_role", "description": "Only allows changes to role bindings for the Compute Admin role", "expression": "api.getAttribute('iam.googleapis.com/modifiedGrantsByRole', []).hasOnly(['roles/compute.admin'])" } } ] }
כחברה בקבוצה iam-compute-admins, Lila יכולה לבצע את הפעולות הבאות:
- להקצות את התפקיד 'אדמין Compute' לפרויקט, על-ידי הוספת קישור חדש לתפקיד או הוספת חשבון משתמש לקישור קיים לתפקיד.
- לבטל את התפקיד 'אדמין Compute' על-ידי הסרת קישור קיים לתפקיד, או להסיר חשבון משתמש מקישור קיים לתפקיד.
- לשנות את ההרשאות של התפקיד 'אדמין Compute' על-ידי הוספה, הסרה ושינוי של התנאים המצורפים לקישורים לתפקיד.
- לבצע פעולות אחרות שקיבלו הרשאות מהתפקיד'אדמין IAM בפרויקט', שלא משנות את מדיניות ההרשאה של הפרויקט. לדוגמה, היא יכולה להשתמש בשיטה
projects.getIamPolicyכדי לקבל את מדיניות ההרשאה של הפרויקט.
כמנהלת בקבוצה iam-compute-admins, Lila יכולה לאפשר למשתמשים אחרים להקצות או לבטל את התפקיד 'אדמין Compute' על-ידי הוספה שלהם לקבוצה iam-compute-admins.
Lila לא יכולה לבצע את הפעולות הבאות:
- לתת לעצמה את היכולת להקצות או לבטל תפקידים אחרים.
- לשנות את כללי מדיניות ההרשאה למשאבים אחרים מלבד הפרויקט.
- להקצות תפקידים שאינם 'אדמין Compute'.
- לבטל תפקידים שאינם 'אדמין Compute'.
- להוסיף, להסיר או לשנות תנאים לקישורי תפקידים שלא מקצים את התפקיד 'אדמין Compute'.
הגבלה של הקצאת תפקידים
בקטעים הבאים מוסבר איך לאפשר לחשבונות משתמשים להקצות או לבטל תפקידים מסוימים בלבד.
כתיבה של ביטוי תנאי כדי להגביל את הקצאת התפקידים
כדי להגביל את היכולת של חשבון משתמש להקצות תפקידים, כותבים ביטוי תנאי שמציין את התפקידים שחשבון משתמש יכול להקצות או לבטל.
צריך להשתמש בפורמט הבא לביטוי התנאי:
api.getAttribute('iam.googleapis.com/modifiedGrantsByRole', []).hasOnly(roles)
הביטוי הזה מבצע את הדברים הבאים:
מקבל את מאפיין ה-API
iam.googleapis.com/modifiedGrantsByRoleבאמצעות הפונקציהapi.getAttribute().לצורך בקשה להגדיר את מדיניות ההרשאה של משאב, המאפיין מכיל את שמות התפקידים מהקישורים שהבקשה משנה. לסוגים אחרים של בקשות, המאפיין לא מוגדר. במקרים האלו, הפונקציה תחזיר את ערך ברירת המחדל (
[]).משתמש בפונקציה
hasOnly()Common Expression Language (CEL) כדי להגדיר ולאכוף את התפקידים שמותר לחשבון המשתמש להקצות או לבטל.הקלט להפונקציה
hasOnly()הוא רשימה של התפקידים שמותר לחשבון המשתמש להקצות או לבטל. אם התפקידים במאפייןiam.googleapis.com/modifiedGrantsByRoleכלולים ברשימה הזו, הפונקציה מחזירהtrue. אחרת, הפונקציה מחזירהfalse.אם המאפיין
iam.googleapis.com/modifiedGrantsByRoleמכיל את ערך ברירת המחדל ([]), הפונקציה מחזירהtrueכי[]לא מכיל תפקידים שלא כלולים ברשימה.
כדי להתאים אישית את הביטוי, צריך להחליף את roles ברשימה של התפקידים שמותר לחשבון המשתמש להקצות או לבטל. לדוגמה, כדי לאפשר לחשבון המשתמש להקצות או לבטל רק את התפקידים 'עריכה ב-Pub/Sub' (roles/pubsub.editor) ו'פרסום הודעות ב-Pub/Sub' (roles/pubsub.publisher), צריך להשתמש בערך ['roles/pubsub.editor', 'roles/pubsub.publisher'].
אפשר לכלול עד 10 ערכים ברשימת התפקידים המותרים. כל הערכים האלו חייבים להיות קבועים של מחרוזות.
אופרטורים לוגיים להצהרות hasOnly()
אל תשתמשו באופרטורים && או || כדי לצרף כמה הצהרות hasOnly() בתנאי יחיד. אם כן, יכול להיות שבקשות להענקת או לביטול כמה תפקידים ייכשלו, גם אם לחשבון המשתמש יש הרשאה להעניק או לבטל את התפקידים האלה בנפרד.
לדוגמה, התנאי הבא:
api.getAttribute('iam.googleapis.com/modifiedGrantsByRole', [])
.hasOnly(['roles/pubsub.editor']) ||
api.getAttribute('iam.googleapis.com/modifiedGrantsByRole', [])
.hasOnly(['roles/pubsub.publisher'])
התנאי הזה מחזיר true אם בקשה מעניקה את התפקיד roles/pubsub.editor או את התפקיד roles/pubsub.publisher, אבל הוא מחזיר false אם בקשה מעניקה גם את התפקיד roles/pubsub.editor וגם את התפקיד roles/pubsub.publisher.
הגבלת הקצאת תפקידים באמצעות קישורי תפקידים מותנים
כדי לאפשר לחשבון משתמש להקצות או לבטל רק תפקידים מסוימים, משתמשים בביטוי התנאי מהקטע הקודם כדי ליצור קישור תפקיד מותנה. לאחר מכן מוסיפים את קישור התפקיד המותנה למדיניות ההרשאה של המשאב.
צריך לבחור משאב שמייצג את ההיקף שבו רוצים לאפשר לחשבון משתמש להקצות תפקידים ולבטל אותם:
- אם רוצים לתת לחשבון משתמש הרשאה להקצות ולבטל תפקידים מסוימים לכל המשאבים בתוך ארגון, צריך לבחור ארגון.
- אם רוצים לאפשר לחשבון משתמש להקצות ולבטל תפקידים מסוימים לכל המשאבים בתוך תיקייה, צריך לבחור תיקייה.
- אם רוצים לאפשר לחשבון משתמש להקצות ולבטל תפקידים מסוימים בכל המשאבים בתוך פרויקט, צריך לבחור פרויקט.
בוחרים תפקיד שמאפשר לחשבון המשתמש להגדיר את מדיניות ההרשאה לסוג המשאב שבחרתם (פרויקט, תיקייה או ארגון). כדי לשמור על העיקרון של הרשאות מינימליות, אפשר לבחור באחד מהתפקידים המוגדרים מראש הבאים:
- פרויקטים: אדמין IAM בפרויקט (
roles/resourcemanager.projectIamAdmin) - תיקיות: אדמין IAM בתיקיה (
roles/resourcemanager.folderIamAdmin) ארגונים: אדמין ארגוני (
roles/resourcemanager.organizationAdmin).
לחלופין, בוחרים תפקיד בהתאמה אישית שכולל את ההרשאות
resourcemanager.resource-type.setIamPolicyו-resourcemanager.resource-type.getIamPolicy, שבהםresource-typeהואproject,folderאוorganization.- פרויקטים: אדמין IAM בפרויקט (
מקצים לחשבון המשתמש את התפקיד שבחרתם בפרויקט, בתיקייה או בארגון שבחרתם באופן מותנה.
המערכת מחילה את מדיניות ההרשאה החדשה, וחשבון המשתמש יכול לשנות את הקישורים רק לתפקידים שאישרתם.
המסוף
נכנסים לדף IAM במסוף Google Cloud .
מוודאים ששם הפרויקט, התיקייה או הארגון מופיע בבורר המשאבים שבראש הדף. באמצעות בורר המשאבים, אפשר לראות באיזה פרויקט, תיקייה או ארגון אתם עובדים כרגע.
אם שם המשאב לא מופיע, לוחצים על בורר המשאבים ובוחרים את המשאב.
ברשימת חשבונות המשתמשים, מאתרים את חשבון המשתמש שמקצה את התפקידים ומבטל אותם, ואז לוחצים על .
בחלונית Edit permissions, בוחרים את התפקיד שבחרתם קודם לכן. לאחר מכן, בקטע IAM condition (optional), לוחצים על Add IAM condition.
בחלונית Edit condition מזינים שם לתנאי, ואפשר גם להזין תיאור שלו.
לוחצים על הכרטיסייה Condition editor ומזינים את הביטוי שכתבתם בקטע כתיבה של ביטוי תנאי כדי להגביל את הקצאת התפקידים. הביטוי מגביל את התפקידים שחשבון המשתמש יכול להקצות או לבטל.
לדוגמה, ביטוי התנאי הבא מגביל את חשבון המשתמש בהקצאה או ביטול של התפקידים 'עריכה ב-Pub/Sub' (
roles/pubsub.editor) ו'פרסום הודעות ב-Pub/Sub' (roles/pubsub.publisher):api.getAttribute('iam.googleapis.com/modifiedGrantsByRole', []).hasOnly(['roles/pubsub.editor', 'roles/pubsub.publisher'])אזהרה: אסור לכלול את סוגי התפקידים הבאים ברשימת התפקידים המותרים:
-
תפקידים עם הרשאות להקצות ולבטל תפקידי IAM (כלומר, תפקידים עם שמות הרשאות שמסתיימים ב-
setIamPolicy). -
תפקידים בהתאמה אישית שאדמין IAM מוגבל יכול לשנות. לדוגמה, אם לאדמין IAM המוגבל יש גם תפקיד 'אדמין' (
roles/iam.roleAdmin) בפרויקט, אסור לאפשר לו להקצות או לבטל תפקידים בהתאמה אישית ברמת הפרויקט.
אדמיני IAM מוגבלים שיכולים להקצות או לבטל את סוגי התפקידים האלו יכולים להעניק לעצמם הרשאה להקצות ולבטל את כל התפקידים ב-IAM. מידע נוסף מופיע בקטע כתיבה של ביטוי תנאי כדי להגביל את הקצאת התפקידים.
-
תפקידים עם הרשאות להקצות ולבטל תפקידי IAM (כלומר, תפקידים עם שמות הרשאות שמסתיימים ב-
לוחצים על Save כדי להחיל את התנאי.
לאחר סגירת החלונית Edit condition, לוחצים על Save בחלונית Edit permissions כדי לעדכן את מדיניות ההרשאה.
gcloud
כללי מדיניות ההרשאה מוגדרים באמצעות התבנית קריאה-שינוי-כתיבה.
קודם כל צריך לקרוא את מדיניות ההרשאה למשאב:
מפעילים את הפקודה
get-iam-policy. הפקודה הזו מקבלת את מדיניות ההרשאה הנוכחית של המשאב.פקודה:
gcloud resource-type get-iam-policy resource-id --format=json > path
מחליפים את הערכים הבאים:
-
resource-type: סוג המשאב שאתם רוצים לאפשר לחשבון משתמש להקצות או לבטל תפקידים בשבילו. צריך להשתמש באחת מהאפשרויות הבאות:projects,resource-manager foldersאוorganizations. -
resource-id: מזהה הפרויקט, התיקייה או הארגון ב- Google Cloud . -
path: נתיב הקובץ שאליו צריך להוריד את מדיניות ההרשאה.
מדיניות ההרשאה נשמרת בפורמט JSON, לדוגמה:
{ "bindings": [ { "members": [ "user:project-owner@example.com" ], "role": "roles/owner" } ], "etag": "BwWKmjvelug=", "version": 1 }לאחר מכן, משנים את מדיניות ההרשאה.
כדי לאפשר לחשבון המשתמש לשנות רק קישורים שמוגדרים לתפקידים מסוימים, צריך להוסיף את קישור התפקידים המותנה שמודגש:
{ "bindings": [ { "members": [ "user:owner@example.com" ], "role": "roles/owner" }, { "members": [ "principal" ], "role": "role", "condition": { "title": "title", "description": "description", "expression": "expression" } } ], "etag": "BwWKmjvelug=", "version": 3 }מחליפים את הערכים הבאים:
-
principal: חשבון המשתמש שיקצה או יבטל תפקידים מסוימים. לדוגמה,user:my-user@example.com. כדי לראות את הפורמטים של כל סוג חשבון משתמש, אפשר לעיין במאמר מזהים של חשבונות משתמשים. -
role: התפקיד שבחרתם בשלבים הקודמים. התפקיד חייב לכלול את ההרשאהsetIamPolicyלסוג המשאב שבחרתם. -
title: מחרוזת שמתארת בקצרה את התנאי. לדוגמה:only_pubsub_roles. -
description: אופציונלי. תיאור נוסף של התנאי. לדוגמה:Only allows granting/revoking the Pub/Sub editor and publisher roles.
expression: הביטוי שכתבתם בקטע כתיבה של ביטוי תנאי כדי להגביל את הקצאת התפקידים. הביטוי מגביל את התפקידים שחשבון המשתמש יכול להקצות או לבטל.לדוגמה, ביטוי התנאי הבא מגביל את חשבון המשתמש בהקצאה או ביטול של התפקידים 'עריכה ב-Pub/Sub' (
roles/pubsub.editor) ו'פרסום הודעות ב-Pub/Sub' (roles/pubsub.publisher):api.getAttribute('iam.googleapis.com/modifiedGrantsByRole', []).hasOnly(['roles/pubsub.editor', 'roles/pubsub.publisher'])אזהרה: אסור לכלול את סוגי התפקידים הבאים ברשימת התפקידים המותרים:
-
תפקידים עם הרשאות להקצות ולבטל תפקידי IAM (כלומר, תפקידים עם שמות הרשאות שמסתיימים ב-
setIamPolicy). -
תפקידים בהתאמה אישית שאדמין IAM מוגבל יכול לשנות. לדוגמה, אם לאדמין IAM המוגבל יש גם תפקיד 'אדמין' (
roles/iam.roleAdmin) בפרויקט, אסור לאפשר לו להקצות או לבטל תפקידים בהתאמה אישית ברמת הפרויקט.
אדמיני IAM מוגבלים שיכולים להקצות או לבטל את סוגי התפקידים האלו יכולים להעניק לעצמם הרשאה להקצות ולבטל את כל התפקידים ב-IAM. מידע נוסף מופיע בקטע כתיבה של ביטוי תנאי כדי להגביל את הקצאת התפקידים.
-
תפקידים עם הרשאות להקצות ולבטל תפקידי IAM (כלומר, תפקידים עם שמות הרשאות שמסתיימים ב-
לבסוף, כותבים את מדיניות ההרשאה המעודכנת:
כדי להגדיר את מדיניות ההרשאה החדשה, צריך להפעיל את הפקודה
set-iam-policyלמשאב:gcloud resource-type set-iam-policy resource-id path
מחליפים את הערכים הבאים:
-
resource-type: סוג המשאב שאתם רוצים לאפשר לחשבון משתמש להקצות או לבטל תפקידים בשבילו. צריך להשתמש באחת מהאפשרויות הבאות:projects,resource-manager foldersאוorganizations. -
resource-id: מזהה הפרויקט, התיקייה או הארגון ב- Google Cloud . -
path: נתיב לקובץ שמכיל את מדיניות ההרשאה המעודכנת.
המערכת מחילה את מדיניות ההרשאה החדשה, וחשבון המשתמש יוכל לשנות את הקישורים רק לתפקידים שאישרתם.
REST
כללי מדיניות ההרשאה מוגדרים באמצעות התבנית קריאה-שינוי-כתיבה.
קודם כל צריך לקרוא את מדיניות ההרשאה למשאב:
השיטה 'ממשק ה-API של מנהל המשאבים' (
getIamPolicy) מקבלת את מדיניות ההרשאה של פרויקט, תיקייה או ארגון.לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
-
API_VERSION: גרסת ה-API שבה ייעשה שימוש. לפרויקטים ולארגונים, צריך להשתמש ב-v1. לתיקיות, צריך להשתמש ב-v2. -
RESOURCE_TYPE: סוג המשאב שאת המדיניות שלו רוצים לנהל. אפשר להשתמש ב-projects, ב-foldersאו ב-organizations. -
RESOURCE_ID: מזהה הפרויקט, הארגון או התיקייה ב- Google Cloud. מזהי פרויקטים הם מחרוזות אלפאנומריות, כמוmy-project. מזהי תיקיות וארגונים מכילים רק ספרות, למשל123456789012. -
POLICY_VERSION: הגרסה של המדיניות שתוחזר. בבקשות צריך לציין את הגרסה הכי עדכנית של המדיניות (3). פרטים נוספים מופיעים במאמר ציון גרסת מדיניות בזמן אחזור מדיניות.
ה-method של ה-HTTP וכתובת ה-URL:
POST https://cloudresourcemanager.googleapis.com/API_VERSION/RESOURCE_TYPE/RESOURCE_ID:getIamPolicy
תוכן בקשת JSON:
{ "options": { "requestedPolicyVersion": POLICY_VERSION } }כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:
התשובה תכיל את מדיניות ההרשאות של המשאב. לדוגמה:
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/owner", "members": [ "user:my-user@example.com" ] } ] }לאחר מכן, משנים את מדיניות ההרשאה.
אפשר להוסיף קישור תפקיד מותנה שמאפשר לחשבון המשתמש להקצות ולבטל רק תפקידים מסוימים. חשוב לוודא ששיניתם את הערך בשדה
versionל-3:{ "version": 3, "etag": "BwWKmjvelug=", "bindings": [ { "members": [ "user:owner@example.com" ], "role": "roles/owner" }, { "members": [ "PRINCIPAL" ], "role": "ROLE", "condition": { "title": "TITLE", "description": "DESCRIPTION", "expression": "EXPRESSION" } } ] }-
PRINCIPAL: חשבון המשתמש שיקצה או יבטל תפקידים מסוימים. לדוגמה,user:my-user@example.com. כדי לראות את הפורמטים של כל סוג חשבון משתמש, אפשר לעיין במאמר מזהים של חשבונות משתמשים. -
ROLE: התפקיד שבחרתם בשלבים הקודמים. התפקיד חייב לכלול את ההרשאהsetIamPolicyלסוג המשאב שבחרתם. -
TITLE: מחרוזת שמתארת בקצרה את התנאי. לדוגמה:only_pubsub_roles. -
DESCRIPTION: אופציונלי. תיאור נוסף של התנאי. לדוגמה:Only allows granting/revoking the Pub/Sub editor and publisher roles.
EXPRESSION: הביטוי שכתבתם בקטע כתיבה של ביטוי תנאי כדי להגביל את הקצאת התפקידים. הביטוי מגביל את התפקידים שחשבון המשתמש יכול להקצות או לבטל.לדוגמה, ביטוי התנאי הבא מגביל את חשבון המשתמש בהקצאה או ביטול של התפקידים 'עריכה ב-Pub/Sub' (
roles/pubsub.editor) ו'פרסום הודעות ב-Pub/Sub' (roles/pubsub.publisher):api.getAttribute('iam.googleapis.com/modifiedGrantsByRole', []).hasOnly(['roles/pubsub.editor', 'roles/pubsub.publisher'])אזהרה: אסור לכלול את סוגי התפקידים הבאים ברשימת התפקידים המותרים:
-
תפקידים עם הרשאות להקצות ולבטל תפקידי IAM (כלומר, תפקידים עם שמות הרשאות שמסתיימים ב-
setIamPolicy). -
תפקידים בהתאמה אישית שאדמין IAM מוגבל יכול לשנות. לדוגמה, אם לאדמין IAM המוגבל יש גם תפקיד 'אדמין' (
roles/iam.roleAdmin) בפרויקט, אסור לאפשר לו להקצות או לבטל תפקידים בהתאמה אישית ברמת הפרויקט.
אדמיני IAM מוגבלים שיכולים להקצות או לבטל את סוגי התפקידים האלו יכולים להעניק לעצמם הרשאה להקצות ולבטל את כל התפקידים ב-IAM. מידע נוסף מופיע בקטע כתיבה של ביטוי תנאי כדי להגביל את הקצאת התפקידים.
-
תפקידים עם הרשאות להקצות ולבטל תפקידי IAM (כלומר, תפקידים עם שמות הרשאות שמסתיימים ב-
לבסוף, כותבים את מדיניות ההרשאה המעודכנת:
השיטה 'ממשק ה-API של מנהל המשאבים' (
setIamPolicy) קובעת את מדיניות ההרשאה בבקשה כמדיניות ההרשאה החדשה לפרויקט, לתיקייה או לארגון.לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הערכים בשדות הבאים:
-
API_VERSION: גרסת ה-API שבה ייעשה שימוש. לפרויקטים ולארגונים, צריך להשתמש ב-v1. לתיקיות, צריך להשתמש ב-v2. -
RESOURCE_TYPE: סוג המשאב שאת המדיניות שלו רוצים לנהל. אפשר להשתמש ב-projects, ב-foldersאו ב-organizations. -
RESOURCE_ID: מזהה הפרויקט, הארגון או התיקייה ב- Google Cloud. מזהי פרויקטים הם מחרוזות אלפאנומריות, כמוmy-project. מזהי תיקיות וארגונים מכילים רק ספרות, למשל123456789012. -
POLICY: ייצוג ב-JSON של המדיניות שרוצים להגדיר. מידע נוסף על הפורמט של מדיניות מופיע בחומר העזר בנושא מדיניות.לדוגמה, כדי להגדיר את המדיניות שמופיעה בשלב הקודם, מחליפים את הערך בשדה
POLICYכך:{ "version": 3, "etag": "BwWKmjvelug=", "bindings": [ { "members": [ "user:owner@example.com" ], "role": "roles/owner" }, { "members": [ "principal" ], "role": "role", "condition": { "title": "title", "description": "description", "expression": "expression" } } ] }
שיטת ה-HTTP וכתובת ה-URL:
POST https://cloudresourcemanager.googleapis.com/API_VERSION/RESOURCE_TYPE/RESOURCE_ID:setIamPolicy
תוכן בקשת JSON:
{ "policy": POLICY }כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:
התגובה מכילה את מדיניות ההרשאה המעודכנת.
המאמרים הבאים
- אכיפת העיקרון של הרשאות מינימליות באמצעות המלצות לתפקידים.
- מידע על שימוש בתנאי IAM כדי לבצע הגדרת גישה זמנית והגדרת גישה מבוססת משאבים.