בנושא הזה מוסבר איך מגדירים הרשאת גישה זמנית למשאבים ב- Google Cloudבאמצעות קישורי תפקידים מותנים בכללי מדיניות ההרשאות. באמצעות מאפייני תאריך ושעה תוכלו לאכוף אמצעי בקרה מבוססי-זמן כשניגשים למשאב מסוים. לדוגמה, תוכלו לפרויקט גישה זמנית שמתחילה ומסתיימת בשעה מסוימת או לפי תזמון קבוע.
לפני שמתחילים
- במאמר סקירה כללית על תנאים מוסברים העקרונות הבסיסיים של קישורי תפקידים מותנים בניהול זהויות והרשאות גישה (IAM).
- ברשימה מאפייני תאריך ושעה מופיעים המאפיינים שבהם אפשר להשתמש בביטוי של תנאי. כל השירותים של Google Cloud תומכים במאפיינים של תאריך ושעה.
התפקידים הנדרשים
כדי לקבל את ההרשאות שדרושות לניהול של קישורי תפקידים מותנים, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים:
-
כדי לנהל את הגישה לפרויקטים:
אדמין IAM של פרויקט (
roles/resourcemanager.projectIamAdmin) בפרויקט -
כדי לנהל את הגישה לתיקיות:
אדמין תיקיות (
roles/resourcemanager.folderAdmin) בתיקייה -
כדי לנהל את הגישה לפרויקטים, לתיקיות ולארגונים:
אדמין ארגוני (
roles/resourcemanager.organizationAdmin) באותו ארגון -
כדי לנהל את הגישה כמעט לכל Google Cloud המשאבים:
אדמין לענייני אבטחה (
roles/iam.securityAdmin) בפרויקט, בתיקייה או בארגון שבהם רוצים לנהל את הגישה למשאבים
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
התפקידים המוגדרים מראש האלה כוללים את ההרשאות שנדרשות לניהול קישורי תפקידים מותנים. כדי לראות בדיוק אילו הרשאות נדרשות, אפשר להרחיב את הקטע ההרשאות הנדרשות:
ההרשאות הנדרשות
כדי לנהל קישורי תפקידים מותנים, נדרשות ההרשאות הבאות:
-
כדי לנהל גישה לפרויקטים:
-
resourcemanager.projects.getIamPolicyבפרויקט -
resourcemanager.projects.setIamPolicyבפרויקט
-
-
כדי לנהל גישה לתיקיות:
-
resourcemanager.folders.getIamPolicyבתיקייה -
resourcemanager.folders.setIamPolicyבתיקייה
-
-
כדי לנהל גישה לארגונים:
-
resourcemanager.organizations.getIamPolicyבארגון -
resourcemanager.organizations.setIamPolicyבארגון
-
יכול להיות שתקבלו את ההרשאות האלה באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש אחרים.
הענקת גישה זמנית
אפשר להשתמש בקישור תפקידים מותנה כדי להעניק גישה לזמן מוגבל למשאב ולוודא שהמשתמש לא יוכל לגשת למשאב אחרי התאריך ושעת התפוגה שצוינו.
למשל, שימו לב לתרחיש הבא: כללי אבטחת המידע של חברה בשם ExampleCo מדגישים שלאף עובד לא אמורה להיות גישה בלתי מוגבלת למשאבים בפרויקטים בסביבת הייצור. בעבר, אדמינים היו מגדירים ומוחקים באופן ידני קישורי תפקידים של IAM כדי לעמוד בצרכים הדחופים של המהנדסים. במקום זאת, כדי לצמצם את התקורה הניהולית, ב-ExampleCo יכולים להגדיר קישורי תפקידים מותנים עם תנאי של תאריך ושעה כדי להגדיר תאריך סיום לקישור.
כדי להעניק הרשאת גישה זמנית למשאב של פרויקט:
המסוף
נכנסים לדף IAM במסוף Google Cloud .
מאתרים את חשבון המשתמש הרצוי מרשימת חשבונות המשתמש ולוחצים על הלחצן .
בחלונית Edit permissions מאתרים את התפקיד שרוצים להגדיר תנאי לגביו. לאחר מכן, בקטע IAM condition (optional), לוחצים על Add IAM condition.
בחלונית Edit condition נותנים לתנאי שם, ואפשר לתת לו גם תיאור.
אפשר להוסיף ביטוי לתנאי באמצעות הכלי להגדרת תנאים או באמצעות עורך התנאים. הכלי להגדרת תנאים הוא ממשק אינטראקטיבי שבו בוחרים את סוג התנאי, האופרטור ופרטים רלוונטיים אחרים של הביטוי. עורך התנאים הוא ממשק מבוסס-טקסט שבו מזינים ישנית ביטוי בתחביר CEL.
הכלי להגדרת תנאים:
- בתפריט הנפתח Condition type בוחרים באפשרות Expiring Access.
- מהתפריט הנפתח Operator, בוחרים by.
- מהתפריט הנפתח Time, לוחצים על הלחצן כדי לבחור טווח תאריכים ושעות.
- לוחצים על Save כדי להחיל את התנאי.
- אחרי שהחלונית Edit conditions נסגרת, לוחצים שוב על Save בחלונית Edit permissions כדי לעדכן את מדיניות ההרשאות.
עורך התנאים:
לוחצים על הכרטיסייה Condition editor ומזינים את הביטוי הבא (מחליפים את חותמת הזמן בחותמת זמן משלכם):
request.time < timestamp("2020-07-01T00:00:00.000Z")אחרי שמוסיפים את הביטוי, אפשר לבחור לתקף את התחביר של CEL בלחיצה על Run Linter מעל לתיבת הטקסט בפינה הימנית העליונה.
לוחצים על Save כדי להחיל את התנאי.
אחרי שהחלונית Edit conditions נסגרת, לוחצים שוב על Save בחלונית Edit permissions כדי לעדכן את מדיניות ההרשאות.
gcloud
כללי המדיניות מוגדרים באמצעות התבנית קריאה-עדכון-כתיבה.
מפעילים את הפקודה gcloud projects get-iam-policy כדי לקבל את מדיניות ההרשאות הנוכחית של הפרויקט. בדוגמה הבאה, מתבצעת הורדה של גרסת ה-JSON של מדיניות ההרשאות לנתיב בדיסק.
פקודה:
gcloud projects get-iam-policy project-id --format=json > filepath
מתבצעת הורדה של פורמט ה-JSON של מדיניות ההרשאות:
{
"bindings": [
{
"members": [
"user:my-user@example.com"
],
"role": "roles/owner"
},
{
"members": [
"group:my-group@example.com"
],
"role": "roles/iam.securityReviewer"
}
],
"etag": "BwWKmjvelug=",
"version": 1
}
כדי להגדיר את מדיניות ההרשאות עם הרשאת גישה זמנית, צריך להוסיף את ביטוי התנאי המודגש הבא (מחליפים את חותמת הזמן לחותמת זמן שלכם). ה-CLI של gcloud מעדכן את הגרסה באופן אוטומטי:
{
"bindings": [
{
"members": [
"user:my-user@example.com"
],
"role": "roles/owner"
},
{
"members": [
"group:my-group@example.com"
],
"role": "roles/iam.securityReviewer",
"condition": {
"title": "Expires_July_1_2020",
"description": "Expires on July 1, 2020",
"expression":
"request.time < timestamp('2020-07-01T00:00:00.000Z')"
}
}
],
"etag": "BwWKmjvelug=",
"version": 3
}בשלב הבא מגדירים את מדיניות ההרשאות החדשה על-ידי הפעלת הפקודה gcloud projects set-iam-policy:
gcloud projects set-iam-policy project-id filepath
מדיניות ההרשאות החדשה תוחל, והתפקיד שהוענק לקבוצה יפוג בזמן שצוין.
REST
כדי לאפשר גישה עד לזמן ספציפי צריך לפעול לפי התבנית של קריאה-עדכון-כתיבה.
קודם כל, קוראים את מדיניות ההרשאות של הפרויקט:
ה-method projects.getIamPolicy של ה-API של מנהל המשאבים מחזירה את מדיניות ההרשאות של הפרויקט.
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
-
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . מזהי פרויקטים הם מחרוזות אלפאנומריות, כמוmy-project. -
POLICY_VERSION: גרסת המדיניות שתוחזר. בבקשות צריך לציין את הגרסה הכי עדכנית של המדיניות (3). פרטים נוספים מופיעים במאמר ציון גרסת מדיניות בזמן אחזור מדיניות.
ה-method של ה-HTTP וכתובת ה-URL:
POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy
תוכן בקשת JSON:
{
"options": {
"requestedPolicyVersion": POLICY_VERSION
}
}
כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:
אתם אמורים לקבל תגובת JSON שדומה לזו:
{
"version": 1,
"etag": "BwWKmjvelug=",
"bindings": [
{
"role": "roles/owner",
"members": [
"user:my-user@example.com"
]
},
{
"role": "roles/iam.securityReviewer",
"members": [
"group:my-group@example.com"
]
}
]
}
בשלב הבא, משנים את מדיניות ההרשאות כדי שתאפשר גישה עד לזמן ספציפי. חשוב לוודא ששיניתם את השדה version לערך 3:
{
"version": 3,
"etag": "BwWKmjvelug=",
"bindings": [
{
"role": "roles/owner",
"members": [
"user:my-user@example.com"
]
},
{
"role": "roles/iam.securityReviewer",
"members": [
"group:my-group@example.com"
],
"condition": {
"title": "Expires_July_1_2020",
"description": "Expires on July 1, 2020",
"expression":
"request.time < timestamp('2020-07-01T00:00:00.000Z')"
}
}
]
}לבסוף, כותבים את מדיניות ההרשאה המעודכנת:
ה-method projects.setIamPolicy של ה-API של מנהל המשאבים מגדירה את מדיניות ההרשאה שנשלחה בבקשה בתור המדיניות החדשה של הפרויקט.
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
-
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . מזהי פרויקטים הם מחרוזות אלפאנומריות, כמוmy-project.
ה-method של ה-HTTP וכתובת ה-URL:
POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy
תוכן בקשת JSON:
{
"policy": {
"version": 3,
"etag": "BwWKmjvelug=",
"bindings": [
{
"role": "roles/owner",
"members": [
"user:my-user@example.com"
]
},
{
"role": "roles/iam.securityReviewer",
"members": [
"group:my-group@example.com"
],
"condition": {
"title": "Expires_July_1_2020",
"description": "Expires on July 1, 2020",
"expression":
"request.time < timestamp('2020-07-01T00:00:00.000Z')"
}
}
]
}
}
כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:
התגובה מכילה את מדיניות ההרשאה המעודכנת.
ניהול הגישה לפי ימים/שעות בשבוע
אפשר להשתמש בקישור תפקידים מותנה כדי להעניק גישה למשאב רק בימים מסוימים או בשעות מסוימות בשבוע על בסיס קבוע.
למשל, שימו לב לתרחיש הבא: לחברה בשם ExampleCo יש פרויקט בקרת איכות. לכל חברי צוות ה-QA נדרש תפקיד עם הרשאות מתקדמות כדי להשלים את המשימות שלהם. חברת ExampleCo חייבת לציית לחוקי העבודה במיקום שלהם, שמגבילים את שעות העבודה בימים שני עד שישי מ-9:00 עד 17:00. כדי לוודא שהעובדים יוכלו לגשת ל-Google Cloud רק במהלך שבוע העבודה ובמהלך שעות העבודה הקבועות, ב-ExampleCo יכולים להשתמש בתנאים של תאריך/שעה.
כך מעניקים גישה למשאב של הפרויקט על בסיס קבוע רק בימים מסוימים בשבוע או בשעות מסוימות:
המסוף
נכנסים לדף IAM במסוף Google Cloud .
מאתרים את חשבון המשתמש הרצוי מרשימת חשבונות המשתמש ולוחצים על הלחצן .
בחלונית Edit permissions מאתרים את התפקיד שרוצים להגדיר תנאי לגביו. לאחר מכן, בקטע IAM condition (optional), לוחצים על Add IAM condition.
בחלונית Edit condition מזינים שם לתנאי, ואפשר גם להזין תיאור שלו.
אפשר להוסיף ביטוי לתנאי באמצעות הכלי להגדרת תנאים או באמצעות עורך התנאים. הכלי להגדרת תנאים הוא ממשק אינטראקטיבי שבו בוחרים את סוג התנאי, האופרטור ופרטים רלוונטיים אחרים של הביטוי. עורך התנאים הוא ממשק מבוסס-טקסט שבו מזינים ישנית ביטוי בתחביר CEL.
הכלי להגדרת תנאים:
- לוחצים על הוספה.
- בתפריט הנפתח Condition type, בוחרים באפשרות Time Schedule Day of Week.
- בתפריט הנפתח Operator, בוחרים באפשרות After or On.
- בתפריט הנפתח Day of Week, בוחרים באפשרות Monday.
- בתפריט הנפתח Choose a time zone, בוחרים את אזור הזמן הרצוי.
- מוודאים שהאופרטור And נבחר בצד שמאל, ואז לוחצים שוב על Add.
- בתפריט הנפתח Condition type, בוחרים באפשרות Time Schedule Day of Week.
- בתפריט הנפתח Operator, בוחרים באפשרות Before or On.
- בתפריט הנפתח Day of Week, בוחרים באפשרות Friday.
- בתפריט הנפתח Choose a time zone, בוחרים את אזור הזמן הרצוי.
בשלב הזה, הגדרתם את הגישה רק בימים שני עד שישי. עכשיו, מגדירים את הגישה מהשעה 09:00 עד 17:00.
- מוודאים שהאופרטור And נבחר בצד שמאל, ואז לוחצים שוב על Add.
בתפריט הנפתח Condition type, בוחרים באפשרות Time Schedule Hour of Day.
- בתפריט הנפתח Operator, בוחרים באפשרות After or On.
- בתפריט הנפתח Hour of Day, בוחרים באפשרות 9 (9 בבוקר).
- בתפריט הנפתח Choose a time zone, בוחרים את אזור הזמן הרצוי.
- בתפריט הנפתח Condition type, בוחרים באפשרות Time Schedule Hour of Day.
- בתפריט הנפתח Operator, בוחרים באפשרות Before or On. שימו לב שכשבוחרים באפשרות הזאת, הערך 'On' ייבדק באופן לוגי לכל השעות שבין 17:00 ל-17:59. כדי להגדיר את הגישה כך שהתוקף שלה יפוג בשעה 16:59, עליכם לוודא שהשעה מוגדרת ל-16 במקום ל-17.
- בתפריט הנפתח Hour of Day, בוחרים באפשרות 17 (5 אחה"צ).
- בתפריט הנפתח Choose a time zone, בוחרים את אזור הזמן הרצוי.
- לוחצים על Save כדי להחיל את התנאי.
- לאחר שהחלונית Edit condition נסגרת, לוחצים שוב על Save בחלונית Edit permissions כדי לעדכן את מדיניות ההרשאות.
בשלב הזה הגדרתם את הגישה בימים שני עד שישי, מ-09:00 עד 17:00.
עורך התנאים:
לוחצים על הכרטיסייה Condition editor ומזינים את הביטוי הבא (מחליפים את הערכים הזמניים לשמירת מקום (placeholder) לערכים שלכם):
request.time.getHours("Europe/Berlin") >= 9 && request.time.getHours("Europe/Berlin") <= 17 && request.time.getDayOfWeek("Europe/Berlin") >= 1 && request.time.getDayOfWeek("Europe/Berlin") <= 5אחרי שמוסיפים את הביטוי, אפשר לבחור לתקף את התחביר של CEL בלחיצה על Run Linter מעל לתיבת הטקסט בפינה הימנית העליונה.
לוחצים על Save כדי להחיל את התנאי.
לאחר שהחלונית Edit condition נסגרת, לוחצים שוב על Save בחלונית Edit permissions כדי לעדכן את מדיניות ההרשאות.
gcloud
כללי המדיניות מוגדרים באמצעות התבנית קריאה-עדכון-כתיבה.
מפעילים את הפקודה gcloud projects get-iam-policy כדי לקבל את מדיניות ההרשאות הנוכחית של הפרויקט. בדוגמה הבאה, מתבצעת הורדה של גרסת ה-JSON של מדיניות ההרשאות לנתיב בדיסק.
פקודה:
gcloud projects get-iam-policy project-id --format=json > filepath
מתבצעת הורדה של פורמט ה-JSON של מדיניות ההרשאות:
{
"bindings": [
{
"members": [
"user:my-user@example.com"
],
"role": "roles/owner"
},
{
"members": [
"group:my-group@example.com"
],
"role": "roles/bigquery.dataViewer"
}
],
"etag": "BwWKmjvelug=",
"version": 1
}
כדי להגדיר את מדיניות ההרשאות עם הרשאת גישה מתוזמנת, צריך להוסיף את ביטוי התנאי המודגש הבא (מחליפים את חותמת הזמן לחותמת זמן שלכם). ה-CLI של gcloud מעדכן את הגרסה באופן אוטומטי:
{
"bindings": [
{
"members": [
"user:my-user@example.com"
],
"role": "roles/owner"
},
{
"members": [
"group:my-group@example.com"
],
"role": "roles/bigquery.dataViewer",
"condition": {
"title": "Business_hours",
"description": "Business hours Monday-Friday",
"expression": "request.time.getHours('Europe/Berlin') >= 9 && request.time.getHours('Europe/Berlin') <= 17 && request.time.getDayOfWeek('Europe/Berlin') >= 1 && request.time.getDayOfWeek('Europe/Berlin') <= 5"
}
}
],
"etag": "BwWKmjvelug=",
"version": 3
}בשלב הבא מגדירים את מדיניות ההרשאות החדשה על-ידי הפעלת הפקודה gcloud projects set-iam-policy:
gcloud projects set-iam-policy project-id filepath
מדיניות ההרשאות החדשה תוחל והתפקיד שהוענק לקבוצה יאפשר גישה בין הימים והשעות שצוינו.
REST
כדי לאפשר גישה מתוזמנת צריך לפעול לפי התבנית של קריאה-עדכון-כתיבה.קודם כל, קוראים את מדיניות ההרשאות של הפרויקט:
ה-method projects.getIamPolicy של ה-API של מנהל המשאבים מחזירה את מדיניות ההרשאות של הפרויקט.
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
-
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . מזהי פרויקטים הם מחרוזות אלפאנומריות, כמוmy-project. -
POLICY_VERSION: גרסת המדיניות שתוחזר. בבקשות צריך לציין את הגרסה הכי עדכנית של המדיניות (3). פרטים נוספים מופיעים במאמר ציון גרסת מדיניות בזמן אחזור מדיניות.
ה-method של ה-HTTP וכתובת ה-URL:
POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy
תוכן בקשת JSON:
{
"options": {
"requestedPolicyVersion": POLICY_VERSION
}
}
כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:
אתם אמורים לקבל תגובת JSON שדומה לזו:
{
"version": 1,
"etag": "BwWKmjvelug=",
"bindings": [
{
"role": "roles/owner",
"members": [
"user:my-user@example.com"
]
},
{
"role": "roles/bigquery.dataViewer",
"members": [
"group:my-group@example.com"
]
}
]
}
בשלב הבא, מעדכנים את מדיניות ההרשאות כך שתאפשר גישה מתוזמנת.
מוסיפים את ביטוי התנאי המודגש הבא (מחליפים את חותמת הזמן לחותמת זמן שלכם). חשוב לוודא שעדכנתם את השדה version לערך 3:
{
"etag": "BwWKmjvelug=",
"version": 3,
"bindings": [
{
"role": "roles/owner",
"members": [
"user:my-user@example.com"
]
},
{
"role": "roles/bigquery.dataViewer",
"members": [
"group:my-group@example.com"
],
"condition": {
"title": "Business_hours",
"description": "Business hours Monday-Friday",
"expression":
"request.time.getHours('Europe/Berlin') >= 9 &&
request.time.getHours('Europe/Berlin') <= 17 &&
request.time.getDayOfWeek('Europe/Berlin') >= 1 &&
request.time.getDayOfWeek('Europe/Berlin') <= 5"
}
}
]
}
רכיב ה-method projects.setIamPolicy של ממשקי ה-API של Resource Manager מגדיר את מדיניות ההרשאות שנשלחה בבקשה בתור המדיניות החדשה של הפרויקט.
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
-
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . מזהי פרויקטים הם מחרוזות אלפאנומריות, כמוmy-project.
ה-method של ה-HTTP וכתובת ה-URL:
POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy
תוכן בקשת JSON:
{
"policy": {
"etag": "BwWKmjvelug=",
"version": 3,
"bindings": [
{
"role": "roles/owner",
"members": [
"user:my-user@example.com"
]
},
{
"role": "roles/bigquery.dataViewer",
"members": [
"group:my-group@example.com"
],
"condition": {
"title": "Business_hours",
"description": "Business hours Monday-Friday",
"expression": "request.time.getHours('Europe/Berlin') >= 9 && request.time.getHours('Europe/Berlin') <= 17 && request.time.getDayOfWeek('Europe/Berlin') >= 1 && request.time.getDayOfWeek('Europe/Berlin') <= 5"
}
}
]
}
}
כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:
התגובה מכילה את מדיניות ההרשאה המעודכנת.
המאמרים הבאים
- איך מנהלים קישורי תפקידים מותנים
- איך מאתרים שגיאות בכללי מדיניות ההרשאות
- איך משתמשים בקישורי תפקידים מותנים כדי לנהל הרשאות גישה 'בדיוק בזמן' לפרויקטים