כללי מדיניות הדחייה של ניהול זהויות והרשאות גישה (IAM) מאפשרים לכם להגדיר שכבות הגנה על הגישה למשאבים שלGoogle Cloud . בעזרת כללי מדיניות הדחייה אפשר להגדיר כללי דחייה שמונעים מחשבונות משתמשים מסוימים להשתמש בהרשאות מסוימות, ללא קשר לתפקידים שהוקצו להם.
בדף הזה תוכלו לקרוא סקירה כללית של כללי מדיניות הדחייה ושל כללי הדחייה. למידע על דרכים ליצור כללי מדיניות דחייה ולעדכן אותם, אפשר לעיין במאמר דחיית הגישה למשאבים.
הסבר על כללי מדיניות הדחייה
כללי מדיניות הדחייה מורכבים מכללי דחייה. כל כלל דחייה מפרט את הפרטים הבאים:
- קבוצה של חשבונות משתמשים שמונעים מהם הרשאות
- ההרשאות של חשבונות המשתמשים נדחות או שאי אפשר להשתמש בהן
- אופציונלי: התנאי שחייב להתקיים כדי שההרשאה תידחה
כאשר הרשאה של חשבון משתמש נדחית, החשבון לא יכול לבצע שום פעולה שמחייבת את ההרשאה הזו, ללא קשר לתפקידי IAM שהוקצו לו. הסיבה לכך היא ש-IAM תמיד בודק את כללי מדיניות הדחייה הרלוונטיים לפני שהוא בודק את כללי מדיניות ההרשאה הרלוונטיים. לפרטים נוספים, אפשר לעיין בקטע הערכת מדיניות.
כדי לציין את המקום שבו רוצים להחיל מדיניות דחייה, מצרפים אותה לפרויקט, לתיקייה או לארגון. כאשר מדיניות הדחייה מצורפת לאחד מהמשאבים האלו, חשבונות המשתמש במדיניות לא יכולים להשתמש בהרשאות שצוינו כדי לגשת למשאב, או לצאצאים של המשאב. בקטע הזה בדף הזה מוסבר איפה אפשר לצרף מדיניות דחייה.
אפשר לצרף כמה כללי מדיניות דחייה למשאב אחד. כך אפשר ליצור כללי מדיניות דחייה נפרדים לסוגים שונים של כללי דחייה. לדוגמה, אפשר להחיל כללי דחייה מסוימים שקשורים לתאימות במדיניות אחת, ולאחר מכן להשתמש במדיניות אחרת בשביל כללי דחייה אחרים. כל מדיניות דחייה מוערכת בנפרד מכל כללי מדיניות דחייה אחרת.
לכל משאב יכולים להיות עד 500 כללי מדיניות דחייה. ביחד, כללי מדיניות הדחייה האלה יכולים להכיל בסך הכול 500 כללי דחייה.
נקודת צירוף
כל מדיניות דחייה מצורפת לארגון, לתיקייה או לפרויקט. כשמצרפים מדיניות דחייה לאחד מהמשאבים האלה, היא עוברת בירושה לכל המשאבים ברמה נמוכה יותר באותו פרויקט, תיקייה או ארגון. כדי לעבוד עם כללי מדיניות הדחייה, צריך מזהה למשאב שאליו מצורפת מדיניות הדחייה, והוא נקרא נקודת הצירוף. משתמשים במזהה הזה לפי אחד מהפורמטים שבטבלה הבאה:
| הפורמט של נקודת הצירוף | |
|---|---|
| ארגון |
דוגמה ל-CLI של gcloud:
דוגמה ל-API ל-REST: |
| תיקייה |
דוגמה ל-CLI של gcloud:
דוגמה ל-API ל-REST: |
| פרויקט |
דוגמה ל-CLI של gcloud:
דוגמה ל-API ל-REST: |
ירושה של מדיניות דחייה
כללי מדיניות הדחייה, כמו כללי מדיניות ההרשאה, עוברים בירושה דרך היררכיית המשאבים. כשמצרפים מדיניות דחייה לפרויקט, לתיקייה או לארגון, המדיניות חלה גם על כל המשאבים בתוכם.
לדוגמה, אם מדיניות הדחייה לארגון מציינת שחשבון משתמש לא יכול להשתמש בהרשאה ספציפית, חשבון המשתמש לא יכול להשתמש בהרשאה הזו לאף משאב בתוך הארגון. כלל זה חל גם אם לתיקיות ולפרויקטים בארגון יש כללי מדיניות דחייה פחות מחמירים.
באופן דומה, אם לפי מדיניות דחייה של פרויקט, אסור לחשבון משתמש להשתמש בהרשאה ספציפית, חשבון המשתמש לא יוכל להשתמש בהרשאה לאף משאב בפרויקט. כלל זה חל גם אם לארגון ולתיקיות ההורה יש כללי מדיניות דחייה פחות מחמירים.
תנאי הדחייה
תנאי הדחייה מציינים את התנאים שחייבים להתקיים כדי שכלל דחייה יחול. אם התנאי מקבל את הערך true או שהוא לא יכול לקבל שום ערך, כלל הדחייה חל וחשבונות המשתמשים לא יכולים להשתמש בהרשאות שצוינו. אם התנאי מקבל את הערך false, כלל הדחייה לא חל, וחשבונות המשתמשים יכולים להשתמש בהרשאות שצוינו אם יש להם אותם.
לתנאי דחייה יש מבנה זהה לזה של תנאי IAM. אבל בניגוד לתנאי IAM, תנאי דחייה מזהים רק פונקציות של תגי משאבים.
למידע על כתיבת תנאים, אפשר לעיין במאמר סקירה כללית של תנאי IAM.
קבוצות של הרשאות
בחלק מהשירותים אפשר לדחות קבוצות הרשאות. קבוצות של הרשאות הן קבוצות של הרשאות שתואמות לתבנית שצוינה. אפשר להשתמש בקבוצת הרשאות כדי לדחות סטים של הרשאות קשורות – לדוגמה, אפשר לדחות את כל ההרשאות לשירות או למשאב יחיד.
רשימת קבוצות ההרשאות הנתמכות מופיעה במאמר ההרשאות שנתמכות בכללי מדיניות הדחייה. המזהים של קבוצות ההרשאות הנתמכות מחליפים קטע אחד או יותר בשם ההרשאה בתו כללי (*). ההרשאות שכל קבוצה כוללת תלויות במיקום של התו הכללי:
-
SERVICE_FQDN/RESOURCE.*: דחיית כל ההרשאות למשאב שצוין. -
SERVICE_FQDN/*.*: דחיית כל ההרשאות לשירות שצוין. -
SERVICE_FQDN/*.VERB: דחיית כל ההרשאות לשירות שמסתיים בפועל שצוין.
קבוצות ההרשאות כוללות את כל ההרשאות הנוכחיות והעתידיות שתואמות לדפוס שצוין. לדוגמה, נניח שאתם משתמשים בקבוצת ההרשאות example.googleapis.com/exampleResource.* כדי לשלול ממשתמש את כל ההרשאות לסוג המשאב exampleResource. אם example.googleapis.com מוסיף הרשאה חדשה לסוג המשאב exampleResource, כמו example.googleapis.com/exampleResource.newPermission, המשתמש יקבל באופן אוטומטי דחייה של ההרשאה החדשה.
אפשר להשתמש בתווים כלליים לחיפוש רק בקבוצות הרשאות נתמכות. אין תמיכה בשימוש בתווים כלליים לחיפוש בשמות הרשאות אחרים.
המבנה של מדיניות דחייה
מדיניות דחייה היא אוסף של מטא-נתונים וכללי דחייה. כלל דחייה משייך קבוצה של חשבונות משתמשים לקבוצת הרשאות שחשבונות המשתמשים לא מקבלים או לא יכולים להשתמש בהם. כל כלל יכול גם לציין תנאי שקובע מתי ההרשאה נדחית.
לדוגמה, מדיניות הדחייה הבאה מונעת מכל חשבונות המשתמשים למחוק פרויקטים, אלא אם חשבון המשתמש הוא חבר בקבוצה project-admins או שלפרויקט שנמחק יש תג עם הערך test.
{
"name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F253519172624/denypolicies/limit-project-deletion",
"uid": "06ccd2eb-d2a5-5dd1-a746-eaf4c6g3f816",
"kind": "DenyPolicy",
"displayName": "Only project admins can delete projects.",
"etag": "MTc1MTkzMjY0MjUyMTExODMxMDQ=",
"createTime": "2021-09-07T23:15:35.258319Z",
"updateTime": "2021-09-07T23:15:35.258319Z",
"rules": [
{
"denyRule": {
"deniedPrincipals": [
"principalSet://goog/public:all"
],
"exceptionPrincipals": [
"principalSet://goog/group/project-admins@example.com"
],
"deniedPermissions": [
"cloudresourcemanager.googleapis.com/projects.delete",
"cloudresourcemanager.googleapis.com/folders.*"
],
"exceptionPermissions": [
"cloudresourcemanager.googleapis.com/folders.list",
"cloudresourcemanager.googelapis.com/folders.get"
],
"denialCondition": {
"title": "Only for non-test projects",
"expression": "!resource.matchTag('12345678/env', 'test')"
}
}
}
]
}
בקטעים הבאים מתוארים השדות במטא-נתונים של מדיניות דחייה וכללי דחייה.
מטא-נתונים
כללי מדיניות הדחייה מכילים את המטא-נתונים הבאים:
name: השם של מדיניות הדחייה. הפורמט של השם הואpolicies/ATTACHMENT_POINT/denypolicies/POLICY_ID, שבוATTACHMENT_POINTהוא הפרויקט, התיקייה או הארגון שאליהם מצורפת מדיניות הדחייה ו-POLICY_IDהוא המזהה האלפאנומרי של מדיניות הדחייה.uid: מזהה ייחודי ש-Google הקצתה למדיניות הדחייה.kind: סוג המדיניות.kindשל מדיניות דחייה הוא תמידDenyPolicy.displayName: אופציונלי. שם של מדיניות הדחייה שקריא לאנשים.etag: מזהה של גרסת המדיניות. כדי למנוע עדכונים סותרים, הערך שלetagחייב להתאים לערך שמאוחסן ב-IAM. אם ערכיetagלא תואמים, הבקשה תיכשל.createTime: השעה שבה נוצרה מדיניות הדחייה.updateTime: הפעם האחרונה שבה עודכנה מדיניות הדחייה.
כללי הדחייה
כל כלל דחייה יכול לכלול את השדות הבאים:
deniedPrincipals: חשבונות המשתמשים שנמנעים מהם ההרשאות. אפשר לרשום חשבונות משתמשים נפרדים וקבוצות של חשבונות משתמשים. סוגי ישויות מורשות נפרדות כוללים חשבונות משתמשים, חשבונות שירות וזהויות יחידות במאגר זהויות של כוח עבודה או של עומסי עבודה. קבוצות של חשבונות משתמשים כוללות קבוצות Google, דומיינים של Cloud Identity, קבוצות של זהויות לעומסי עבודה או לכוח עבודה וכל המשתמשים באינטרנט.רשימת הסוגים והמזהים החוקיים של חשבונות משתמשים מופיעה במאמר מזהים של חשבונות משתמשים בכללי מדיניות הדחייה.
exceptionPrincipals: אופציונלי. חשבונות המשתמשים שמוחרגים מכלל הדחייה. ההרשאות שצוינו לא נדחו מחשבונות המשתמשים האלו, גם אם הם רשומים ב-deniedPrincipals, או אם הם חלק מקבוצה שרשומה ב-deniedPrincipals.אפשר לרשום חשבונות משתמשים נפרדים וקבוצות של חשבונות משתמשים. סוגי חשבונות המשתמשים הנפרדים כוללים חשבונות משתמשים, חשבונות שירות וזהויות יחידות במאגר זהויות של כוח עבודה או במאגר זהויות של עומסי עבודה. קבוצות של חשבונות משתמשים כוללות קבוצות Google, דומיינים של Cloud Identity, קבוצות של זהויות של כוח עבודה או עומסי עבודה וכל המשתמשים באינטרנט.
רשימת הסוגים והמזהים החוקיים של חשבונות משתמשים מופיעה במאמר מזהים של חשבונות משתמשים בכללי מדיניות הדחייה.
deniedPermissions: ההרשאות שנדחות מחשבונות המשתמשים שצוינו או שהם לא יכולים להשתמש בהן. ההרשאות האלו משתמשות בפורמט ההרשאותv2של IAM, שכולל שם דומיין שמוגדר במלואו (FQDNs) כדי לזהות את השירות. הפורמט הואSERVICE_FQDN/RESOURCE.ACTION. Google APIs משתמשים בדומיין*.googleapis.com. לדוגמה,iam.googleapis.com/roles.delete.אפשר לדחות רק חלק מההרשאות. לרשימה המלאה של ההרשאות שאפשר לדחות, אפשר לעיין במאמר ההרשאות שנתמכות בכללי מדיניות הדחייה.
במקרים מסוימים, אפשר גם להשתמש בקבוצות הרשאות כדי לדחות סטים של הרשאות. מידע נוסף זמין במאמר בנושא קבוצות הרשאות.
exceptionPermissions: אופציונלי. רשימה של הרשאות שחשבונות המשתמשים שצוינו יכולים להשתמש בהן, גם אם ההרשאות האלה כלולות ב-deniedPermissions. לדוגמה, אפשר להשתמש בשדה הזה כדי להחריג הרשאות ספציפיות בקבוצת הרשאות.
denialConditions: אופציונלי. ביטוי לוגי שמשפיע על הזמן שבו חל כלל הדחייה. אם התנאי מקבל את הערךtrueאו שהוא לא יכול לקבל שום ערך, ההרשאה נדחית. אם התנאי מקבל את הערךfalse, ההרשאה לא נדחית. למידע נוסף, אפשר לעיין בקטע תנאי הדחייה שבדף הזה.
תרחישים נפוצים לדוגמה
בהמשך מפורטים מצבים נפוצים שבהם כדאי להשתמש בכללי מדיניות הדחייה ודוגמאות של כללי הדחייה שכדאי ליצור בכל מצב כזה. למידע על דרכים ליצור כללי מדיניות דחייה ולעדכן אותם, אפשר לעיין במאמר דחיית הגישה למשאבים.
ריכוז הרשאות אדמין
אפשר להשתמש בכללי מדיניות דחייה כדי להגביל סוגים מסוימים של פעילויות אדמין לקבוצה מסוימת של חשבונות משתמשים.
לדוגמה, נניח שרוצים להגביל ניהול של תפקידים בהתאמה אישית של הארגון לצוות מרכזי אחד. כדי לעשות זאת, צריך ליצור כלל דחייה שמבטל את ההרשאות שנדרשות לניהול תפקידים בהתאמה אישית לכל המשתמשים, למעט משתמשים בקבוצת האדמין (custom-role-admins):
{
"deniedPrincipals": [
"principalSet://goog/public:all"
],
"exceptionPrincipals": [
"principalSet://goog/group/custom-role-admins@example.com"
],
"deniedPermissions": [
"iam.googleapis.com/roles.create",
"iam.googleapis.com/roles.delete",
"iam.googleapis.com/roles.update",
]
}
לאחר מכן, אפשר לצרף את מדיניות הדחייה לארגון.
עכשיו רק לחברים בקבוצה custom-role-admins יש אפשרות לנהל תפקידים בהתאמה אישית, אפילו אם למשתמשים אחרים יש את ההרשאות הנדרשות.
לדוגמה, נניח שליורי ולטל יש תפקיד אדמין ארגוני (roles/iam.organizationRoleAdmin), אבל יורי חבר בקבוצה custom-role-admins וטל לא. בגלל מדיניות הדחייה הזו, רק יורי יוכל ליצור, למחוק ולעדכן תפקידים.
יצירת חריגים להענקת גישה
אפשר להשתמש בכללי מדיניות דחייה כדי לדחות הרשאות שהועברו בירושה. היכולת הזו מאפשרת להקצות תפקיד ברמה גבוהה בהיררכיית המשאבים, ואז לדחות את ההרשאות של התפקיד במשאבים נפרדים ברמה נמוכה, אם יש צורך בכך.
לדוגמה, נניח שיש תיקייה בשם Engineering שמכילה מספר פרויקטים. אתם רוצים לתת לקבוצה eng את ההרשאות בתפקיד 'אדמין של מפתח לחשבון שירות' (roles/iam.serviceAccountKeyAdmin), כמעט בכל הפרויקטים שבתיקייה. עם זאת, אתם לא רוצים שהקבוצה תקבל את היכולת ליצור ולמחוק מפתחות של חשבונות שירות בפרויקט ספציפי בתיקייה example-prod.
במקום להקצות את התפקיד 'אדמין של מפתח לחשבון שירות' לכל פרויקט בנפרד, יוצרים את כלל הדחייה הבא, שמונע יצירה ומחיקה של הרשאות בתפקיד 'אדמין של מפתח לחשבון שירות' לחשבונות המשתמשים בקבוצה eng:
{
"deniedPrincipals": [
"principalSet://goog/group/eng@example.com"
],
"deniedPermissions": [
"iam.googleapis.com/serviceAccountKeys.create",
"iam.googleapis.com/serviceAccountKeys.delete"
]
}
לאחר מכן מוסיפים את כלל הדחייה למדיניות הדחייה ומצרפים את המדיניות לפרויקט example-prod.
אחרי צירוף של מדיניות הדחייה לפרויקט, אפשר להקצות את התפקיד 'אדמין של מפתח לחשבון שירות' לקבוצה eng בתיקייה Engineering בלי לאפשר לקבוצה ליצור או למחוק מפתחות של חשבונות שירות ב-example-prod.
כך חברי הקבוצה eng יכולים ליצור ולמחוק מפתחות לחשבונות שירות בכל הפרויקטים, חוץ מ-example-prod. לדוגמה, אם יזומי חברה בקבוצה eng, היא יכולה ליצור ולמחוק מפתחות לחשבונות שירות ב-example-dev וב-example-test, אבל לא ב-example-prod.
עם זאת, נניח שאתם רוצים שקבוצת משנה של הקבוצה eng תוכל ליצור ולמחוק מפתחות לחשבונות שירות ב-example-prod. קבוצת המשנה מיוצגת על-ידי הקבוצה eng-prod. כדי לאפשר לחברים בקבוצה eng-prod ליצור ולמחוק מפתחות לחשבונות שירות ב-example-prod, אפשר להחריג את הקבוצה מכלל הדחייה:
{
"deniedPrincipals": [
"principalSet://goog/group/eng@example.com"
],
"exceptionPrincipals": [
"principalSet://goog/group/eng-prod@example.com"
],
"deniedPermissions": [
"iam.googleapis.com/serviceAccountKeys.create",
"iam.googleapis.com/serviceAccountKeys.delete"
]
}
באמצעות מדיניות הדחייה המתוקנת הזו, החברים בקבוצה eng-prod יכולים ליצור ולמחוק מפתחות לחשבונות שירות בכל הפרויקטים, כולל example-prod. לדוגמה, אם צ'רלי הוא חבר בקבוצה eng-prod, הוא יכול ליצור ולמחוק מפתחות ב-example-dev, ב-example-test וב-example-prod, גם אם הוא חבר גם בקבוצה eng.
חסימת גישה מבוססת תגים
תג הוא צמד מפתח/ערך שאפשר לצרף לארגון, לתיקייה או לפרויקט. אפשר להשתמש בכללי מדיניות הדחייה כדי לדחות הרשאות מבוססות תגים בלי להוסיף תנאי IAM לכל הקצאת תפקיד.
לדוגמה, נניח שאתם מתייגים את כל הפרויקטים בתור dev, test או prod. אתם רוצים שרק חברים בקבוצה project-admins יוכלו למחוק פרויקטים שתויגו ב-prod.
כדי לפתור את הבעיה, אפשר ליצור כלל דחייה שמונע מכולם את ההרשאה cloudresourcemanager.googleapis.com/projects.delete, מלבד קבוצת project-admins למשאבים עם התג prod:
{
"displayName": "Only project admins can delete production projects.",
"rules": [
{
"denyRule": {
"deniedPrincipals": [
"principalSet://goog/public:all"
],
"exceptionPrincipals": [
"principalSet://goog/group/project-admins@example.com"
],
"deniedPermissions": [
"cloudresourcemanager.googleapis.com/projects.delete"
],
"denialCondition": {
"title": "Only for prod projects",
"expression": "resource.matchTag('12345678/env', 'prod')"
}
}
}
]
}
לאחר מכן, מוסיפים את כלל הדחייה הזה למדיניות הדחייה ומצרפים את המדיניות לארגון.
כלל הדחייה הזה מאפשר הגבלת גישה של חשבונות משתמשים בלי להוסיף תנאי להקצאות התפקידים שלהם. במקום זאת, אפשר להקצות לחשבונות משתמשים תפקידים שמכילים את ההרשאה cloudresourcemanager.googleapis.com/projects.delete ולהסתמך על כלל הדחייה כדי למנוע מחשבונות משתמשים מחוץ לקבוצה project-admins למחוק פרויקטים עם התג prod.
לדוגמה, נניח שיש שני משתמשים, בולה וקיראן. לשני המשתמשים יש את התפקיד 'כלי למחיקת פרויקטים' (roles/resourcemanager.projectDeleter). בנוסף, Kiran חבר בקבוצה project-admins. בגלל מדיניות הדחייה הזו, בולה יכול למחוק רק פרויקטים עם התג dev או test. קירן יכול למחוק את כל הפרויקטים, ללא קשר לתגים.
המאמרים הבאים
- למידע על דרכים ליצור, לעדכן ולמחוק את כללי מדיניות הדחייה.
- למידע על דרכים לפתור בעיות גישה באמצעות כללי מדיניות הדחייה.
- לבדיקת ההרשאות שאפשר לדחות.
- סוגי חשבונות משתמשים שאפשר לכלול בכללי מדיניות הדחייה.