בדיקת שינויים בתפקידים באמצעות סימולטור המדיניות

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

התכונה הזו בודקת את הגישה רק על סמך מדיניות ההרשאה.

כדי ללמוד איך לדמות שינויים בסוגים אחרים של מדיניות, אפשר לעיין במאמרים הבאים:

לפני שמתחילים

ההרשאות הנדרשות

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

למידע נוסף על תפקידים בניהול זהויות והרשאות גישה (IAM), אפשר לעיין במאמר הסבר על התפקידים.

הרשאות נדרשות למשאב היעד

משאב היעד של הסימולציה הוא המשאב שמדיניות ההרשאות שלו עוברת סימולציה.

כדי לקבל את ההרשאות שדרושות להרצת סימולציה, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים במשאב היעד:

להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.

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

ההרשאות הנדרשות

כדי להריץ סימולציה, צריך את ההרשאות הבאות:

  • 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. אם אין לכם חלק מההרשאות האלה או את כולן, עדיין תוכלו להריץ סימולציה. עם זאת, אם תריצו סימולציה בלי ההרשאות האלה, יכול להיות שמספר השינויים הלא ידועים בגישה יהיה גבוה יותר, כי יכול להיות שלא תוכלו לאחזר מידע שישפיע על תוצאות הסימולציה.

מומלץ שהתפקיד שלכם בארגון יהיה "בודק אבטחה" (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 במדיניות ההרשאות המקורית ובמדיניות ההרשאות המוצעת.

בדרך כלל, לסופר-אדמינים ולאדמינים של קבוצות ב-Google Workspace יש גישה לצפייה בחברים בקבוצה. אם אין לכם הרשאות סופר-אדמין או אדמין קבוצה, אתם צריכים לבקש מהאדמין שלכם ב-Google Workspace ליצור תפקיד אדמין מותאם אישית ב-Google Workspace שכולל את ההרשאה groups.read (שנמצאת בקטע הרשאות Admin API) ולהקצות לכם אותה. כך תוכלו לראות את החברים בכל הקבוצות בדומיין, ולבצע סימולציה של שינויים במדיניות ההרשאות בצורה יעילה יותר.

סימולציה של שינוי במדיניות

כדי לדמות שינוי במדיניות הרשאה:

המסוף

בדוגמה הבאה מוצג איך לדמות שינוי במדיניות ההרשאות של פרויקט. אבל אפשר לדמות שינוי במדיניות הרשאה לכל משאב שיש לו מדיניות הרשאה.

עורכים את ההרשאות של חשבון המשתמש ואז, במקום ללחוץ על שמירה, לוחצים על בדיקת השינויים:

  1. נכנסים לדף IAM במסוף Google Cloud .

    כניסה לדף IAM

  2. יוצרים שינוי מוצע במדיניות ההרשאות על ידי עריכת ההרשאות של חשבון משתמש קיים:

    1. מוצאים את חשבון המשתמש שרוצים לערוך את הגישה שלו ולוחצים על לחצן Edit משמאל.
    2. כדי לערוך את הרשאות הגישה של חשבון המשתמש, מוסיפים תפקיד חדש או מבטלים או משנים תפקיד קיים.
  3. כדי לדמות את השינוי המוצע, לוחצים על בדיקת שינויים.

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

    אם לא היה שינוי בגישה בין מדיניות ההרשאות הקיימת לבין מדיניות ההרשאות המדומה, לא יוצגו שינויים בגישה במסוף Google Cloud .

gcloud

כדי לדמות שינוי במדיניות הרשאה, פועלים לפי התבנית קריאה-שינוי-כתיבה, אבל מדמים את מדיניות ההרשאה במקום לכתוב אותה.

  1. קוראים את מדיניות ההרשאות הקיימת באמצעות הפעלת הפקודה הבאה:

    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
  2. משנים את מדיניות ההרשאה מסוג JSON או YAML שהוחזרה באמצעות הפקודה get-iam-policy כך שתשקף את השינויים שרוצים לדמות.

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

  3. מריצים את הפקודה הבאה כדי לדמות את השינוי במדיניות ההרשאה:

    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

כדי לדמות שינוי במדיניות הרשאה, צריך לפעול לפי התבנית קריאה-שינוי-כתיבה, אבל במקום לכתוב את מדיניות ההרשאה, יוצרים ומריצים סימולציה.

  1. קוראים את מדיניות ההרשאה למשאב.

    כדי לקבל את מדיניות ההרשאות של פרויקט, משתמשים ב-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"
          ]
        }
      ]
    }
    

  2. משנים את מדיניות ההרשאות שמוחזרת כך שתשקף את השינויים שרוצים לדמות.

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

  3. יוצרים סימולציה או מפעילים אותה מחדש עם מדיניות ההרשאה ששונתה.

    כדי ליצור הפעלה חוזרת לפרויקט, לתיקייה או לארגון, משתמשים ב-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"
      }
    }
    

  4. מבצעים שאילתות לגבי השיטה 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
            }
          }
        }
      }
    }
    

  5. לקבל את התוצאות של ההפעלה החוזרת.

    כדי לקבל את התוצאות של הפעלה חוזרת, משתמשים ב-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

השינויים המוצעים במדיניות ההרשאות קשורים להרשאות שמשויכות לסוגי משאבים שלא נתמכים. השגיאה הזו מופיעה בשדה replayResult.error ומכילה רשימה של ההרשאות שמשויכות לסוגי משאבים שלא נתמכים. לדוגמה:

"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

השינויים המוצעים במדיניות ההרשאות קשורים להרשאות שמשויכות לסוגי משאבים שלא נתמכים. השגיאה הזו מופיעה בשדה replayResult.error ומכילה רשימה של ההרשאות שמשויכות לסוגי משאבים שלא נתמכים. לדוגמה:

"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"
}

מידע נוסף על סוגי משאבים שלא נתמכים זמין במאמר רמות התמיכה בסוגי משאבים בדף המושגים של סימולטור המדיניות.

החלת שינוי במדיניות בסימולציה

כדי להחיל שינוי מדומה על מדיניות הרשאות:

המסוף

  1. לוחצים על החלת השינויים המוצעים.

  2. בתיבת הדו-שיח לאישור, לוחצים על החלה כדי לאשר את השינוי.

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, ראו פורמטים.

המאמרים הבאים