באמצעות Directory API אפשר להשתמש בבקרת גישה מבוססת-תפקידים (RBAC) כדי לנהל את הגישה לתכונות בדומיין של Google Workspace. אתם יכולים ליצור תפקידים בהתאמה אישית עם הרשאות כדי להגביל את הגישה של האדמינים באופן ספציפי יותר מאשר התפקידים המוגדרים מראש שכלולים ב-Google Workspace. אפשר להקצות תפקידים למשתמשים או לקבוצות אבטחה. במדריך הזה נסביר איך לבצע כמה משימות בסיסיות שקשורות לתפקידים.
ריכזנו כאן רשימה של מונחים נפוצים שנעשה בהם שימוש ב-Directory API בנוגע ל-RBAC ב-Google Workspace:
- הרשאה
- ההרשאה הנדרשת לביצוע משימה או פעולה בדומיין של Google Workspace. מיוצג על ידי המשאב
Privilege
. אין נתונים קבועים שמשויכים למשאב הזה. - תפקיד
- אוסף של הרשאות שמעניק לישות עם התפקיד הזה את היכולת לבצע משימות או פעולות מסוימות. מיוצג על ידי המשאב
Role
. - הקצאת תפקידים
- הרשומה של תפקיד מסוים שהוקצה למשתמש או לקבוצה. הוא מיוצג על ידי המשאב
RoleAssignment
. - קבוצת אבטחה
- סוג של קבוצה ב-Cloud Identity שמשמשת לבקרת הגישה למשאבים ארגוניים. קבוצות אבטחה יכולות לכלול גם משתמשים ספציפיים וגם קבוצות.
מגבלות על תפקידים והקצאות תפקידים
אפשר ליצור רק כמות מוגבלת של תפקידים בהתאמה אישית או הקצאות תפקידים, לכן אם אתם מתקרבים למגבלה, כדאי לאחד אותם או להסיר אותם כדי לא לחרוג מהמגבלה. אלה המגבלות על תפקידים והקצאות תפקידים:
- אפשר ליצור עד 750 תפקידים בהתאמה אישית לכל הארגון.
- אפשר ליצור עד 1,000 הקצאות תפקידים לכל יחידה ארגונית (OU), כאשר הארגון ברמה הבסיסית נחשב ליחידה. לדוגמה, אפשר להקצות 600 תפקידים בארגון ברמה הבסיסית (root) ו-700 תפקידים ב-OU אחר שהגדרתם, כמו מחלקה בחברה. ברירת המחדל של כל תפקידי האדמין המוגדרים מראש ב-Google Workspace היא ברמת הארגון. מידע נוסף על המגבלות על ההרשאות שאפשר להקצות ברמת ה-OU
אלו המגבלות שחלות על תפקידים והקצאת תפקידים בקבוצות:
- אפשר להקצות כל תפקיד מלבד סופר-אדמין.
- אפשר להקצות עד 250 תפקידים לקבוצות בסך הכול ברמת ה-OU הכוללת ובכל OU.
- הקבוצה צריכה להיות קבוצת אבטחה בארגון.
- מומלץ להגביל את החברים בקבוצה למשתמשים בארגון. אפשר להוסיף משתמשים מחוץ לארגון, אבל יכול להיות שהם לא יקבלו את הרשאות התפקיד. פרטים נוספים זמינים במאמר הגבלת החברים בקבוצה. ### הקצאת תפקידים לקבוצות
אם אתם צריכים להקצות יותר מ-1,000 תפקידים ב-OU, תוכלו להוסיף כמה משתמשים לקבוצת אבטחה ולהקצות תפקיד לקבוצה. להקצאות של תפקידים לקבוצות יש מגבלות נוספות. מידע ספציפי זמין במרכז העזרה לאדמינים.
מיפוי של תפקידים להרשאות במסוף Google Admin
כדי להקצות תפקידים למשתמשים שיכולים לגשת להרשאות שלהם דרך מסוף Admin, יכול להיות שתצטרכו להעניק להם הרשאות נוספות מסוימות. לדוגמה, כדי לתת למשתמש את היכולת ליצור משתמשים אחרים דרך מסוף Admin, נדרשת לא רק ההרשאה USERS_CREATE
, אלא גם ההרשאות USERS_UPDATE
ו-ORGANIZATION_UNITS_RETRIEVE
. בטבלה הבאה מפורטת המיפוי של הפונקציונליות של מסוף Admin להרשאות הנדרשות לניהול משתמשים ויחידות ארגוניות.
הפונקציונליות של מסוף Admin | ההרשאות הנדרשות |
---|---|
יחידות ארגוניות – קריאה | ORGANIZATION_UNITS_RETRIEVE |
יחידות ארגוניות – יצירה | ORGANIZATION_UNITS_RETRIEVE + ORGANIZATION_UNITS_CREATE |
יחידות ארגוניות – עדכון | ORGANIZATION_UNITS_RETRIEVE + ORGANIZATION_UNITS_UPDATE |
יחידות ארגוניות – מחיקה | ORGANIZATION_UNITS_RETRIEVE + ORGANIZATION_UNITS_DELETE |
יחידות ארגוניות | ORGANIZATION_UNITS_ALL |
משתמשים – קריאה | USERS_RETRIEVE + ORGANIZATION_UNITS_RETRIEVE |
משתמשים – יצירה | USERS_CREATE + USERS_UPDATE + ORGANIZATION_UNITS_RETRIEVE |
משתמשים – עדכון | USERS_UPDATE + ORGANIZATION_UNITS_RETRIEVE |
משתמשים – העברת משתמשים | USERS_MOVE + USERS_RETRIEVE + ORGANIZATION_UNITS_RETRIEVE |
משתמשים – שינוי שמות של משתמשים | USERS_ALIAS + USERS_RETRIEVE + ORGANIZATION_UNITS_RETRIEVE |
משתמשים – איפוס סיסמה | USERS_RESET_PASSWORD + USERS_RETRIEVE + ORGANIZATION_UNITS_RETRIEVE |
משתמשים – אילוץ שינוי סיסמה | USERS_FORCE_PASSWORD_CHANGE + USERS_RETRIEVE + ORGANIZATION_UNITS_RETRIEVE |
משתמשים – הוספה/הסרה של כינויים | USERS_ADD_NICKNAME + USERS_RETRIEVE + ORGANIZATION_UNITS_RETRIEVE |
משתמשים – השעיית משתמשים | USERS_SUSPEND + USERS_RETRIEVE + ORGANIZATION_UNITS_RETRIEVE |
קבוצות | GROUPS_ALL |
אבטחה – ניהול אבטחת משתמשים | USER_SECURITY_ALL + USERS_RETRIEVE + ORGANIZATION_UNITS_RETRIEVE |
דוגמאות לתרחישים לדוגמה
לפני שמתחילים
משלימים את השלבים של האימות וההרשאה ב-Google Workspace.
הצגת רשימה של הרשאות הדומיין
כדי לקבל רשימה מחולקת לדפים של ההרשאות הנתמכות בדומיין, משתמשים בשיטה privileges.list()
.
אם אתם אדמינים שמקבלים הרשאות בדומיין שלכם, צריך להשתמש ב-
my_customer
בתור מזהה הלקוח.אם אתם מפיצים שמקבלים הרשאות לאחד מהלקוחות שלכם, תוכלו להשתמש במזהה הלקוח שמוחזר על ידי הפעולה Retrieve a user.
בקשה
GET https://admin.googleapis.com/admin/directory/v1/customer/customer_id/roles/ALL/privileges
תשובה
תגובה מוצלחת מחזירה קוד סטטוס HTTP 200. יחד עם קוד הסטטוס, התשובה מחזירה את ההרשאות הנתמכות בדומיין:
{
"kind": "admin\#directory\#privileges",
"etag": ...,
"items": [
{
"kind": "admin\#directory\#privilege",
"etag": ...,
"serviceId": "02afmg282jiquyg",
"privilegeName": "APP_ADMIN",
"isOuScopable": false
},
{
"kind": "admin\#directory\#privilege",
"etag": ...,
"serviceId": "04f1mdlm0ki64aw",
"privilegeName": "MANAGE_USER_SETTINGS",
"isOuScopable": true,
"childPrivileges": [
{
"kind": "admin\#directory\#privilege",
"etag": ...,
"serviceId": "04f1mdlm0ki64aw",
"privilegeName": "MANAGE_APPLICATION_SETTINGS",
"isOuScopable": true
}
]
},
...
]
}
אחזור של תפקידים קיימים
כדי לקבל רשימה של תפקידים קיימים, משתמשים בבקשת GET
הבאה וכוללים את ההרשאה שמתוארת בקטע אימות בקשות.
אם אתם אדמינים שמקבלים תפקידים בדומיין שלכם, השתמשו ב-
my_customer
בתור מזהה הלקוח.אם אתם מפיצים שמקבלים תפקידים עבור לקוח, צריך להשתמש במזהה הלקוח שקיבלת באמצעות הפעולה Retrieve a user.
בקשה
GET https://admin.googleapis.com/admin/directory/v1/customer/customer_id/roles
תשובה
בתגובה מוצלחת מוחזר קוד סטטוס HTTP 200
. יחד עם קוד הסטטוס, התשובה מחזירה את התפקידים שקיימים בדומיין:
{
"kind": "admin\#directory\#roles",
"etag": "\"sxH3n22L0-77khHtQ7tiK6I21Yo/DywA6_jaJCYw-f0lFs2-g17UWe8\"",
"items": [
{
"kind": "admin\#directory\#role",
"etag": ... ,
"roleId": "3894208461012993",
"roleName": "_SEED_ADMIN_ROLE",
"roleDescription": "Google Workspace Administrator Seed Role",
"rolePrivileges": [
{
"privilegeName": "SUPER_ADMIN",
"serviceId": "01ci93xb3tmzyin"
},
{
"privilegeName": "ROOT_APP_ADMIN",
"serviceId": "00haapch16h1ysv"
},
{
"privilegeName": "ADMIN_APIS_ALL",
"serviceId": "00haapch16h1ysv"
},
...
],
"isSystemRole": true,
"isSuperAdminRole": true
},
{
"kind": "admin\#directory\#role",
"etag": "\"sxH3n22L0-77khHtQ7tiK6I21Yo/bTXiZXfuK1NGr_f4paosCWXuHmw\"",
"roleId": "3894208461012994",
"roleName": "_GROUPS_ADMIN_ROLE",
"roleDescription": "Groups Administrator",
"rolePrivileges": [
{
"privilegeName": "CHANGE_USER_GROUP_MEMBERSHIP",
"serviceId": "01ci93xb3tmzyin"
},
{
"privilegeName": "USERS_RETRIEVE",
"serviceId": "00haapch16h1ysv"
},
{
"privilegeName": "GROUPS_ALL",
"serviceId": "00haapch16h1ysv"
},
{
"privilegeName": "ADMIN_DASHBOARD",
"serviceId": "01ci93xb3tmzyin"
},
{
"privilegeName": "ORGANIZATION_UNITS_RETRIEVE",
"serviceId": "00haapch16h1ysv"
}
],
"isSystemRole": true
},
...
]
}
הצגת רשימה של כל הקצאות התפקידים
כדי לקבל רשימה מחולקת לדפים של כל הקצאות התפקידים הישירות, משתמשים ב-method roleAssignments.list()
. יכול להיות שה-API יחזיר תוצאות ריקות עם אסימון דף כשהפרמטר userKey
מוגדר. צריך להמשיך את החלוקה לדפים עד שלא מוחזר אסימון דף.
אם אתם אדמינים שמקבלים הקצאות תפקידים בדומיין שלכם, תוכלו להשתמש ב-
my_customer
בתור מזהה הלקוח.אם אתם מפיצים שמקבלים הקצאות תפקידים לאחד מהלקוחות שלכם, תוכלו להשתמש במזהה הלקוח שמוחזר על ידי הפעולה Retrieve a user.
בקשה
GET https://admin.googleapis.com/admin/directory/v1/customer/customer_id/roleassignments
תשובה
בתגובה מוצלחת מוחזר קוד סטטוס HTTP 200
. יחד עם קוד הסטטוס, התשובה מחזירה את כל התפקידים שהוקצו בדומיין:
{
"kind": "admin\#directory\#roleAssignment",
"etag": "\"sxH3n22L0-77khHtQ7tiK6I21Yo/VdrrUEz7GyXqlr9I9JL0wGZn8yE\"",
"roleAssignmentId:"3894208461013211",
"assignedTo:"100662996240850794412",
"assigneeType:"user",
"scopeType:"CUSTOMER",
}
הצגת רשימה של כל הקצאות התפקידים העקיפות
כדי לקבל רשימה מחולקת לדפים של כל הקצאות התפקידים, כולל אלה שהוקצו למשתמש באופן עקיף בגלל הקבוצות שהוא שייך אליהן, משתמשים ב-method roleAssignments.list()
.
יכול להיות שה-API יחזיר תוצאות ריקות עם אסימון דף. צריך להמשיך בעימוד עד שלא מוחזר אסימון דף.
אם אתם אדמינים שמקבלים הקצאות תפקידים בדומיין שלכם, תוכלו להשתמש ב-
my_customer
בתור מזהה הלקוח.אם אתם מפיצים שמקבלים הקצאות תפקידים לאחד מהלקוחות שלכם, תוכלו להשתמש במזהה הלקוח שמוחזר על ידי הפעולה Retrieve a user.
מחליפים את הערך
USER_KEY
בערך שמזהה את המשתמש בבקשת ה-API. מידע נוסף זמין במאמרusers.get
.
בקשה
GET https://admin.googleapis.com/admin/directory/v1/customer/customer_id/roleassignments?userKey=USER_KEY&includeIndirectRoleAssignments=true
תשובה
בתגובה מוצלחת מוחזר קוד סטטוס HTTP 200
. יחד עם קוד הסטטוס, התשובה מחזירה את כל התפקידים שהוקצו בדומיין ואת הערך של assigneeType
, שהוא user
או group
:
{
"kind": "admin\#directory\#roleAssignment",
"etag": "\"sxH3n22L0-77khHtQ7tiK6I21Yo/VdrrUEz7GyXqlr9I9JL0wGZn8yE\"",
"roleAssignmentId:"3894208461013211",
"assignedTo:"100662996240850794412",
"assigneeType:"group",
"scopeType:"CUSTOMER",
}
יצירת תפקיד חדש
כדי ליצור תפקיד חדש, משתמשים בבקשה הבאה של POST
וכוללים את ההרשאה שמתוארת בקטע בקשות לאישור.
מוסיפים privilegeName
ו-serviceId
לכל הרשאה שרוצים להקצות עם התפקיד הזה. למאפייני הבקשה והתגובה, ראו חומר העזר בנושא API.
בקשה
POST https://admin.googleapis.com/admin/directory/v1/customer/customer_id/roles { "roleName": "My New Role", "rolePrivileges": [ { "privilegeName": "USERS_ALL", "serviceId": "00haapch16h1ysv" }, { "privilegeName": "GROUPS_ALL", "serviceId": "00haapch16h1ysv" } ] }
תשובה
בתגובה מוצלחת מוחזר קוד סטטוס HTTP 200
. יחד עם קוד הסטטוס, התשובה מחזירה את המאפיינים של התפקיד החדש:
{
"kind": "admin\#directory\#role",
"etag": "\"sxH3n22L0-77khHtQ7tiK6I21Yo/uX9tXw0qyijC9nUKgCs08wo8aEM\"",
"roleId": "3894208461013031",
"roleName": "My New Role",
"rolePrivileges": [
{
"privilegeName": "GROUPS_ALL",
"serviceId": "00haapch16h1ysv"
},
{
"privilegeName": "USERS_ALL",
"serviceId": "00haapch16h1ysv"
}
]
}
יצירת הקצאת תפקיד
כדי להקצות תפקיד, משתמשים בשיטה POST
הבאה וכוללים את ההרשאה שמתוארת בקטע בקשות הרשאה.
כדי להקצות את התפקיד למשתמש, מוסיפים גוף JSON עם
user_id
של המשתמש, שאפשר לקבל מ-users.get()
, אתroleId
(כפי שמתואר בקטע קבלת תפקידים קיימים) ואתscope_type
.כדי להקצות את התפקיד לחשבון שירות, מוסיפים גוף JSON עם
unique_id
של חשבון השירות (כפי שמוגדר בניהול זהויות והרשאות גישה (IAM)),roleId
(כפי שמתואר בקטע קבלת תפקיד קיים) ו-scope_type
.כדי להקצות את התפקיד לקבוצה, מוסיפים גוף JSON עם הערך של
group_id
של הקבוצה, שאפשר לקבל מ-groups.get()
, הערך שלroleId
(כפי שמתואר בקטע קבלת תפקידים קיימים) והערך שלscope_type
.
בקשה
POST https://admin.googleapis.com/admin/directory/v1/customer/customer_id/roleassignments { "roleId": "3894208461012995", "assignedTo": "100662996240850794412", "scopeType": "CUSTOMER" }
תשובה
בתגובה מוצלחת מוחזר קוד סטטוס HTTP 200
. יחד עם קוד הסטטוס, התשובה מחזירה את המאפיינים של הקצאת התפקיד החדשה:
{
"kind": "admin\#directory\#roleAssignment",
"etag": "\"sxH3n22L0-77khHtQ7tiK6I21Yo/VdrrUEz7GyXqlr9I9JL0wGZn8yE\"",
"roleAssignmentId": "3894208461013211",
"roleId": "3894208461012995",
"assignedTo": "100662996240850794412",
"scopeType": "CUSTOMER"
}
יצירת הקצאת תפקיד עם תנאים
אפשר להקצות תפקידים לביצוע פעולות שעומדות בתנאים ספציפיים. בשלב זה יש תמיכה רק בשני תנאים:
- רלוונטי רק לקבוצות אבטחה
- לא רלוונטי לקבוצות אבטחה
כשמגדירים את condition
, הוא ייכנס לתוקף רק כשהמשאב שאליו מתבצעת הגישה יעמוד בתנאי. אם השדה condition
ריק, התפקיד (roleId
) מוחל על הגורם (assignedTo
) ברמת ההיקף (scopeType
) ללא תנאי.
כדי להקצות תפקיד למשתמש, משתמשים בשיטת ה-POST הבאה וכוללים את ההרשאה שמתוארת בקטע אישור בקשות.
מוסיפים גוף JSON עם user_id
של המשתמש, שאפשר לקבל מ-users.get(), את roleId
כפי שמתואר בקטע קבלת תפקידים קיימים ואת condition
. צריך להשתמש בשתי מחרוזות התנאי בדיוק כפי שמוצג בהמשך, והן פועלות רק עם תפקידי האדמין המובנים 'עריכת קבוצות' ו'קריאת קבוצות'.
התנאים האלה פועלים לפי תחביר התנאים של Cloud IAM.
בקשה
רלוונטי רק לקבוצות אבטחה
POST https://admin.googleapis.com/admin/directory/v1.1beta1/customer/customer_id/roleassignments { "roleId": "3894208461012995", "assignedTo": "100662996240850794412", "scopeType": "CUSTOMER", "condition": "api.getAttribute('cloudidentity.googleapis.com/groups.labels', []).hasAny(['groups.security']) && resource.type == 'cloudidentity.googleapis.com/Group'" }
לא רלוונטי לקבוצות אבטחה
POST https://admin.googleapis.com/admin/directory/v1.1beta1/customer/customer_id/roleassignments { "roleId": "3894208461012995", "assignedTo": "100662996240850794412", "scopeType": "CUSTOMER", "condition": "!api.getAttribute('cloudidentity.googleapis.com/groups.labels', []).hasAny(['groups.security']) && resource.type == 'cloudidentity.googleapis.com/Group'" }
תשובה
תגובה מוצלחת מחזירה קוד סטטוס HTTP 200
. יחד עם קוד הסטטוס, התשובה מחזירה את המאפיינים של הקצאת התפקיד החדשה:
{
"kind": "admin\#directory\#roleAssignment",
"etag": "\"sxH3n22L0-77khHtQ7tiK6I21Yo/VdrrUEz7GyXqlr9I9JL0wGZn8yE\"",
"roleAssignmentId": "3894208461013211",
"roleId": "3894208461012995",
"assignedTo": "100662996240850794412",
"scopeType": "CUSTOMER",
"condition": "!api.getAttribute('cloudidentity.googleapis.com/groups.labels',
[]).hasAny(['groups.security']) && resource.type ==
'cloudidentity.googleapis.com/Group'"
}