בדף הזה מוסבר איך לדמות שינוי במדיניות הרשאות של IAM באמצעות סימולטור המדיניות. בנוסף, נסביר איך לפרש את תוצאות הסימולציה ואיך להחיל את מדיניות ההרשאה המדומה אם תבחרו לעשות זאת.
התכונה הזו בודקת את הגישה רק על סמך מדיניות ההרשאה.
כדי ללמוד איך לדמות שינויים בסוגים אחרים של מדיניות, אפשר לעיין במאמרים הבאים:
- בדיקת שינויים במדיניות הדחייה באמצעות Policy Simulator
- בדיקת שינויים במדיניות הארגון באמצעות Policy Simulator
- בדיקת שינויים במדיניות לקביעת גבול הגישה לחשבונות משתמשים באמצעות סימולטור המדיניות
לפני שמתחילים
-
מפעילים את Policy Simulator API ואת Resource Manager API.
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (
roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאהserviceusage.services.enable. איך מקצים תפקידים - אופציונלי: איך סימולטור המדיניות עובד עם כללי מדיניות הרשאה
ההרשאות הנדרשות
לפני שמדמים שינוי במדיניות הרשאות, צריך לוודא שיש לכם את ההרשאות המתאימות. כדי להריץ סימולציה, צריך לתת הרשאות מסוימות. הרשאות אחרות לא נדרשות, אבל הן עוזרות לקבל את התוצאות המלאות ביותר מהסימולציה.
למידע נוסף על תפקידים בניהול זהויות והרשאות גישה (IAM), אפשר לעיין במאמר הסבר על התפקידים.
הרשאות נדרשות למשאב היעד
משאב היעד של הסימולציה הוא המשאב שמדיניות ההרשאות שלו עוברת סימולציה.
כדי לקבל את ההרשאות שדרושות להרצת סימולציה, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים במשאב היעד:
- צפייה במאגר משאבי הענן (
roles/cloudasset.viewer) - אדמין בסימולטור (
roles/policysimulator.admin) - בודק אבטחה (
roles/iam.securityReviewer) -
החלת שינויים מסימולציה במדיניות:
Security Admin (
roles/iam.securityAdmin)
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
התפקידים המוגדרים מראש האלה כוללים את ההרשאות שנדרשות להרצת סימולציה. כדי לראות בדיוק אילו הרשאות נדרשות, אפשר להרחיב את הקטע ההרשאות הנדרשות:
ההרשאות הנדרשות
כדי להריץ סימולציה, צריך את ההרשאות הבאות:
-
cloudasset.assets.searchAllResources -
policysimulator.replays.run -
service.resource.getIamPolicy, כאשרresourceהוא סוג המשאב של משאב היעד ו-serviceהוא השם של שירות Google Cloud שבבעלותו המשאב הזה. -
החלת שינויים מסימולציה במדיניות:
service.resource.setIamPolicy, כאשרresourceהוא סוג המשאב של משאב היעד ו-serviceהוא השם של השירות Google Cloud שבבעלותו המשאב הזה.
יכול להיות שתקבלו את ההרשאות האלה באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש אחרים.
הרשאות נדרשות למשאבי המארח
משאב המארח של סימולציה הוא הפרויקט, התיקייה או הארגון שיוצרים ומריצים את הסימולציה. לא צריך להיות קשר בין משאב המארח לבין משאב היעד.
אופן ההגדרה של משאב המארח תלוי בפלטפורמה שבה אתם משתמשים.
המסוף
משאב המארח הוא הפרויקט, התיקייה או הארגון שמופיעים בכלי לבחירת משאבים.

כדי לשנות את משאב המארח, בוחרים פרויקט, תיקייה או ארגון אחרים בכלי לבחירת משאבים.
gcloud
משאב המארח הוא פרויקט המכסה הנוכחי. כדי להגדיר את הפרויקט לצורכי מכסה, משתמשים בפקודה gcloud auth application-default set-quota-project.
REST
מציינים ידנית את משאב המארח בכל פעם ששולחים בקשה. פרטים נוספים זמינים בקטע הדמיה של שינוי במדיניות בדף הזה.
כדי לקבל את ההרשאות שנדרשות להרצת סימולציה, צריך לבקש מהאדמין להקצות לכם את תפקיד ה-IAM Simulator Admin (roles/policysimulator.admin) במשאב המארח.
כדי לקרוא הסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
זהו תפקיד שמוגדר מראש וכולל את ההרשאות שנדרשות להפעלת סימולציה. כדי לראות בדיוק אילו הרשאות נדרשות, אפשר להרחיב את הקטע ההרשאות הנדרשות:
ההרשאות הנדרשות
כדי להריץ סימולציה, צריך את ההרשאות הבאות:
-
policysimulator.replayResults.list -
policysimulator.replays.create -
policysimulator.replays.get
יכול להיות שתקבלו את ההרשאות האלה באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש אחרים.
הרשאות מומלצות
כדי לקבל את התוצאות המלאות ביותר מהסימולציה, מומלץ לוודא שיש לכם הרשאות מסוימות ב-IAM וב-Google Workspace. אם אין לכם חלק מההרשאות האלה או את כולן, עדיין תוכלו להריץ סימולציה. עם זאת, אם תריצו סימולציה בלי ההרשאות האלה, יכול להיות שמספר השינויים הלא ידועים בגישה יהיה גבוה יותר, כי יכול להיות שלא תוכלו לאחזר מידע שישפיע על תוצאות הסימולציה.
הרשאות IAM מומלצות
מומלץ שהתפקיד שלכם בארגון יהיה "בודק אבטחה" (roles/iam.securityReviewer) כשמריצים סימולציה.
לחלופין, אם כבר יש לכם את התפקיד Security Admin (roles/iam.securityAdmin), אתם לא צריכים לקבל תפקידים נוספים.
התפקידים האלה מעניקים לכם את ההרשאות הבאות, שיעזרו לכם לקבל את התוצאות המלאות ביותר מהסימולציה:
-
iam.roles.getו-iam.roles.listבכל הפרויקטים, התיקיות או הארגונים הרלוונטיים שבהם מוגדרים תפקידים בהתאמה אישית. פרויקט, תיקייה או ארגון רלוונטיים אם הם ישות אב או צאצא של המשאב שמדיניות ההרשאות שלו מדמה.
service.resource.getIamPolicy, כאשרresourceהוא השם של סוג משאב שיכולה להיות לו מדיניות הרשאה, ו-serviceהוא השם שלGoogle Cloud השירות שבבעלותו המשאב הזה.כשמריצים סימולציה, מומלץ להגדיר את ההרשאה הזו לכל משאב שעומד בקריטריונים הבאים:
- סימולטור המדיניות תומך במשאב.
למשאב יש מדיניות הרשאות שעשויה להשפיע על הגישה של המשתמש. התנאי הזה מתקיים אם אחד מהמצבים הבאים מתרחש:
- המשאב הוא צאצא של המשאב שמדיניות ההרשאות שלו מדמה, והוא מופיע ביומני הגישה הרלוונטיים.
- המשאב הוא משאב קודם בהיררכיה של המשאב שמדיניות ההרשאות שלו מדומה.
לדוגמה, נניח שרוצים לדמות מדיניות הרשאה לפרויקט. אם יומני הגישה כוללים ניסיון גישה לקטגוריה של Cloud Storage בפרויקט, צריך את ההרשאה
storage.buckets.getIamPolicyבקטגוריה הזו. אם לפרויקט יש תיקיית אב עם מדיניות הרשאות, צריך גם את ההרשאהresourcemanager.folders.getIamPolicyבתיקייה הזו.
הרשאות מומלצות ב-Google Workspace
מומלץ לוודא שיש לכם הרשאה לאחזר מידע על חברות בקבוצה עבור כל קבוצה ב-Google במדיניות ההרשאות המקורית ובמדיניות ההרשאות המוצעת.
בדרך כלל, לסופר-אדמינים ולאדמינים של קבוצות ב-Google Workspace יש גישה לצפייה בחברים בקבוצה. אם אין לכם הרשאות סופר-אדמין או אדמין קבוצה, אתם צריכים לבקש מהאדמין שלכם ב-Google Workspace ליצור תפקיד אדמין מותאם אישית ב-Google Workspace שכולל את ההרשאה groups.read (שנמצאת בקטע הרשאות Admin API) ולהקצות לכם אותה. כך תוכלו לראות את החברים בכל הקבוצות בדומיין, ולבצע סימולציה של שינויים במדיניות ההרשאות בצורה יעילה יותר.
סימולציה של שינוי במדיניות
כדי לדמות שינוי במדיניות הרשאה:
המסוף
בדוגמה הבאה מוצג איך לדמות שינוי במדיניות ההרשאות של פרויקט. אבל אפשר לדמות שינוי במדיניות הרשאה לכל משאב שיש לו מדיניות הרשאה.
עורכים את ההרשאות של חשבון המשתמש ואז, במקום ללחוץ על שמירה, לוחצים על בדיקת השינויים:
נכנסים לדף IAM במסוף Google Cloud .
יוצרים שינוי מוצע במדיניות ההרשאות על ידי עריכת ההרשאות של חשבון משתמש קיים:
- מוצאים את חשבון המשתמש שרוצים לערוך את הגישה שלו ולוחצים על לחצן Edit משמאל.
- כדי לערוך את הרשאות הגישה של חשבון המשתמש, מוסיפים תפקיד חדש או מבטלים או משנים תפקיד קיים.
כדי לדמות את השינוי המוצע, לוחצים על בדיקת שינויים.
אחרי כמה דקות, התוצאות של הסימולציה יוצגו במסוף כרשימה של שינויים בגישה. Google Cloud מידע נוסף מופיע בקטע הסבר על תוצאות סימולטור המדיניות בדף הזה.

אם לא היה שינוי בגישה בין מדיניות ההרשאות הקיימת לבין מדיניות ההרשאות המדומה, לא יוצגו שינויים בגישה במסוף Google Cloud .
gcloud
כדי לדמות שינוי במדיניות הרשאה, פועלים לפי התבנית קריאה-שינוי-כתיבה, אבל מדמים את מדיניות ההרשאה במקום לכתוב אותה.
קוראים את מדיניות ההרשאות הקיימת באמצעות הפעלת הפקודה הבאה:
gcloud resource-type get-iam-policy resource-id --format=format > filepath
מחליפים את הערכים הבאים:
-
resource-type: סוג המשאב שעבורו רוצים לבצע סימולציה של מדיניות הרשאה. לדוגמה,projects. -
resource-id: המזהה של המשאב שרוצים לבצע סימולציה של מדיניות ההרשאה שלו. לדוגמה,my-project. -
format: הפורמט של התגובה. אפשר להשתמש בערךjsonאוyaml. -
filepath: הנתיב לקובץ פלט חדש של מדיניות ההרשאה.
לדוגמה, הפקודה הבאה מקבלת את מדיניות ההרשאה של הפרויקט
my-projectבפורמט JSON ושומרת אותה בספריית הבית של המשתמש:gcloud projects get-iam-policy my-project --format=json > ~/policy.json
-
משנים את מדיניות ההרשאה מסוג JSON או YAML שהוחזרה באמצעות הפקודה
get-iam-policyכך שתשקף את השינויים שרוצים לדמות.יש כמה סוגים של שינויים שאפשר לבצע במדיניות ההרשאה. לדוגמה, תוכלו להוסיף או להסיר חשבון משתמש מקישור בין תפקידים, או להסיר קישור בין תפקידים ממדיניות ההרשאות.
מריצים את הפקודה הבאה כדי לדמות את השינוי במדיניות ההרשאה:
gcloud iam simulator replay-recent-access \ full-resource-name \ filepath \ --format=format
מחליפים את הערכים הבאים:
full-resource-name: שם המשאב המלא של המשאב שרוצים לדמות את מדיניות ההרשאה שלו.השם המלא של המשאב הוא URI שכולל את שם השירות ואת הנתיב למשאב. לדוגמה, אם אתם מדמים מדיניות הרשאה לפרויקט, אתם צריכים להשתמש ב-
//cloudresourcemanager.googleapis.com/projects/project- id, כאשרproject-idהוא המזהה של הפרויקט שמדיניות ההרשאה שלו מדמה.רשימה של פורמטים של שמות מלאים של משאבים זמינה במאמר שמות מלאים של משאבים.
filepath: הנתיב לקובץ שמכיל את מדיניות ההרשאה שרוצים לדמות. לדוגמה,~/proposed_policy.json.
format: הפורמט של התגובה. לדוגמה,jsonאוyaml.
אחרי כמה דקות, הפקודה מדפיסה רשימה של תוצאות ההפעלה מחדש, עם הסבר על השינויים בגישה של חשבון המשתמש אם תופעל מדיניות ההרשאה המוצעת. בתוצאות האלה מפורטות גם שגיאות שהתרחשו במהלך הסימולציה, כולל שגיאות שנובעות מסוגי משאבים לא נתמכים.
בקטע הסבר על התוצאות של סימולטור המדיניות בדף הזה מוסבר איך לקרוא את התוצאות. כדי ללמוד איך לשמור את תוצאות הסימולציה במקום להדפיס אותן, אפשר לעיין במאמר שמירת תוצאות הסימולציה.
הדוגמה הבאה היא של תשובה לסימולציה של מדיניות הרשאות שכוללת את המשתמש
my-user@example.com. במקרה כזה, אם השינוי המוצע יוחל, יכול להיות שלמשתמשmy-user@example.comכבר לא יהיו ההרשאותresourcemanager.projects.listו-resourcemanager.projects.getבפרויקטmy-project, ובטוח שלא תהיה לו יותר ההרשאהresourcemanager.projects.updateבפרויקטmy-project:[ { "accessTuple": { "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project", "permission": "resourcemanager.projects.list", "principal": "my-user@example.com" }, "diff": { "accessDiff": { "accessChange": "ACCESS_MAYBE_REVOKED", "baseline": { "accessState": "GRANTED" }, "simulated": { "accessState": "UNKNOWN_INFO_DENIED", "errors": [ { "code": 7, "details": [ { "@type": "type.googleapis.com/google.rpc.ResourceInfo", "description": "Missing permission to retrieve IAM policies above the resource in hierarchy.", "resourceName": "//cloudresourcemanager.googleapis.com/projects/my-project", "resourceType": "cloudresourcemanager.googleapis.com/projects" } ], "message": "Missing permission to get relevant IAM policies." } ], "policies": [ { "access": "UNKNOWN_INFO_DENIED", "policy": {} } ] } } }, "lastSeenDate": { "day": 12, "month": 1, "year": 2021 } }, { "accessTuple": { "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project", "permission": "resourcemanager.projects.get", "principal": "my-user@example.com" }, "diff": { "accessDiff": { "accessChange": "ACCESS_MAYBE_REVOKED", "baseline": { "accessState": "GRANTED" }, "simulated": { "accessState": "UNKNOWN_INFO_DENIED", "errors": [ { "code": 7, "details": [ { "@type": "type.googleapis.com/google.rpc.ResourceInfo", "description": "Missing permission to view group membership.", "resourceName": "group:everyone@example.com", "resourceType": "Google group" } ], "message": "Missing permission to view group membership." }, { "code": 7, "details": [ { "@type": "type.googleapis.com/google.rpc.ResourceInfo", "description": "Missing permission to retrieve IAM policies above the resource in hierarchy.", "resourceName": "//cloudresourcemanager.googleapis.com/projects/my-project", "resourceType": "cloudresourcemanager.googleapis.com/projects" } ], "message": "Missing permission to get relevant IAM policies." } ], "policies": [ { "access": "UNKNOWN_INFO_DENIED", "bindingExplanations": [ { "access": "UNKNOWN_INFO_DENIED", "memberships": { "group:everyone@example.com": { "membership": "MEMBERSHIP_UNKNOWN_INFO_DENIED" } }, "role": "roles/owner" } ], "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project", "policy": { "bindings": [ { "members": [ "group:everyone@example.com" ], "role": "roles/owner" } ], "etag": "BwWgJSIInYA=", "version": 3 } }, { "access": "UNKNOWN_INFO_DENIED", "policy": {} } ] } } }, "lastSeenDate": { "day": 10, "month": 1, "year": 2021 } }, { "accessTuple": { "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project", "permission": "resourcemanager.projects.update", "principal": "my-user@example.com" }, "diff": { "accessDiff": { "accessChange": "ACCESS_REVOKED", "baseline": { "accessState": "GRANTED" }, "simulated": { "accessState": "NOT_GRANTED" } } }, "lastSeenDate": { "day": 15, "month": 1, "year": 2021 } }, { "accessTuple": {}, "error": { "code": 12, "details": [ { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "domain": "policysimulator.googleapis.com", "metadata": { "permission": "storage.objects.create" }, "reason": "UNSUPPORTED_RESOURCE" }, { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "domain": "policysimulator.googleapis.com", "metadata": { "permission": "storage.objects.setIamPolicy" }, "reason": "UNSUPPORTED_RESOURCE" }, { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "domain": "policysimulator.googleapis.com", "metadata": { "permission": "storage.objects.delete" }, "reason": "UNSUPPORTED_RESOURCE" }, { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "domain": "policysimulator.googleapis.com", "metadata": { "permission": "storage.objects.update" }, "reason": "UNSUPPORTED_RESOURCE" }, { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "domain": "policysimulator.googleapis.com", "metadata": { "permission": "pubsub.topics.publish" }, "reason": "UNSUPPORTED_RESOURCE" }, { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "domain": "policysimulator.googleapis.com", "metadata": { "permission": "storage.objects.list" }, "reason": "UNSUPPORTED_RESOURCE" }, { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "domain": "policysimulator.googleapis.com", "metadata": { "permission": "storage.objects.getIamPolicy" }, "reason": "UNSUPPORTED_RESOURCE" }, { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "domain": "policysimulator.googleapis.com", "metadata": { "permission": "storage.objects.get" }, "reason": "UNSUPPORTED_RESOURCE" } ], "message": "Simulator does not yet support all resource types for 8 removed permissions." } } ]
אם לא היה שינוי בגישה בין מדיניות ההרשאות הקיימת לבין מדיניות ההרשאות המדומה, הפקודה מדפיסה
No access changes found in the replay.
REST
כדי לדמות שינוי במדיניות הרשאה, צריך לפעול לפי התבנית קריאה-שינוי-כתיבה, אבל במקום לכתוב את מדיניות ההרשאה, יוצרים ומריצים סימולציה.
קוראים את מדיניות ההרשאה למשאב.
כדי לקבל את מדיניות ההרשאות של פרויקט, משתמשים ב-method
projects.getIamPolicyשל Resource Manager 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:project-owner@example.com" ] }, { "role": "roles/iam.securityReviewer", "members": [ "user:fatima@example.com" ] } ] }-
משנים את מדיניות ההרשאות שמוחזרת כך שתשקף את השינויים שרוצים לדמות.
יש כמה סוגים של שינויים שאפשר לבצע במדיניות ההרשאה. לדוגמה, תוכלו להוסיף או להסיר חשבון משתמש מקישור בין תפקידים, או להסיר קישור בין תפקידים ממדיניות ההרשאות.
יוצרים סימולציה או מפעילים אותה מחדש עם מדיניות ההרשאה ששונתה.
כדי ליצור הפעלה חוזרת לפרויקט, לתיקייה או לארגון, משתמשים ב-method
replays.createשל Policy Simulator API.לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
-
HOST_RESOURCE_TYPE: סוג המשאב שיארח את ההפעלה החוזרת. הערך הזה חייב להיותprojects,foldersאוorganizations. -
HOST_RESOURCE_ID: המזהה של משאב המארח, לדוגמה,my-project. -
TARGET_FULL_RESOURCE_NAME: שם המשאב המלא של המשאב שאת המדיניות שלו רוצים לדמות. המשאב הזה יכול להיות כל משאב שתומך במדיניות IAM, והוא לא חייב להיות קשור למשאב המארח בשום צורה.השם המלא של המשאב הוא URI שכולל את שם השירות ואת הנתיב למשאב. לדוגמה, אם אתם מדמים מדיניות של פרויקט, תשתמשו ב-
//cloudresourcemanager.googleapis.com/projects/PROJECT_ID, כאשרPROJECT_IDהוא מזהה הפרויקט של המדיניות שאתם מדמים.רשימה מלאה של פורמטים של שמות משאבים זמינה במאמר בנושא שמות מלאים של משאבים.
-
POLICY: המדיניות שרוצים לבצע לגביה סימולציה. דוגמה למדיניות מופיעה ב מאמר העזר בנושא מדיניות.כדי לדמות כמה כללי מדיניות, צריך לכלול כמה צמדים של
"OBJECT_FULL_RESOURCE_NAME" : POLICYבגוף הבקשה. -
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . מזהי פרויקטים הם מחרוזות אלפאנומריות, כמוmy-project.
ה-method של ה-HTTP וכתובת ה-URL:
POST https://policysimulator.googleapis.com/v1/HOST_RESOURCE_TYPE/HOST_RESOURCE_ID/locations/global/replays
תוכן בקשת JSON:
{ "config": { "policyOverlay": { "TARGET_FULL_RESOURCE_NAME" : POLICY } } }כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:
התשובה מכילה את השם של פעולה שמייצגת את ההפעלה מחדש:
{ "name": "operations/6de23e63-f61a-4b8c-b502-34d717d2d7f8", "metadata": { "type_url": "type.googleapis.com/google.cloud.policysimulator.v1.ReplayOperationMetadata" } }-
מבצעים שאילתות לגבי השיטה
operations.getעד שההפעלה חוזרת מסתיימת.כדי לדגום פעולה ממושכת מסוימת, מומלץ להפעיל שוב ושוב את השיטה
operations.getעד שהתגובה כוללת את השדה"done": trueואת השדהnameעם השם של ההפעלה החוזרת שהושלמה. צריך להשתמש בהשהיה מעריכית קטועה לפני ניסיון חוזר כדי ליצור עיכוב בין כל בקשה.כדי לקבל את הסטטוס של הפעלה חוזרת, משתמשים ב-method
operations.getשל Policy Simulator API.לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
-
OPERATION_NAME: השם של פעולת ההפעלה מחדש, כולל הקידומתoperations. מעתיקים את הערך הזה מהשדהnameשל תגובתreplays.create. לדוגמה:operations/6de23e63-f61a-4b8c-b502-34d717d2d7f8 -
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . מזהי פרויקטים הם מחרוזות אלפאנומריות, כמוmy-project.
שיטת ה-HTTP וכתובת ה-URL:
GET https://policysimulator.googleapis.com/v1/OPERATION_NAME
כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:
פעולות שמתבצעות מחזירות תגובה כמו זו:
{ "name": "operations/42083b6b-3788-41b9-ae39-e97d7615a22d", "metadata": { "@type": "type.googleapis.com/google.cloud.policysimulator.v1.ReplayOperationMetadata", "startTime": "2021-01-15T05:34:14.732Z" } }פעולות שהושלמו מחזירות תגובה כמו זו:
{ "name": "operations/89ab4892-9605-4c84-aedb-4fce4fc5195b", "metadata": { "@type": "type.googleapis.com/google.cloud.policysimulator.v1.ReplayOperationMetadata", "startTime": "2021-01-15T05:40:15.922Z" }, "done": true, "response": { "@type": "type.googleapis.com/google.cloud.policysimulator.v1.Replay", "replay": { "name": "projects/my-project/locations/global/replays/89ab4892-9605-4c84-aedb-4fce4fc5195b", "state": SUCCEEDED, "config": {}, "resultsSummary": { "logCount": 1319, "unchangedCount": 1169, "differenceCount": 149, "errorCount": 1, "oldestDate": { "year": 2020, "month": 10, "day": 15 }, "newestDate": { "year": 2021, "month": 1, "day": 12 } } } } }-
לקבל את התוצאות של ההפעלה החוזרת.
כדי לקבל את התוצאות של הפעלה חוזרת, משתמשים ב-method
replays.results.listשל Policy Simulator API.לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
-
REPLAY_NAME: השם של ההפעלה החוזרת שרוצים לאחזר את התוצאות שלה. מעתיקים את הערך הזה מהשדהresponse.replay.nameבתגובהoperations.get. כוללים את כל סוגי המשאבים ואת קידומות המיקום. לדוגמה:"projects/my-project/locations/global/replays/89ab4892-9605-4c84-aedb-4fce4fc5195b" -
PAGE_SIZE: אופציונלי. המספר המקסימלי של תוצאות שיוחזרו מהבקשה הזו. אם לא מציינים ערך, השרת יקבע את מספר התוצאות שיוחזרו. אם מספר התוצאות גדול יותר מגודל הדף, התשובה תכיל אסימון עימוד שמשמש לאחזור של דף התוצאות הבא. -
PAGE_TOKEN: אופציונלי. אסימון העימוד שהוחזר באחת מהתשובות הקודמות באמצעות ה-method. אם יש אסימון כזה, רשימת התוצאות תתחיל מהמקום שבו הסתיימה הבקשה הקודמת. -
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . מזהי פרויקטים הם מחרוזות אלפאנומריות, כמוmy-project.
שיטת ה-HTTP וכתובת ה-URL:
GET https://policysimulator.googleapis.com/v1/REPLAY_NAME/results?pageSize=page-size&pageToken=PAGE_TOKEN
כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:
התשובה מכילה רשימה של תוצאות שמסבירות איך הגישה של חשבון המשתמש תשתנה אם המדיניות המוצעת תופעל. בתוצאות האלה מפורטות גם שגיאות שאירעו במהלך הסימולציה, בעיקר שגיאות שנובעות מסוגי משאבים שלא נתמכים.
בקטע הסבר על התוצאות של סימולטור המדיניות בדף הזה מוסבר איך לקרוא את התוצאות.
זוהי דוגמה לתשובה של סימולציית מדיניות שכוללת את המשתמש
my-user@example.com. במקרה כזה, אם השינוי המוצע יוחל, יכול להיות שלמשתמשmy-user@example.comכבר לא יהיו ההרשאותresourcemanager.projects.listו-resourcemanager.projects.getבפרויקטmy-project, ובטוח שלא תהיה לו יותר ההרשאהresourcemanager.projects.updateבפרויקטmy-project:{ "replayResults": [ { "accessTuple": { "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project", "permission": "resourcemanager.projects.list", "principal": "my-user@example.com" }, "lastSeenDate": { "day": 27, "month": 3, "year": 2020 }, "diff": { "accessDiff": { "accessChange": "ACCESS_MAYBE_REVOKED", "baseline": { "accessState": "GRANTED" }, "simulated": { "accessState": "UNKNOWN_INFO_DENIED", "errors": [ { "code": 7, "message": "Missing permission to get relevant IAM policies.", "details": [ { "@type": "type.googleapis.com/google.rpc.ResourceInfo", "description": "Missing permission to retrieve IAM policies above the resource in hierarchy.", "resourceName": "//cloudresourcemanager.googleapis.com/projects/my-project", "resourceType": "cloudresourcemanager.googleapis.com/projects" } ] } ], "policies": [ { "access": "UNKNOWN_INFO_DENIED", "policy": {} } ] } } } }, { "accessTuple": { "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project", "permission": "resourcemanager.projects.get", "principal": "my-user@example.com" }, "lastSeenDate": { "day": 27, "month": 3, "year": 2020 }, "diff": { "accessDiff": { "accessChange": "ACCESS_MAYBE_REVOKED", "baseline": { "accessState": "GRANTED" }, "simulated": { "accessState": "UNKNOWN_INFO_DENIED", "errors": [ { "code": 7, "message": "Missing permission to view group membership.", "details": [ { "@type": "type.googleapis.com/google.rpc.ResourceInfo", "description": "Missing permission to view group membership.", "resourceName": "group:everyone@example.com", "resourceType": "Google group" } ] }, { "code": 7, "message": "Missing permission to get relevant IAM policies.", "details": [ { "@type": "type.googleapis.com/google.rpc.ResourceInfo", "description": "Missing permission to retrieve IAM policies above the resource in hierarchy.", "resourceName": "//cloudresourcemanager.googleapis.com/projects/my-project", "resourceType": "cloudresourcemanager.googleapis.com/projects" } ] } ], "policies": [ { "access": "UNKNOWN_INFO_DENIED", "bindingExplanations": [ { "access": "UNKNOWN_INFO_DENIED", "memberships": { "group:everyone@example.com": { "membership": "MEMBERSHIP_UNKNOWN_INFO_DENIED" } }, "role": "roles/owner" } ], "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project", "policy": { "bindings": [ { "members": [ "group:everyone@example.com" ], "role": "roles/owner" } ], "etag": "BwWgJSIInYA=", "version": 3 } }, { "access": "UNKNOWN_INFO_DENIED", "policy": {} } ] } } } }, { "accessTuple": { "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project", "permission": "resourcemanager.projects.update", "principal": "my-user@example.com" }, "lastSeenDate": { "day": 27, "month": 3, "year": 2020 }, "diff": { "accessDiff": { "accessChange": "ACCESS_REVOKED", "baseline": { "accessState": "GRANTED" }, "simulated": { "accessState": "NOT_GRANTED" } } } }, { "accessTuple": {}, "error": { "code": 12, "message": "Simulator does not yet support all resource types for 8 removed permissions.", "details": [ { "@type": "type.googleapis.com/google.rpc.Status", "code": 12, "message": "Simulator does not yet support all resource types for 8 removed permissions.", "details": [ { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "domain": "policysimulator.googleapis.com", "metadata": { "permission": "storage.objects.create" }, "reason": "UNSUPPORTED_RESOURCE" }, { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "domain": "policysimulator.googleapis.com", "metadata": { "permission": "storage.objects.setIamPolicy" }, "reason": "UNSUPPORTED_RESOURCE" }, { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "domain": "policysimulator.googleapis.com", "metadata": { "permission": "storage.objects.delete" }, "reason": "UNSUPPORTED_RESOURCE" }, { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "domain": "policysimulator.googleapis.com", "metadata": { "permission": "storage.objects.update" }, "reason": "UNSUPPORTED_RESOURCE" }, { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "domain": "policysimulator.googleapis.com", "metadata": { "permission": "pubsub.topics.publish" }, "reason": "UNSUPPORTED_RESOURCE" }, { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "domain": "policysimulator.googleapis.com", "metadata": { "permission": "storage.objects.list" }, "reason": "UNSUPPORTED_RESOURCE" }, { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "domain": "policysimulator.googleapis.com", "metadata": { "permission": "storage.objects.getIamPolicy" }, "reason": "UNSUPPORTED_RESOURCE" }, { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "domain": "policysimulator.googleapis.com", "metadata": { "permission": "storage.objects.get" }, "reason": "UNSUPPORTED_RESOURCE" } ] } ] } } ], "nextPageToken": "AWukk3zjv80La+chWx6WNt7X8czGPLtP792gRpkNVEV/URZ/VdWzxmuJKr" }אם לא היה שינוי בגישה בין מדיניות ההרשאה הקיימת לבין מדיניות ההרשאה המדומה, הבקשה מחזירה רשימה ריקה (
{}).-
הסבר על התוצאות של סימולטור המדיניות
בסימולטור של המדיניות מדווחים על ההשפעה של שינוי מוצע במדיניות הרשאה כרשימה של שינויים בגישה. כל שינוי בגישה מייצג ניסיון גישה מ-90 הימים האחרונים שהיה מוביל לתוצאה שונה במסגרת מדיניות ההרשאה המוצעת לעומת מדיניות ההרשאה הנוכחית.
בנוסף, בסימולטור המדיניות מפורטות כל השגיאות שהתרחשו במהלך הסימולציה, כדי לעזור לכם לזהות פערים אפשריים בסימולציה.
האופן שבו השינויים והשגיאות האלה מוצגים תלוי בפלטפורמה שבה אתם משתמשים.
המסוף
בדף התוצאות של סימולטור המדיניות מוצגות תוצאות הסימולציה בכמה קטעים שונים:
שינויים במדיניות: בקטע הזה מפורטים המשאב שמציעים שינויים במדיניות ההרשאה שלו, התפקידים שמציעים להסיר והתפקידים שמציעים להוסיף.

בקטע הזה יש גם לחצן View policy diff (הצגת ההבדלים בין המדיניות). אם לוחצים על הלחצן הזה, אפשר לראות איך נראית מדיניות ההרשאות של המשאב לפני ואחרי השינויים המוצעים.

שינויים בהרשאות: בקטע הזה מופיעים מספרים של הרשאות שהוסרו והרשאות שנוספו. המספרים האלה מתארים איך ההרשאות של החשבון הראשי ישתנו אם תפעילו את השינויים המוצעים. כדי לחשב את מספר ההרשאות, המערכת משווה בין ההרשאות בתפקידים הנוכחיים של חשבון המשתמש לבין ההרשאות בתפקידים המוצעים של חשבון המשתמש, ומתעלמת מתפקידים שהועברו בירושה.

בקטע הזה יש גם לחצן View permission diff. אם לוחצים על הכפתור הזה, אפשר לראות השוואה בין ההרשאות בתפקידים הנוכחיים והמוצעים של חשבון המשתמש.
שינויים בגישה ב-90 הימים האחרונים: בקטע הזה מוצגות תוצאות שונות של ניסיונות גישה מ-90 הימים האחרונים, בהתאם למדיניות ההרשאה המוצעת ולמדיניות ההרשאה הנוכחית. הקטע הזה כולל סיכום של שינויי הגישה וטבלה עם תוצאות מפורטות יותר.
סיכום שינויי הגישה מציג את מספר השינויים בכל סוג גישה, את מספר השגיאות והתוצאות הלא ידועות ואת מספר הניסיונות לקבל גישה עם אותה תוצאה במסגרת מדיניות ההרשאה המוצעת ומדיניות ההרשאה הנוכחית. בסיכום מוצג גם מספר ההרשאות שלא ניתן היה לבצע סימולציה שלהן. מידע נוסף זמין בקטע שגיאות שבדף הזה.

בקטע הזה מופיעה גם טבלה של שינויים בגישה. בטבלה הזו מפורטים כל ניסיונות הגישה מ-90 הימים האחרונים שהתוצאה שלהם שונה לפי מדיניות ההרשאה המוצעת ולפי מדיניות ההרשאה הנוכחית. כל רשומה כוללת את המשאב שחשבון המשתמש ניסה לגשת אליו, את התאריך של הבקשה, את חשבון המשתמש ששלח את הבקשה, את ההרשאה בבקשה ואת סטטוס הגישה במסגרת מדיניות ההרשאה המוצעת בהשוואה לסטטוס הגישה במסגרת מדיניות ההרשאה הנוכחית.

יש כמה סוגים שונים של שינויים בגישה:
שינוי בהרשאות הגישה פרטים הגישה בוטלה למשתמש הייתה גישה במסגרת מדיניות ההרשאות הנוכחית, אבל לא תהיה לו יותר גישה אחרי השינוי המוצע. יכול להיות שהגישה בוטלה התוצאה הזו יכולה להופיע מהסיבות הבאות:
הגישה ניתנה למשתמש הראשי לא הייתה גישה במסגרת מדיניות ההרשאות הנוכחית, אבל תהיה לו גישה אחרי השינוי המוצע. גישה פוטנציאלית התוצאה הזו יכולה להופיע מהסיבות הבאות:
סטטוס גישה לא ידוע הגישה של חשבון המשתמש במסגרת מדיניות ההרשאות הנוכחית ומדיניות ההרשאות המוצעת היא לא ידועה, והשינויים המוצעים עשויים להשפיע על הגישה של חשבון המשתמש. שגיאה אירעה שגיאה במהלך הסימולציה. כדי לראות פרטים נוספים על שינוי בגישה, לוחצים על השינוי בגישה. תיפתח החלונית פרטים על שינוי הגישה, שבה מוצג מידע נוסף על שינוי הגישה, כולל הגישה הקיימת של החשבון הראשי, הגישה המוצעת של החשבון הראשי ופרטים נוספים על תוצאת שינוי הגישה.

gcloud
כשמשתמשים בפקודה replay-recent-access, התגובה של gcloud CLI מכילה רשימה של replayResults.
כל תוצאה של הפעלה חוזרת מתארת ניסיון גישה שהתוצאה שלו הייתה שונה אם מדיניות ההרשאה המוצעת הייתה בתוקף בזמן הניסיון. לדוגמה, תוצאת ההפעלה החוזרת הבאה מראה שהמשתמש my-user@example.com השתמש בעבר בהרשאה resourcemanager.projects.update כדי לבצע פעולה בפרויקט my-project. עם זאת, אם מדיניות ההרשאה המוצעת הייתה בתוקף, הגישה שלהם הייתה נדחית.
{ "accessTuple": { "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project", "permission": "resourcemanager.projects.update", "principal": "my-user@example.com" }, "lastSeenDate": { "day": 15, "month": 1, "year": 2021 }, "diff": { "accessDiff": { "baseline": { "accessState": "GRANTED" }, "simulated": { "accessState": "NOT_GRANTED" }, "accessChange": "ACCESS_REVOKED" } } }
כל תוצאה של הפעלה חוזרת כוללת את השדות הבאים:
accessTuple: ניסיון הגישה שהתוצאה קשורה אליו. השדה הזה כולל את המשאב, ההרשאה והמשתמש שהיו מעורבים בניסיון הגישה.
lastSeenDate: התאריך שבו בוצע הניסיון האחרון לגשת.
diff.accessDiffאוerror: אם ההפעלה החוזרת של ניסיון הגישה מצליחה, התוצאה מכילה שדהdiff.accessDiffשמדווח על ההבדל בין התוצאות של ניסיון הגישה במסגרת מדיניות ההרשאות הנוכחית לבין התוצאות במסגרת מדיניות ההרשאות המוצעת. אם הניסיון לשחזר לא יצליח, התוצאה של השחזור תכיל שדהerrorעם תיאור של השגיאה. מידע נוסף על שגיאות בהדמיה זמין בקטע שגיאות בדף הזה.
כל הבדל בגישה כולל את הרכיבים הבאים:
-
baseline: תוצאת הגישה כשמשתמשים במדיניות ההרשאה הנוכחית. הערך הזה מדווח כאחד מהערכים הבאים:GRANTED,NOT_GRANTED,UNKNOWN_CONDITIONALאוUNKNOWN_INFO_DENIED. אם התוצאה היאUNKNOWN_CONDITIONALאוUNKNOWN_INFO_DENIED, בתשובה יפורטו גם השגיאות שמשויכות למידע הלא ידוע, וגם מדיניות ההרשאה שמשויכת לשגיאה הזו. מידע נוסף על ערכים זמין בקטע תוצאות לא ידועות בדף הזה.UNKNOWN -
simulated: תוצאת הגישה כשמשתמשים במדיניות ההרשאות המוצעת. הערך הזה מדווח כאחד מהערכים הבאים:GRANTED,NOT_GRANTED,UNKNOWN_CONDITIONALאוUNKNOWN_INFO_DENIED. אם התוצאה היאUNKNOWN_CONDITIONALאוUNKNOWN_INFO_DENIED, בתשובה יפורטו גם השגיאות שמשויכות למידע הלא ידוע, וגם מדיניות ההרשאה שמשויכת לשגיאה הזו. מידע נוסף על ערכים זמין בקטע תוצאות לא ידועות בדף הזה.UNKNOWN
accessChange: השינוי בין מצב הגישה של נקודת הבסיס לבין מצב הגישה המדומה. בטבלה הבאה מפורטת רשימה של ערכים אפשריים:שינוי בהרשאות הגישה פרטים ACCESS_REVOKEDלמשתמש הייתה גישה במסגרת מדיניות ההרשאות הנוכחית, אבל לא תהיה לו יותר גישה אחרי השינוי המוצע. ACCESS_MAYBE_REVOKEDהתוצאה הזו יכולה להופיע מהסיבות הבאות:
ACCESS_GAINEDלמשתמש הראשי לא הייתה גישה במסגרת מדיניות ההרשאות הנוכחית, אבל תהיה לו גישה אחרי השינוי המוצע. ACCESS_MAYBE_GAINEDהתוצאה הזו יכולה להופיע מהסיבות הבאות:
UNKNOWN_CHANGEהגישה של חשבון המשתמש במסגרת מדיניות ההרשאות הנוכחית ומדיניות ההרשאות המוצעת היא לא ידועה, והשינויים המוצעים עשויים להשפיע על הגישה של חשבון המשתמש.
REST
כשקוראים לשיטה replays.results.list, התגובה מכילה רשימה של replayResults.
כל תוצאה של הפעלה חוזרת מתארת ניסיון גישה שהתוצאה שלו הייתה שונה אם מדיניות ההרשאה המוצעת הייתה בתוקף בזמן הניסיון. לדוגמה, תוצאת ההפעלה החוזרת הבאה מראה שהמשתמש my-user@example.com השתמש בעבר בהרשאה resourcemanager.projects.update כדי לבצע פעולה בפרויקט my-project. עם זאת, אם מדיניות ההרשאה המוצעת הייתה בתוקף, הגישה שלהם הייתה נדחית.
{ "accessTuple": { "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project", "permission": "resourcemanager.projects.update", "principal": "my-user@example.com" }, "lastSeenDate": { "day": 15, "month": 1, "year": 2021 }, "diff": { "accessDiff": { "baseline": { "accessState": "GRANTED" }, "simulated": { "accessState": "NOT_GRANTED" }, "accessChange": "ACCESS_REVOKED" } } }
כל תוצאה של הפעלה חוזרת כוללת את השדות הבאים:
accessTuple: ניסיון הגישה שהתוצאה קשורה אליו. השדה הזה כולל את המשאב, ההרשאה והמשתמש שהיו מעורבים בניסיון הגישה.
lastSeenDate: התאריך שבו בוצע הניסיון האחרון לגשת.
diff.accessDiffאוerror: אם ההפעלה החוזרת של ניסיון הגישה מצליחה, התוצאה מכילה שדהdiff.accessDiffשמדווח על ההבדל בין התוצאות של ניסיון הגישה במסגרת מדיניות ההרשאות הנוכחית לבין התוצאות במסגרת מדיניות ההרשאות המוצעת. אם הניסיון לשחזר לא יצליח, התוצאה של השחזור תכיל שדהerrorעם תיאור של השגיאה. מידע נוסף על שגיאות בהדמיה זמין בקטע שגיאות בדף הזה.
כל הבדל בגישה כולל את הרכיבים הבאים:
-
baseline: תוצאת הגישה כשמשתמשים במדיניות ההרשאה הנוכחית. הערך הזה מדווח כאחד מהערכים הבאים:GRANTED,NOT_GRANTED,UNKNOWN_CONDITIONALאוUNKNOWN_INFO_DENIED. אם התוצאה היאUNKNOWN_CONDITIONALאוUNKNOWN_INFO_DENIED, בתשובה יפורטו גם השגיאות שמשויכות למידע הלא ידוע, וגם מדיניות ההרשאה שמשויכת לשגיאה הזו. מידע נוסף על ערכים זמין בקטע תוצאות לא ידועות בדף הזה.UNKNOWN -
simulated: תוצאת הגישה כשמשתמשים במדיניות ההרשאות המוצעת. הערך הזה מדווח כאחד מהערכים הבאים:GRANTED,NOT_GRANTED,UNKNOWN_CONDITIONALאוUNKNOWN_INFO_DENIED. אם התוצאה היאUNKNOWN_CONDITIONALאוUNKNOWN_INFO_DENIED, בתשובה יפורטו גם השגיאות שמשויכות למידע הלא ידוע, וגם מדיניות ההרשאה שמשויכת לשגיאה הזו. מידע נוסף על ערכים זמין בקטע תוצאות לא ידועות בדף הזה.UNKNOWN
accessChange: השינוי בין מצב הגישה של נקודת הבסיס לבין מצב הגישה המדומה. בטבלה הבאה מפורטת רשימה של ערכים אפשריים:שינוי בהרשאות הגישה פרטים ACCESS_REVOKEDלמשתמש הייתה גישה במסגרת מדיניות ההרשאות הנוכחית, אבל לא תהיה לו יותר גישה אחרי השינוי המוצע. ACCESS_MAYBE_REVOKEDהתוצאה הזו יכולה להופיע מהסיבות הבאות:
ACCESS_GAINEDלמשתמש הראשי לא הייתה גישה במסגרת מדיניות ההרשאות הנוכחית, אבל תהיה לו גישה אחרי השינוי המוצע. ACCESS_MAYBE_GAINEDהתוצאה הזו יכולה להופיע מהסיבות הבאות:
UNKNOWN_CHANGEהגישה של חשבון המשתמש במסגרת מדיניות ההרשאות הנוכחית ומדיניות ההרשאות המוצעת היא לא ידועה, והשינויים המוצעים עשויים להשפיע על הגישה של חשבון המשתמש.
תוצאות לא ידועות
אם תוצאת הגישה היא לא ידועה, המשמעות היא שלסימולטור המדיניות לא היה מספיק מידע כדי להעריך באופן מלא את ניסיון הגישה.
המסוף
אם תוצאת הגישה לא ידועה, בחלונית הפרטים של שינוי הגישה מפורטת הסיבה לכך, וגם התפקידים הספציפיים, מדיניות ההרשאה, החברות בקבוצות והתנאים שהמערכת לא הצליחה לגשת אליהם או להעריך אותם.
יכולות להיות כמה סיבות לכך שתוצאה מסוימת לא ידועה:
- Role info denied: לחשבון המשתמש שמריץ את הסימולציה אין הרשאה לראות את פרטי התפקיד של אחד או יותר מהתפקידים שמדמים.
- אין אפשרות לגשת למדיניות: לחשבון המשתמש שמריץ את הסימולציה אין הרשאה לקבל את מדיניות ההרשאות של אחד או יותר מהמשאבים שמשתתפים בסימולציה.
- הגישה לפרטי החברות נדחתה: לחשבון המשתמש שמריץ את הסימולציה לא הייתה הרשאה להציג את החברים בקבוצה אחת או יותר שנכללות במדיניות ההרשאות המוצעת.
- תנאי לא נתמך: יש קישור תפקיד מותנה במדיניות ההרשאה שנבדקת. סימולטור המדיניות לא תומך בתנאים, לכן לא ניתן להעריך את הקישור.
gcloud
ב-CLI של gcloud, בתוצאות הסימולציה יופיע ההסבר לכך שהתוצאה לא ידועה בהבדל בגישה.
הסיבה לכך שתוצאת הגישה לא ידועה תהיה אחת מהסיבות הבאות:
UNKNOWN_INFO_DENIED: למשתמש אין הרשאה לגשת למידע שנדרש להערכת מצב הגישה. יכולות להיות לכך כמה סיבות:- למשתמש אין הרשאה לאחזר את מדיניות ההרשאה שמדמה את הפעולה, או שאין לו הרשאה לאחזר מדיניות הרשאה למשאבים ביומני הגישה.
- למשתמש אין הרשאה לראות את חברות בקבוצה.
- המשתמש לא יכול לאחזר את פרטי התפקיד הנדרשים.
כדי לדעת איזה מידע היה חסר, צריך לעיין בפרטי השגיאה שמופיעים אחרי מצב הגישה שדווח.
UNKNOWN_CONDITIONAL: יש קישור תפקיד מותנה במדיניות ההרשאה שנבדקת. סימולטור המדיניות לא תומך בתנאים, לכן לא ניתן להעריך את הקישור.
אם התוצאה לא ידועה, השדה של מדיניות ההרשאה (baseline או simulated) מכיל שדה errors שמתאר למה המידע לא ידוע, ושדה policies שמפרט את מדיניות ההרשאה שמשויכת לשגיאות. מידע נוסף על שגיאות זמין בקטע שגיאות שבדף הזה.
REST
ב-API בארכיטקטורת REST, בתוצאות הסימולציה יצוין למה התוצאה לא ידועה בהשוואה של הגישה.
הסיבה לכך שתוצאת הגישה לא ידועה תהיה אחת מהסיבות הבאות:
UNKNOWN_INFO_DENIED: למשתמש אין הרשאה לגשת למידע שנדרש להערכת מצב הגישה. יכולות להיות לכך כמה סיבות:- למשתמש אין הרשאה לאחזר את מדיניות ההרשאה שמדמה את הפעולה, או שאין לו הרשאה לאחזר מדיניות הרשאה למשאבים ביומני הגישה.
- למשתמש אין הרשאה לראות את חברות בקבוצה.
- המשתמש לא יכול לאחזר את פרטי התפקיד הנדרשים.
כדי לדעת איזה מידע היה חסר, צריך לעיין בפרטי השגיאה שמופיעים אחרי מצב הגישה שדווח.
UNKNOWN_CONDITIONAL: יש קישור תפקיד מותנה במדיניות ההרשאה שנבדקת. סימולטור המדיניות לא תומך בתנאים, לכן לא ניתן להעריך את הקישור.
אם התוצאה לא ידועה, השדה של מדיניות ההרשאה (baseline או simulated) מכיל שדה errors שמתאר למה המידע לא ידוע, ושדה policies שמפרט את מדיניות ההרשאה שמשויכת לשגיאות. מידע נוסף על שגיאות זמין בקטע שגיאות שבדף הזה.
שגיאות
בסימולטור המדיניות מדווחים גם על שגיאות שהתרחשו במהלך הסימולציה. חשוב לבדוק את השגיאות האלה כדי להבין את הפערים הפוטנציאליים בסימולציה.
המסוף
יש כמה סוגים של שגיאות שסימולטור המדיניות עשוי לדווח עליהן:
שגיאות בפעולה: לא ניתן להריץ את הסימולציה. שגיאות בהפעלה של סימולטור המדיניות מופיעות בחלק העליון של דף התוצאות.
אם בהודעת השגיאה מצוין שלא ניתן להריץ את הסימולציה כי יש יותר מדי יומנים בפרויקט או בארגון, אי אפשר להריץ סימולציה במשאב.

אם השגיאה הזו מופיעה מסיבה אחרת, נסו להריץ שוב את הסימולציה. אם עדיין לא ניתן להריץ את הסימולציה, אפשר לפנות לכתובת policy-simulator-feedback@google.com.
שגיאות בהפעלה חוזרת: הפעלה חוזרת של ניסיון גישה יחיד לא הצליחה, ולכן סימולטור המדיניות לא הצליח לקבוע אם התוצאה של ניסיון הגישה תשתנה בהתאם למדיניות ההרשאות המוצעת.
במסוף Google Cloud , שגיאות ההפעלה מחדש מופיעות בטבלה שינויים בגישה ב-90 הימים האחרונים. החלונית פרטים על שינוי הגישה של כל שגיאה כוללת הודעת שגיאה שעוזרת להבין את הבעיה, וגם את המשאב וההרשאה שבוצעו לגביהם סימולציה כשקרתה השגיאה.

שגיאות שקשורות לסוג משאב לא נתמך: מדיניות ההרשאות המוצעת משפיעה על הרשאות שמשויכות לסוג משאב לא נתמך, שהכלי Policy Simulator לא יכול לבצע סימולציה לגביו.

בתוצאות הסימולציה של הכלי Policy Simulator מופיעות ההרשאות האלה, כדי שתדעו אילו הרשאות לא ניתן היה לדמות.

gcloud
בתוצאות הסימולציה של gcloud CLI, שגיאות יכולות להופיע בשני מקומות:
- השדה
replayResult.error: אם הניסיון להפעלה מחדש לא הצליח, סימולטור המדיניות מדווח על השגיאה בשדהreplayResult.error. אם תוצאת שידור חוזר מכילה את השדה הזה, היא לא מכילה את השדהdiff. - השדה
replayResult.diff.accessDiff.policy-type.errors, כאשר policy-type הואbaselineאוsimulated. אם הניסיון להפעלה חוזרת הצליח, אבל התוצאה הייתהUNKNOWN_INFO_DENIEDאוUNKNOWN_CONDITIONAL, בסימולטור המדיניות ידווח בשדה הזה על הסיבה לכך שהתוצאה לא הייתה ידועה.
כלי סימולטור המדיניות יוצר את סוגי השגיאות הבאים:
| שגיאה | קוד שגיאה | פרטים |
|---|---|---|
GENERIC_INTERNAL_ERROR |
13 | הסימולציה נכשלה בגלל שגיאה פנימית. כדי לפתור את הבעיה, מריצים שוב את הסימולציה. אם הסימולציה עדיין נכשלת, אפשר לפנות לכתובת policy-simulator-feedback@google.com. |
INVALID_ACCESS_TUPLE |
3 | סימולטור המדיניות לא הצליח לשחזר את ניסיון הגישה כי הוא הכיל הרשאה, שם משאב או גורם ראשי לא תקינים. |
OUT_OF_RANGE_GROUP_TOO_LARGE |
11 | הסימולטור של המדיניות לא הצליח להעריך את החברות של הגורם בקבוצה כי בקבוצה יש יותר מדי קבוצות משנה. השגיאה הזו קשורה לשינויים בגישה ל-UNKNOWN_INFO_DENIED. |
PERMISSION_DENIED_ON_GROUP_MEMBERSHIP |
7 | סימולטור המדיניות לא הצליח להעריך את הגישה של המשתמש כי למבצע הקריאה אין הרשאה להציג את חברות בקבוצה. השגיאה הזו קשורה לשינויים בגישה ל-UNKNOWN_INFO_DENIED. |
PERMISSION_DENIED_ON_IAM_POLICY |
7 | לא הייתה אפשרות להעריך את הגישה של המשתמש באמצעות Policy Simulator
כי למבצע הקריאה אין הרשאה לאחזר מדיניות הרשאה. סוג השגיאה הזה קשור לשינויים בגישה UNKNOWN_INFO_DENIED. |
PERMISSION_DENIED_ON_IAM_ROLE |
7 | לא ניתן להעריך את הגישה של המשתמש באמצעות Policy Simulator כי למבצע הקריאה אין הרשאה לאחזר את ההרשאות בתפקיד IAM. סוג השגיאה הזה קשור לשינויים בגישה UNKNOWN_INFO_DENIED. |
PERMISSION_DENIED_ON_PARENT_IAM_POLICY |
7 | סימולטור המדיניות לא הצליח להעריך את הגישה של המשתמש כי למבצע הקריאה אין הרשאה לאחזר את מדיניות ההרשאה של משאב אב. סוג השגיאה הזה קשור לשינויים בגישה ל-UNKNOWN_INFO_DENIED. |
UNIMPLEMENTED_MEMBER_TYPE |
12 | הטופל של הגישה מכיל סוג של חשבון משתמש שלא נתמך בכלי לסימולציה של מדיניות. |
UNIMPLEMENTED_MEMBER |
12 | הטופל של הגישה מכיל גורם מרכזי שלא נתמך על ידי סימולטור המדיניות. |
UNIMPLEMENTED_CONDITION |
12 | הטופל של הגישה מכיל תנאי שלא נתמך על ידי Policy Simulator. סוג השגיאה הזה קשור לשינויים בגישה UNKNOWN_CONDITIONAL. |
LOG_SIZE_TOO_LARGE |
8 | המשאב משויך ליותר מדי יומני גישה, ולכן Policy Simulator לא הצליח להריץ את הסימולציה. פרטים נוספים זמינים בקטע גודל מקסימלי של הפעלה חוזרת של יומן בדף המושגים של סימולטור המדיניות. |
UNSUPPORTED_RESOURCE |
12 |
השינויים המוצעים במדיניות ההרשאות קשורים להרשאות שמשויכות לסוגי משאבים שלא נתמכים. השגיאה הזו מופיעה בשדה "error": { "code": 12, "details": [ { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "domain": "policysimulator.googleapis.com", "metadata": { "permission": "storage.objects.create" }, "reason": "UNSUPPORTED_RESOURCE" }, { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "domain": "policysimulator.googleapis.com", "metadata": { "permission": "storage.objects.setIamPolicy" }, "reason": "UNSUPPORTED_RESOURCE" }, { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "domain": "policysimulator.googleapis.com", "metadata": { "permission": "storage.objects.get" }, "reason": "UNSUPPORTED_RESOURCE" } ], "message": "unsupported-permissions-error-message" } מידע נוסף על סוגי משאבים שלא נתמכים זמין במאמר רמות התמיכה בסוגי משאבים בדף המושגים של סימולטור המדיניות. |
REST
בתוצאות של סימולציה של REST API, שגיאות יכולות להופיע בשני מקומות:
- השדה
replayResult.error: אם הניסיון להפעלה מחדש לא הצליח, סימולטור המדיניות מדווח על השגיאה בשדהreplayResult.error. אם תוצאת שידור חוזר מכילה את השדה הזה, היא לא מכילה את השדהdiff. - השדה
replayResult.diff.accessDiff.policy-type.errors, כאשר policy-type הואbaselineאוsimulated. אם הניסיון להפעלה חוזרת הצליח, אבל התוצאה הייתהUNKNOWN_INFO_DENIEDאוUNKNOWN_CONDITIONAL, בסימולטור המדיניות ידווח בשדה הזה על הסיבה לכך שהתוצאה לא הייתה ידועה.
כלי סימולטור המדיניות יוצר את סוגי השגיאות הבאים:
| שגיאה | קוד שגיאה | פרטים |
|---|---|---|
GENERIC_INTERNAL_ERROR |
13 | הסימולציה נכשלה בגלל שגיאה פנימית. כדי לפתור את הבעיה, מריצים שוב את הסימולציה. אם הסימולציה עדיין נכשלת, אפשר לפנות לכתובת policy-simulator-feedback@google.com. |
INVALID_ACCESS_TUPLE |
3 | סימולטור המדיניות לא הצליח לשחזר את ניסיון הגישה כי הוא הכיל הרשאה, שם משאב או גורם ראשי לא תקינים. |
OUT_OF_RANGE_GROUP_TOO_LARGE |
11 | הסימולטור של המדיניות לא הצליח להעריך את החברות של הגורם בקבוצה כי בקבוצה יש יותר מדי קבוצות משנה. השגיאה הזו קשורה לשינויים בגישה ל-UNKNOWN_INFO_DENIED. |
PERMISSION_DENIED_ON_GROUP_MEMBERSHIP |
7 | סימולטור המדיניות לא הצליח להעריך את הגישה של המשתמש כי למבצע הקריאה אין הרשאה להציג את חברות בקבוצה. השגיאה הזו קשורה לשינויים בגישה ל-UNKNOWN_INFO_DENIED. |
PERMISSION_DENIED_ON_IAM_POLICY |
7 | לא הייתה אפשרות להעריך את הגישה של המשתמש באמצעות Policy Simulator
כי למבצע הקריאה אין הרשאה לאחזר מדיניות הרשאה. סוג השגיאה הזה קשור לשינויים בגישה UNKNOWN_INFO_DENIED. |
PERMISSION_DENIED_ON_IAM_ROLE |
7 | לא ניתן להעריך את הגישה של המשתמש באמצעות Policy Simulator כי למבצע הקריאה אין הרשאה לאחזר את ההרשאות בתפקיד IAM. סוג השגיאה הזה קשור לשינויים בגישה UNKNOWN_INFO_DENIED. |
PERMISSION_DENIED_ON_PARENT_IAM_POLICY |
7 | סימולטור המדיניות לא הצליח להעריך את הגישה של המשתמש כי למבצע הקריאה אין הרשאה לאחזר את מדיניות ההרשאה של משאב אב. סוג השגיאה הזה קשור לשינויים בגישה ל-UNKNOWN_INFO_DENIED. |
UNIMPLEMENTED_MEMBER_TYPE |
12 | הטופל של הגישה מכיל סוג של חשבון משתמש שלא נתמך בכלי לסימולציה של מדיניות. |
UNIMPLEMENTED_MEMBER |
12 | הטופל של הגישה מכיל גורם מרכזי שלא נתמך על ידי סימולטור המדיניות. |
UNIMPLEMENTED_CONDITION |
12 | הטופל של הגישה מכיל תנאי שלא נתמך על ידי Policy Simulator. סוג השגיאה הזה קשור לשינויים בגישה UNKNOWN_CONDITIONAL. |
LOG_SIZE_TOO_LARGE |
8 | המשאב משויך ליותר מדי יומני גישה, ולכן Policy Simulator לא הצליח להריץ את הסימולציה. פרטים נוספים זמינים בקטע גודל מקסימלי של הפעלה חוזרת של יומן בדף המושגים של סימולטור המדיניות. |
UNSUPPORTED_RESOURCE |
12 |
השינויים המוצעים במדיניות ההרשאות קשורים להרשאות שמשויכות לסוגי משאבים שלא נתמכים. השגיאה הזו מופיעה בשדה "error": { "code": 12, "details": [ { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "domain": "policysimulator.googleapis.com", "metadata": { "permission": "storage.objects.create" }, "reason": "UNSUPPORTED_RESOURCE" }, { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "domain": "policysimulator.googleapis.com", "metadata": { "permission": "storage.objects.setIamPolicy" }, "reason": "UNSUPPORTED_RESOURCE" }, { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "domain": "policysimulator.googleapis.com", "metadata": { "permission": "storage.objects.get" }, "reason": "UNSUPPORTED_RESOURCE" } ], "message": "unsupported-permissions-error-message" } מידע נוסף על סוגי משאבים שלא נתמכים זמין במאמר רמות התמיכה בסוגי משאבים בדף המושגים של סימולטור המדיניות. |
החלת שינוי במדיניות בסימולציה
כדי להחיל שינוי מדומה על מדיניות הרשאות:
המסוף
לוחצים על החלת השינויים המוצעים.
בתיבת הדו-שיח לאישור, לוחצים על החלה כדי לאשר את השינוי.
gcloud
משתמשים בפקודה set-iam-policy ומציינים נתיב לקובץ JSON שמכיל את מדיניות ההרשאה המדומה שרוצים להחיל:
gcloud resource-type set-iam-policy resource-id filepath
מספקים את הערכים הבאים:
-
resource-type: סוג המשאב שרוצים לעדכן את מדיניות ההרשאה שלו. לדוגמה,projects. -
resource-id: המזהה של המשאב שרוצים לעדכן את מדיניות ההרשאה שלו. לדוגמה,my-project. -
filepath: הנתיב לקובץ שמכיל את מדיניות ההרשאה המעודכנת.
התגובה מכילה את מדיניות ההרשאה המעודכנת. אם אתם מתייחסים למדיניות הרשאות של IAM כאל קוד ומאחסנים אותה במערכת לניהול גרסאות, אתם צריכים לאחסן את מדיניות ההרשאות שמוחזרת על ידי ה-CLI של gcloud, ולא את קובץ ה-JSON שמכיל את מדיניות ההרשאות המדומה.
REST
הגדרת מדיניות ההרשאות המוצעת כמדיניות ההרשאות החדשה של המשאב.
כדי להגדיר את מדיניות ההרשאות בבקשה בתור המדיניות החדשה של הפרויקט, משתמשים ב-method projects.setIamPolicy של Resource Manager API.
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
-
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . מזהי פרויקטים הם מחרוזות אלפאנומריות, כמוmy-project. POLICY: ייצוג JSON של המדיניות שרוצים להגדיר. מידע נוסף על הפורמט של מדיניות מופיע במאמרי העזרה בנושא מדיניות.
שיטת ה-HTTP וכתובת ה-URL:
POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy
תוכן בקשת JSON:
{
"policy": {
POLICY
}
}
כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:
התגובה מכילה את מדיניות ההרשאה המעודכנת.
שמירת תוצאות הסימולציה
אם אתם משתמשים ב-gcloud CLI, אתם יכולים לשמור את התוצאות של Policy Simulator כקובצי JSON, YAML או CSV.
שמירה כ-JSON או כ-YAML
כדי לשמור את תוצאות הסימולציה כקובץ JSON או YAML, מוסיפים את הפלאג הבא לפקודה replay-recent-access כשמריצים את הסימולציה:
--output=output-format > filename
מחליפים את הערכים הבאים:
-
output-format: השפה של הקובץ המיוצא,jsonאוyaml. -
filename: שם לקובץ המיוצא.
שמירה כקובץ CSV
כדי לשמור קובץ CSV, מוסיפים את הדגל הבא לפקודה replay-recent-access
כשמריצים את הסימולציה:
--flatten="diffs[]" --format=csv(output-fields) > filename
מחליפים את הערכים הבאים:
-
output-fields: רשימה מופרדת בפסיקים של השדות שרוצים לכלול בתוצאות המיוצאות. לדוגמה,diffs.accessTuple.principal, diffs.accessTuple.permission. -
filename: שם לקובץ המיוצא.
אפשר גם להוסיף שדות נוספים, כמו errors[], לדגל --flatten. הוספת שדות לדגל --flatten מאפשרת לרשום את הרכיבים בשדות האלה בשורות נפרדות בקובץ ה-CSV.
הנה דוגמה לפקודת replay-recent-access ששומרת את השדות הכי חשובים של תוצאות הסימולציה כקובץ CSV simulation-results.csv:
gcloud iam simulator replay-recent-access --flatten="diffs[]" \ --format="csv(diffs.accessTuple.principal, diffs.accessTuple.permission, \ diffs.accessTuple.fullResourceName, diffs.diff.accessDiff.accessChange, \ diffs.diff.accessDiff.baseline.accessState, \ diffs.diff.accessDiff.simulated.accessState)" \ //cloudresourcemanager.googleapis.com/projects/my-project \ proposed-policy.json > simulation-results.csv
בדוגמה הזו מתבצעת סימולציה של proposed-policy.json עבור הפרויקט my-project, והתוצאות נשמרות כ-simulation-results.csv. קובץ ה-CSV מכיל את השדות הבאים: principal, permission, resource, access change, baseline access state, and simulated access state.
למידע נוסף על עיצוב באמצעות ה-CLI של gcloud, ראו פורמטים.
המאמרים הבאים
- כאן תוכלו לקרוא על פתרון בעיות גישה עבור גורמים קיימים.
- מידע נוסף על אכיפת הרשאות מינימליות באמצעות המלצות לתפקידים