פתרון בעיות בהרשאות IAM

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

אפשר לגשת לפותר הבעיות שקשורות למדיניות באמצעותGoogle Cloud המסוף, Google Cloud CLI או API בארכיטקטורת REST. בדרך כלל, הכי מהר להשתמש במסוף Google Cloud לשאילתות בסיסיות. לתרחישים מורכבים יותר, כדאי להשתמש ב-CLI של gcloud או ב-API בארכיטקטורת REST.

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

  • מפעילים את Policy Troubleshooter API.

    תפקידים שנדרשים להפעלת ממשקי API

    כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאה serviceusage.services.enable. איך מקצים תפקידים

    להפעלת ה-API

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

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

הרשאות לפתרון בעיות בגישה של חשבונות משתמשים ספציפיים

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

הרשאות לפתרון בעיות בכללים של מדיניות האישור והדחייה

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

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

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

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

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

הרשאות לפתרון בעיות במדיניות לקביעת גבול הגישה לחשבונות משתמשים (PAB)

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

  • חשבונות Google וקבוצות Google: הארגון שמשויך לדומיין Google Workspace שכולל את המשתמש הראשי
  • זהויות מאוחדות (זהויות במאגרי זהויות של כוח עבודה או במאגרי זהויות של עומסי עבודה): הארגון שמכיל את מאגר הזהויות שכולל את הגורם הראשי
  • חשבונות שירות: הארגון שמכיל את הפרויקט שבו נוצר חשבון השירות

ההרשאות האלה מאפשרות לכם לראות את המדיניות לקביעת גבול הגישה לחשבונות משתמשים (PAB) שקובעת למה יש לחשבון משתמש גישה.

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

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

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

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

הרשאות לפתרון בעיות גישה של חברי קבוצה

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

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

הרשאות לפתרון בעיות בגישה של חברי הדומיין

אם מדיניות ההרשאה והדחייה שלכם כוללת חשבון Google Workspace או דומיין Cloud Identity, אתם צריכים להיות אדמינים של הדומיין כדי לפתור בעיות בגישה של חברים ספציפיים בדומיין.

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

פתרון בעיות בגישה

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

  • Error ID: מזהה ייחודי של הודעת שגיאה בנוגע להרשאות. מזהה השגיאה מספק הקשר לשגיאה, כולל החשבון, המשאב, ההרשאה ותנאי ה-IAM הנתמכים.

    תנאי ה-IAM הנתמכים כוללים את principal.type ו-principal.subject.

אם אין לכם מזהה שגיאה, תוכלו לפתור את בעיית הגישה באמצעות המידע הבא:

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

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

  • משאב: השם המלא של המשאב שרוצים לפתור את בעיית הגישה אליו. לדוגמה, כדי לפתור בעיות גישה לפרויקט my-project, מזינים //cloudresourcemanager.googleapis.com/projects/my-project. לדוגמאות של סוגים אחרים של משאבים, אפשר לעיין בדוגמאות של שמות משאבים מלאים.

  • הרשאה: ההרשאה לבדיקה. אם משתמשים במסוףGoogle Cloud , תוך כדי הקלדה מוצגת רשימה של הצעות.

    כדי לפתור בעיה שקשורה להרשאה, ההרשאה צריכה להיות רלוונטית למשאב בבקשה. במילים אחרות, צריך להיות אפשר להשתמש בהרשאה הזו כדי לגשת למשאב בדרך כלשהי. אם ההרשאה לא רלוונטית למשאב, הבקשה תיכשל. לדוגמה, אם מנסים לפתור בעיות בהרשאה compute.instances.get באשכול Google Kubernetes Engine, הבקשה תיכשל כי אי אפשר להשתמש בהרשאה compute.instances.get כדי לגשת לאשכולות Google Kubernetes Engine.compute.instance.get

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

המסוף

כדי לפתור בעיות בגישה:

  1. במסוף Google Cloud , עוברים לדף פותר הבעיות שקשורות למדיניות.

    לכלי לפתרון בעיות שקשורות למדיניות

  2. אם יש לכם מזהה שגיאה, בוחרים באפשרות מזהה שגיאה ומזינים אותו.

  3. אם אין לכם מזהה שגיאה, בוחרים באפשרות ידני.

    1. מזינים את כתובת האימייל של חשבון המשתמש שרוצים לבדוק את הגישה שלו.

    2. מזינים את השם המלא של המשאב שרוצים לבדוק.

      אם אתם לא יודעים את השם המלא של המשאב, אתם יכולים לבצע אחת מהפעולות הבאות:

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

        1. בתיבה Select scope, בוחרים פרויקט, תיקייה או ארגון לחיפוש.
        2. בתיבה Resource type, בוחרים את סוגי המשאבים שרוצים לחפש.
        3. בתיבה חיפוש משאבים, מזינים חלק משם המשאב.
        4. בקטע התוצאות, בוחרים את המשאב שרוצים לבדוק.
        5. לוחצים על Select (בחירה) כדי לבחור את המשאב ולסגור את תיבת הדו-שיח.
    3. מזינים את ההרשאה שרוצים לבדוק.

      אם אתם לא יודעים את השם המלא של ההרשאה, אתם יכולים להתחיל להקליד כדי לראות אפשרויות להשלמה אוטומטית.

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

  4. לוחצים על בדיקת הגישה.

gcloud

כדי לגלות למה לישות יש או אין הרשאת IAM, משתמשים בפקודה gcloud beta policy-troubleshoot iam.

לפני השימוש בנתוני הפקודה הבאים, צריך להחליף את הנתונים הבאים:

  • VERSION: אופציונלי. הגרסה של הפקודה שבה רוצים להשתמש. כדי לפתור בעיות בגישה שמבוססת רק על כללי מדיניות האישור והדחייה, אל תציינו גרסה. כדי לפתור בעיות בגישה על סמך מדיניות הרשאה, מדיניות דחייה ומדיניות לקביעת גבול הגישה לחשבונות משתמשים, צריך להשתמש בגרסה beta.
  • EMAIL: כתובת האימייל של חשבון המשתמש שרוצים לפתור בעיות בהרשאות שלו.
  • RESOURCE: המשאב שעליו ניתנת ההרשאה.
  • PERMISSION: ההרשאה שרוצים לפתור את הבעיה שלה.

מריצים את הפקודה gcloud beta policy-troubleshoot iam:

‫Linux,‏ macOS או Cloud Shell

gcloud VERSION policy-intelligence troubleshoot-policy iam RESOURCE --principal-email=EMAIL \
    --permission=PERMISSION

‏Windows (PowerShell)

gcloud VERSION policy-intelligence troubleshoot-policy iam RESOURCE --principal-email=EMAIL `
    --permission=PERMISSION

Windows‏ (cmd.exe)

gcloud VERSION policy-intelligence troubleshoot-policy iam RESOURCE --principal-email=EMAIL ^
    --permission=PERMISSION

אמורים לקבל תגובה שדומה לזו:

תשובה

{
  "accessTuple": {
    "conditionContext": {
      "destination": {},
      "effectiveTags": [
        {
          "namespacedTagKey": "project-1/tag-key-1",
          "namespacedTagValue": "project-1/tag-key-1/tag-value-1",
          "tagKey": "tagKeys/123456789012",
          "tagKeyParentName": "projects/123456789012",
          "tagValue": "tagValues/123456789012"
        },
      ],
      "request": {},
      "resource": {}
    },
    "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/project-1",
    "permission": "bigtable.instances.create",
    "permissionFqdn": "bigtable.googleapis.com/instances.create",
    "principal": "service-account-3@project-1.iam.gserviceaccount.com"
  },
  "allowPolicyExplanation": {
    "allowAccessState": "ALLOW_ACCESS_STATE_NOT_GRANTED",
    "explainedPolicies": [
      {
        "allowAccessState": "ALLOW_ACCESS_STATE_NOT_GRANTED",
        "bindingExplanations": [
          {
            "allowAccessState": "ALLOW_ACCESS_STATE_NOT_GRANTED",
            "combinedMembership": {
              "membership": "MEMBERSHIP_NOT_MATCHED",
              "relevance": "HEURISTIC_RELEVANCE_NORMAL"
            },
            "condition": {
              "expression": "resource.type == \"cloudresourcemanager.googleapis.com/Project\"",
              "title": "Resource-based condition"
            },
            "conditionExplanation": {
              "evaluationStates": [
                {
                  "end": 62,
                  "value": false
                }
              ],
              "value": false
            },
            "memberships": {
              "serviceAccount:service-account-1@project-1.iam.gserviceaccount.com": {
                "membership": "MEMBERSHIP_NOT_MATCHED",
                "relevance": "HEURISTIC_RELEVANCE_NORMAL"
              }
            },
            "relevance": "HEURISTIC_RELEVANCE_NORMAL",
            "role": "roles/bigquery.admin",
            "rolePermission": "ROLE_PERMISSION_NOT_INCLUDED",
            "rolePermissionRelevance": "HEURISTIC_RELEVANCE_NORMAL"
          },
          {
            "allowAccessState": "ALLOW_ACCESS_STATE_NOT_GRANTED",
            "combinedMembership": {
              "membership": "MEMBERSHIP_NOT_MATCHED",
              "relevance": "HEURISTIC_RELEVANCE_NORMAL"
            },
            "condition": {
              "expression": "resource.matchTag(\"project-1/tag-key-1\", \"tag-value-1\")",
              "title": "Tag-based condition"
            },
            "conditionExplanation": {
              "evaluationStates": [
                {
                  "end": 73,
                  "value": true
                }
              ],
              "value": true
            },
            "memberships": {
              "serviceAccount:service-account-2@project-1.iam.gserviceaccount.com": {
                "membership": "MEMBERSHIP_NOT_MATCHED",
                "relevance": "HEURISTIC_RELEVANCE_NORMAL"
              }
            },
            "relevance": "HEURISTIC_RELEVANCE_NORMAL",
            "role": "roles/bigquery.admin",
            "rolePermission": "ROLE_PERMISSION_NOT_INCLUDED",
            "rolePermissionRelevance": "HEURISTIC_RELEVANCE_NORMAL"
          },
          {
            "allowAccessState": "ALLOW_ACCESS_STATE_NOT_GRANTED",
            "combinedMembership": {
              "membership": "MEMBERSHIP_NOT_MATCHED",
              "relevance": "HEURISTIC_RELEVANCE_NORMAL"
            },
            "memberships": {
              "user:user-2@example.com": {
                "membership": "MEMBERSHIP_NOT_MATCHED",
                "relevance": "HEURISTIC_RELEVANCE_NORMAL"
              }
            },
            "relevance": "HEURISTIC_RELEVANCE_NORMAL",
            "role": "roles/compute.admin",
            "rolePermission": "ROLE_PERMISSION_NOT_INCLUDED",
            "rolePermissionRelevance": "HEURISTIC_RELEVANCE_NORMAL"
          },
          {
            "allowAccessState": "ALLOW_ACCESS_STATE_NOT_GRANTED",
            "combinedMembership": {
              "membership": "MEMBERSHIP_NOT_MATCHED",
              "relevance": "HEURISTIC_RELEVANCE_NORMAL"
            },
            "memberships": {
              "user:user-1@example.com": {
                "membership": "MEMBERSHIP_NOT_MATCHED",
                "relevance": "HEURISTIC_RELEVANCE_NORMAL"
              },
              "user:user-3@example.com": {
                "membership": "MEMBERSHIP_NOT_MATCHED",
                "relevance": "HEURISTIC_RELEVANCE_NORMAL"
              }
            },
            "relevance": "HEURISTIC_RELEVANCE_NORMAL",
            "role": "roles/iam.serviceAccountTokenCreator",
            "rolePermission": "ROLE_PERMISSION_NOT_INCLUDED",
            "rolePermissionRelevance": "HEURISTIC_RELEVANCE_NORMAL"
          },
          {
            "allowAccessState": "ALLOW_ACCESS_STATE_NOT_GRANTED",
            "combinedMembership": {
              "membership": "MEMBERSHIP_NOT_MATCHED",
              "relevance": "HEURISTIC_RELEVANCE_NORMAL"
            },
            "memberships": {
              "user:user-2@example.com": {
                "membership": "MEMBERSHIP_NOT_MATCHED",
                "relevance": "HEURISTIC_RELEVANCE_NORMAL"
              },
              "user:user-1@example.com": {
                "membership": "MEMBERSHIP_NOT_MATCHED",
                "relevance": "HEURISTIC_RELEVANCE_NORMAL"
              }
            },
            "relevance": "HEURISTIC_RELEVANCE_HIGH",
            "role": "roles/owner",
            "rolePermission": "ROLE_PERMISSION_INCLUDED",
            "rolePermissionRelevance": "HEURISTIC_RELEVANCE_HIGH"
          },
          {
            "allowAccessState": "ALLOW_ACCESS_STATE_NOT_GRANTED",
            "combinedMembership": {
              "membership": "MEMBERSHIP_MATCHED",
              "relevance": "HEURISTIC_RELEVANCE_NORMAL"
            },
            "memberships": {
              "serviceAccount:service-account-3@project-1.iam.gserviceaccount.com": {
                "membership": "MEMBERSHIP_MATCHED",
                "relevance": "HEURISTIC_RELEVANCE_NORMAL"
              },
              "serviceAccount:service-account-4@project-1.iam.gserviceaccount.com": {
                "membership": "MEMBERSHIP_NOT_MATCHED",
                "relevance": "HEURISTIC_RELEVANCE_NORMAL"
              }
            },
            "relevance": "HEURISTIC_RELEVANCE_NORMAL",
            "role": "roles/resourcemanager.projectIamAdmin",
            "rolePermission": "ROLE_PERMISSION_NOT_INCLUDED",
            "rolePermissionRelevance": "HEURISTIC_RELEVANCE_NORMAL"
          },
          {
            "allowAccessState": "ALLOW_ACCESS_STATE_NOT_GRANTED",
            "combinedMembership": {
              "membership": "MEMBERSHIP_NOT_MATCHED",
              "relevance": "HEURISTIC_RELEVANCE_NORMAL"
            },
            "memberships": {
              "serviceAccount:service-account-4@project-1.iam.gserviceaccount.com": {
                "membership": "MEMBERSHIP_NOT_MATCHED",
                "relevance": "HEURISTIC_RELEVANCE_NORMAL"
              }
            },
            "relevance": "HEURISTIC_RELEVANCE_NORMAL",
            "role": "roles/resourcemanager.tagViewer",
            "rolePermission": "ROLE_PERMISSION_NOT_INCLUDED",
            "rolePermissionRelevance": "HEURISTIC_RELEVANCE_NORMAL"
          }
        ],
        "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/project-1",
        "policy": {
          "bindings": [
            {
              "condition": {
                "expression": "resource.type == \"cloudresourcemanager.googleapis.com/Project\"",
                "title": "Resource-based condition"
              },
              "members": [
                "serviceAccount:service-account-1@project-1.iam.gserviceaccount.com"
              ],
              "role": "roles/bigquery.admin"
            },
            {
              "condition": {
                "expression": "resource.matchTag(\"project-1/tag-key-1\", \"tag-value-1\")",
                "title": "Tag-based condition"
              },
              "members": [
                "serviceAccount:service-account-2@project-1.iam.gserviceaccount.com"
              ],
              "role": "roles/bigquery.admin"
            },
            {
              "members": [
                "user:user-2@example.com"
              ],
              "role": "roles/compute.admin"
            },
            {
              "members": [
                "user:user-1@example.com",
                "user:user-3@example.com"
              ],
              "role": "roles/iam.serviceAccountTokenCreator"
            },
            {
              "members": [
                "user:user-2@example.com",
                "user:user-1@example.com"
              ],
              "role": "roles/owner"
            },
            {
              "members": [
                "serviceAccount:service-account-3@project-1.iam.gserviceaccount.com",
                "serviceAccount:service-account-4@project-1.iam.gserviceaccount.com"
              ],
              "role": "roles/resourcemanager.projectIamAdmin"
            },
            {
              "members": [
                "serviceAccount:service-account-4@project-1.iam.gserviceaccount.com"
              ],
              "role": "roles/resourcemanager.tagViewer"
            }
          ],
          "etag": "BwYY6ttEMEY=",
          "version": 3
        },
        "relevance": "HEURISTIC_RELEVANCE_HIGH"
      },
    ],
    "relevance": "HEURISTIC_RELEVANCE_HIGH"
  },
  "denyPolicyExplanation": {
    "denyAccessState": "DENY_ACCESS_STATE_NOT_DENIED",
    "explainedResources": [
      {
        "denyAccessState": "DENY_ACCESS_STATE_NOT_DENIED",
        "explainedPolicies": [
          {
            "denyAccessState": "DENY_ACCESS_STATE_NOT_DENIED",
            "policy": {
              "createTime": "2024-04-09T23:28:24.103203Z",
              "displayName": "Troubleshooter v3 prober non-tag deny policy",
              "etag": "MTgyMzk3MDY4OTY4MDE0ODg4OTY=",
              "kind": "DenyPolicy",
              "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F546942305807/denypolicies/deny-policy-1",
              "rules": [
                {
                  "denyRule": {
                    "deniedPermissions": [
                      "bigquery.googleapis.com/datasets.create"
                    ],
                    "deniedPrincipals": [
                      "principal://iam.googleapis.com/projects/-/serviceAccounts/service-account-1@project-1.iam.gserviceaccount.com"
                    ]
                  }
                }
              ],
              "uid": "fab63b4d-ecfb-5f06-8a6d-602bf1be5062",
              "updateTime": "2024-05-20T23:29:38.428095Z"
            },
            "relevance": "HEURISTIC_RELEVANCE_HIGH",
            "ruleExplanations": [
              {
                "combinedDeniedPermission": {
                  "permissionMatchingState": "PERMISSION_PATTERN_NOT_MATCHED",
                  "relevance": "HEURISTIC_RELEVANCE_HIGH"
                },
                "combinedDeniedPrincipal": {
                  "membership": "MEMBERSHIP_NOT_MATCHED",
                  "relevance": "HEURISTIC_RELEVANCE_HIGH"
                },
                "combinedExceptionPermission": {
                  "permissionMatchingState": "PERMISSION_PATTERN_NOT_MATCHED",
                  "relevance": "HEURISTIC_RELEVANCE_NORMAL"
                },
                "combinedExceptionPrincipal": {
                  "membership": "MEMBERSHIP_NOT_MATCHED",
                  "relevance": "HEURISTIC_RELEVANCE_NORMAL"
                },
                "deniedPermissions": {
                  "bigquery.googleapis.com/datasets.create": {
                    "permissionMatchingState": "PERMISSION_PATTERN_NOT_MATCHED",
                    "relevance": "HEURISTIC_RELEVANCE_HIGH"
                  }
                },
                "deniedPrincipals": {
                  "principal://iam.googleapis.com/projects/-/serviceAccounts/service-account-1@project-1.iam.gserviceaccount.com": {
                    "membership": "MEMBERSHIP_NOT_MATCHED",
                    "relevance": "HEURISTIC_RELEVANCE_HIGH"
                  }
                },
                "denyAccessState": "DENY_ACCESS_STATE_NOT_DENIED",
                "relevance": "HEURISTIC_RELEVANCE_HIGH"
              }
            ]
          },
        ],
        "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/123456789012",
        "relevance": "HEURISTIC_RELEVANCE_HIGH"
      }
    ],
    "permissionDeniable": true,
    "relevance": "HEURISTIC_RELEVANCE_NORMAL"
  },
  "overallAccessState": "CANNOT_ACCESS",
  "pabPolicyExplanation": {
    "explainedBindingsAndPolicies": [
      {
        "bindingAndPolicyAccessState": "PAB_ACCESS_STATE_NOT_ENFORCED",
        "explainedPolicy": {
          "explainedRules": [
            {
              "combinedResourceInclusionState": "RESOURCE_INCLUSION_STATE_NOT_INCLUDED",
              "effect": "ALLOW",
              "explainedResources": [
                {
                  "relevance": "HEURISTIC_RELEVANCE_NORMAL",
                  "resource": "//cloudresourcemanager.googleapis.com/projects/project-2",
                  "resourceInclusionState": "RESOURCE_INCLUSION_STATE_NOT_INCLUDED"
                }
              ],
              "relevance": "HEURISTIC_RELEVANCE_NORMAL",
              "ruleAccessState": "PAB_ACCESS_STATE_NOT_ALLOWED"
            }
          ],
          "policy": {
            "createTime": "2024-04-09T17:40:51.627668Z",
            "details": {
              "enforcementVersion": "1",
              "rules": [
                {
                  "effect": "ALLOW",
                  "resources": [
                    "//cloudresourcemanager.googleapis.com/projects/project-2"
                  ]
                }
              ]
            },
            "displayName": "Troubleshooter v3 PAB Policy",
            "etag": "m64s4IgR80eDJDywuVA2DA==",
            "name": "organizations/123456789012/locations/global/principalAccessBoundaryPolicies/example-pab-policy",
            "uid": "puid_11875429267422576641",
            "updateTime": "2024-04-09T17:40:51.627668Z"
          },
          "policyAccessState": "PAB_ACCESS_STATE_NOT_ENFORCED",
          "policyVersion": {
            "enforcementState": "PAB_POLICY_ENFORCEMENT_STATE_NOT_ENFORCED",
            "version": 1
          },
          "relevance": "HEURISTIC_RELEVANCE_NORMAL"
        },
        "explainedPolicyBinding": {
          "conditionExplanation": {
            "evaluationStates": [
              {
                "end": 53,
                "value": true
              },
              {
                "end": 153,
                "start": 58,
                "value": false
              },
              {
                "end": 248,
                "start": 157,
                "value": false
              }
            ],
            "value": false
          },
          "policyBinding": {
            "condition": {
              "expression": "principal.type == 'iam.googleapis.com/ServiceAccount' && (principal.subject=='service-account-1@project-1.iam.gserviceaccount.com' || principal.subject=='service-account-2@project-1.iam.gserviceaccount.com')"
            },
            "createTime": "2024-04-09T17:51:13.504418Z",
            "displayName": "PAB Policy Binding on project-1 project",
            "etag": "W/\"hz9IKzHsIqvopqDRcVYDxQ==\"",
            "name": "projects/123456789012/locations/global/policyBindings/example-policy-binding",
            "policy": "organizations/123456789012/locations/global/principalAccessBoundaryPolicies/example-pab-policy",
            "policyKind": "PRINCIPAL_ACCESS_BOUNDARY",
            "policyUid": "puid_11875429267422576641",
            "target": {
              "principalSet": "//cloudresourcemanager.googleapis.com/projects/project-1"
            },
            "uid": "buid_1012746966204940289", 
            "updateTime": "2024-05-09T23:08:56.846355Z"
          },
          "policyBindingState": "POLICY_BINDING_STATE_NOT_ENFORCED",
          "relevance": "HEURISTIC_RELEVANCE_NORMAL"
        },
        "relevance": "HEURISTIC_RELEVANCE_NORMAL"
      }
    ],
    "principalAccessBoundaryAccessState": "PAB_ACCESS_STATE_NOT_ENFORCED",
    "relevance": "HEURISTIC_RELEVANCE_NORMAL"
  }
}

REST

כדי לגלות למה לחשבון משתמש יש או אין הרשאת IAM, משתמשים ב-method ‏iam.troubleshoot של ה-API של פותר הבעיות שקשורות למדיניות.

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • VERSION: גרסת ה-API שבה ייעשה שימוש בבקשה הזו. כדי לפתור בעיות בגישה על סמך כללי מדיניות האישור והדחייה בלבד, משתמשים ב-v3. כדי לפתור בעיות בגישה על סמך מדיניות הרשאה, דחייה ומדיניות לקביעת גבול הגישה לחשבונות משתמשים, משתמשים ב-v3beta.
  • EMAIL: כתובת האימייל של חשבון המשתמש שרוצים לפתור בעיות בהרשאות שלו.
  • RESOURCE: המשאב שעליו ניתנת ההרשאה.
  • PERMISSION: ההרשאה שרוצים לפתור את הבעיה שלה.
  • PROJECT_ID: המזהה של הפרויקט שבו רוצים להשתמש כדי לשלוח את הבקשה. מזהי פרויקטים הם מחרוזות אלפאנומריות, כמו my-project.

ה-method של ה-HTTP וכתובת ה-URL:

POST https://policytroubleshooter.googleapis.com/VERSION/iam:troubleshoot

תוכן בקשת JSON:

{
  "accessTuple": {
    "principal": "EMAIL",
    "fullResourceName": "RESOURCE",
    "permission": "PERMISSION"
  }
}

כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:

אתם אמורים לקבל תגובת JSON שדומה לזו:

הסבר על התוצאות של פותר הבעיות

המסוף

דף התוצאות מכיל את הפרטים הבאים:

פרטי ההערכה

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

פרטי המדיניות

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

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

כללי מדיניות הרשאה ודחייה רלוונטיים כוללים את האפשרויות הבאות:

  • מדיניות ההרשאות של המשאב
  • מדיניות הדחייה של המשאב (אם יש)
  • מדיניות ההרשאות של הפרויקט, התיקייה והארגון שנמצאים מעל למשאב בהיררכיית המשאבים (אם יש)
  • מדיניות הדחייה של הפרויקט, התיקייה והארגון שנמצאים מעל למשאב בהיררכיית המשאבים (אם יש)

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

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

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

הקטע פרטי המדיניות כולל את הקטעים הבאים:

מצב הגישה

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

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

המדיניות לקביעת גבול הגישה לחשבונות משתמשים (PAB)

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

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

המדיניות לקביעת גבול הגישה לחשבונות משתמשים (PAB) יכולה להשפיע על הגישה של חשבון משתמש בדרכים הבאות:

  • למשתמש הראשי יש אפשרות לגשת למשאב: מדיניות גבולות הגישה של המשתמש הראשי חלה על המשתמש הראשי, ואחד מהכללים שלה מכיל את המשאב שנשלחה לגביו השאילתה.
  • לחשבון המשתמש אין אפשרות לגשת למשאב: המדיניות לקביעת גבול הגישה לחשבונות משתמשים (PAB) חלה על חשבון המשתמש, אבל המשאב שנשלחה לגביו השאילתה לא כלול בכללים של המדיניות הזו.
  • לא נאכף: המדיניות לקביעת גבול הגישה לחשבונות משתמשים (PAB) לא נאכפת במצבים הבאים:

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

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

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

כדי לראות את הכללים במדיניות, לוחצים על הכרטיסייה כללי גבולות. בכרטיסייה הזו מוצגת טבלה עם הכללים הרלוונטיים של המדיניות לקביעת גבול הגישה לחשבונות משתמשים (PAB).

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

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

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

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

כדי לראות את ההרשאות שניתנו למדיניות, לוחצים על הכרטיסייה Bindings (הרשאות). בכרטיסייה הזו מוצגת טבלה של קישורי המדיניות הרלוונטיים למדיניות הגבלת הגישה של הגורם הנבחר.

קישור מדיניות רלוונטי אם הוא מחיל את המדיניות לקביעת גבול הגישה לחשבונות משתמשים על החשבון שמתבצעת לגביו השאילתה. כדי שקישור מדיניות יחיל מדיניות לקביעת גבול הגישה לחשבונות משתמשים (PAB) על חשבון משתמש, התנאים הבאים צריכים להתקיים:

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

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

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

מדיניות הדחייה

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

בחלונית Resources with deny policies מפורטים כל כללי מדיניות הדחייה הרלוונטיים, לפי המשאבים שאליהם הם מצורפים. לצד כל מדיניות דחייה מוצגת הערכת גישה. ההערכה הזו חלה רק על מדיניות הדחייה הזו – היא לא משקפת גישה ממדיניות שעברה בירושה. אם אין לכם הרשאה לצפות במדיניות הדחייה של משאב מסוים, המשאב הזה או מדיניות הדחייה שלו לא יופיעו ברשימת המשאבים.

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

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

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

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

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

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

בחלונית Role bindings (קישורים לתפקידים) מוצג טבלה של קישורים לתפקידים במדיניות ההרשאות של המשאב שנבחר. כברירת מחדל, הטבלה מכילה רק קישורי תפקידים שכוללים תפקיד עם ההרשאה שצוינה. אם לחשבון המשתמש אין גישה, בטבלה מוצגים גם קישורי תפקידים עם תפקידים בהתאמה אישית שאפשר לערוך. כדי לראות את כל קישורי התפקידים, מבטלים את הסימון של התיבה הצגת קישורים רלוונטיים בלבד.

בעמודה Access מצוין אם קישור התפקידים מעניק את ההרשאה לחשבון המשתמש. כדי לראות פרטים נוספים על הקצאת התפקיד, לוחצים על See binding details (הצגת פרטי ההקצאה) בשורה של הקצאת התפקיד.

gcloud

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

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

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

    • אם קישור התפקיד כולל את ההרשאה.
    • אם קישור התפקיד כולל את חשבון המשתמש.
    • האם התנאים בקישור התפקיד מתקיימים, אם יש כאלה.

    לאחר מכן, התגובה מדפיסה את טקסט ה-JSON המלא של מדיניות ההרשאה.

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

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

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

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

    כללי מדיניות הרשאה ודחייה רלוונטיים כוללים את האפשרויות הבאות:

    • מדיניות ההרשאות של המשאב
    • מדיניות הדחייה של המשאב (אם יש)
    • מדיניות ההרשאות של הפרויקט, התיקייה והארגון שנמצאים מעל למשאב בהיררכיית המשאבים (אם יש)
    • מדיניות הדחייה של הפרויקט, התיקייה והארגון שנמצאים מעל למשאב בהיררכיית המשאבים (אם יש)

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

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

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

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

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

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

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

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

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

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

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

        משאב נכלל בכלל אם מתקיים אחד מהתנאים הבאים:

        • המשאב מופיע ברשימת הכללים. אפשר לכלול ישירות בכללי בקרת גישה לישויות מורשות (PAB) רק משאבים של מנהל המשאבים (פרויקטים, תיקיות וארגונים).
        • אחת מישויות האב של המשאב (כלומר, פרויקט, תיקייה או ארגון שנמצאים מעל המשאב בהיררכיית המשאבים) מופיעה בכלל.

הרבה אובייקטים בתשובה מכילים גם את השדה relevance. הערך בשדה הזה מציין את מידת התרומה של האובייקט למצב הגישה הכולל. השדה relevance יכול לקבל את הערכים הבאים:

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

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

REST

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

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

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

    כללי מדיניות הרשאה ודחייה רלוונטיים כוללים את האפשרויות הבאות:

    • מדיניות ההרשאות של המשאב
    • מדיניות הדחייה של המשאב (אם יש)
    • מדיניות ההרשאות של הפרויקט, התיקייה והארגון שנמצאים מעל למשאב בהיררכיית המשאבים (אם יש)
    • מדיניות הדחייה של הפרויקט, התיקייה והארגון שנמצאים מעל למשאב בהיררכיית המשאבים (אם יש)

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

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

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

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

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

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

    • אם קישור התפקיד כולל את ההרשאה.
    • אם קישור התפקיד כולל את חשבון המשתמש.
    • האם התנאים בקישור התפקיד מתקיימים, אם יש כאלה.

    לאחר מכן, התגובה מדפיסה את טקסט ה-JSON המלא של מדיניות ההרשאה.

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

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

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

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

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

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

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

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

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

        משאב נכלל בכלל אם מתקיים אחד מהתנאים הבאים:

        • המשאב מופיע ברשימת הכללים. אפשר לכלול ישירות בכללי בקרת גישה לישויות מורשות (PAB) רק משאבים של מנהל המשאבים (פרויקטים, תיקיות וארגונים).
        • אחת מישויות האב של המשאב (כלומר, פרויקט, תיקייה או ארגון שנמצאים מעל המשאב בהיררכיית המשאבים) מופיעה בכלל.

הרבה אובייקטים בתשובה מכילים גם את השדה relevance. הערך בשדה הזה מציין את מידת התרומה של האובייקט למצב הגישה הכולל. השדה relevance יכול לקבל את הערכים הבאים:

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

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

פתרון בעיות בקישורי תפקידים מותנים

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

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

ב-CLI של gcloud וב-API בארכיטקטורת REST, צריך לספק את ההקשר הנוסף הזה באופן ידני.

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

המסוף

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

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

    כניסה לדף Logs Explorer

  2. אם שם הדף הוא Legacy Logs Viewer, לוחצים על התפריט הנפתח Upgrade ובוחרים באפשרות Upgrade to the new Logs Explorer.

  3. כדי להציג רק את יומני הביקורת של פעילות האדמין והגישה לנתונים, מזינים את השאילתה הבאה בכלי ליצירת שאילתות ולוחצים על Run query:

    logName=("RESOURCE_TYPE/RESOURCE_ID/logs/cloudaudit.googleapis.com%2Factivity" OR "RESOURCE_TYPE/RESOURCE_ID/logs/cloudaudit.googleapis.com%2Fdata_access")
    

    מחליפים את הערכים הבאים:

    • RESOURCE_TYPE: סוג המשאב שלגביו רוצים להציג את יומני הביקורת. אפשר להשתמש ב-projects, ב-folders או ב-organizations.
    • RESOURCE_ID: המזהה של המשאב.
  4. מאתרים את הרשומה ביומן הביקורת שמתאימה לבקשה שרוצים לפתור את הבעיה שלה. במאמר שימוש ב-Logs Explorer מוסבר איך משתמשים ב-Logs Explorer כדי למצוא רשומות ספציפיות ביומן.

  5. בעמודה סיכום של רשומת היומן, לוחצים על IAM ואז על פתרון בעיות בגישה.

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

  6. אופציונלי: כדי לפתור בעיה בבקשה אחרת שכוללת כללים של התניות להקצאת תפקידים וכללי דחייה, חוזרים לדף Logs Explorer וחוזרים על השלבים הקודמים.

gcloud

כדי לפתור בעיות שקשורות לקישורי תפקידים מותנים ולכללי דחייה, משתמשים בפקודה gcloud policy-troubleshoot iam.

לפני השימוש בנתוני הפקודה הבאים, צריך להחליף את הנתונים הבאים:

  • EMAIL: כתובת האימייל של חשבון המשתמש שרוצים לפתור בעיות בהרשאות שלו.
  • RESOURCE: המשאב שעליו ניתנה ההרשאה.
  • PERMISSION: ההרשאה שרוצים לפתור את הבעיה שלה.
  • DESTINATION_IP: אופציונלי. כתובת ה-IP של יעד הבקשה שבה יש להשתמש כשבודקים את הקצאות התפקידים המותנות. לדוגמה: 198.1.1.1.
  • DESTINATION_PORT: אופציונלי. יציאת היעד של הבקשה שבה יש להשתמש כשבודקים את הקשרים של תפקידים מותנים. לדוגמה, ‎`8080`‎.
  • REQUEST_TIME: אופציונלי. חותמת הזמן של הבקשה שבה המערכת תשתמש כדי לבדוק את קישורי התפקידים המותנים. משתמשים בחותמת זמן בפורמט RFC 3339 – לדוגמה, 2099-02-01T00:00:00Z.
  • RESOURCE_NAME: אופציונלי. הערך של שם המשאב שבו צריך להשתמש כשבודקים את הקשרים המותנים בין תפקידים. רשימה של הפורמטים המקובלים של שמות משאבים זמינה במאמר פורמט השמות של המשאבים.
  • RESOURCE_SERVICE: אופציונלי. הערך של שירות המשאבים שבו צריך להשתמש כשבודקים קשירת תפקידים מותנית. רשימה של שמות השירותים שאפשר להשתמש בהם מופיעה במאמר ערכי שירות של משאבים.
  • RESOURCE_TYPE: אופציונלי. במאמר ערכים של סוגי משאבים תוכלו למצוא רשימה של סוגי המשאבים שמתקבלים.

מריצים את הפקודה gcloud policy-troubleshoot iam:

‫Linux,‏ macOS או Cloud Shell

gcloud policy-intelligence troubleshoot-policy iam RESOURCE --principal-email=EMAIL \
    --permission=PERMISSION --destination-ip=DESTINATION_IP \
    --destination-port=DESTINATION_PORT --request-time=REQUEST_TIME \
    --resource-name=RESOURCE_NAME --resource-service=RESOURCE_SERVICE \
    --resource-type=RESOURCE_TYPE

‏Windows (PowerShell)

gcloud policy-intelligence troubleshoot-policy iam RESOURCE --principal-email=EMAIL `
    --permission=PERMISSION --destination-ip=DESTINATION_IP `
    --destination-port=DESTINATION_PORT --request-time=REQUEST_TIME `
    --resource-name=RESOURCE_NAME --resource-service=RESOURCE_SERVICE `
    --resource-type=RESOURCE_TYPE

Windows‏ (cmd.exe)

gcloud policy-intelligence troubleshoot-policy iam RESOURCE --principal-email=EMAIL ^
    --permission=PERMISSION --destination-ip=DESTINATION_IP ^
    --destination-port=DESTINATION_PORT --request-time=REQUEST_TIME ^
    --resource-name=RESOURCE_NAME --resource-service=RESOURCE_SERVICE ^
    --resource-type=RESOURCE_TYPE

התשובה תכיל הסבר על הגישה של הגורם הראשי. לכל כלל דחייה וכל קשירת תפקיד עם תנאי, התשובה כוללת שדה conditionExplanation שמתאר אם התנאי מוערך כ-True או כ-False על סמך הקשר של התנאי שסיפקתם.

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

תשובה

...
{
  "allowAccessState": "ALLOW_ACCESS_STATE_GRANTED",
  "combinedMembership": {
    "membership": "MEMBERSHIP_MATCHED",
    "relevance": "HEURISTIC_RELEVANCE_HIGH"
  },
  "condition": {
    "expression": " resource.type \u003d\u003d \"compute.googleapis.com/Instance\" \u0026\u0026 resource.service \u003d\u003d \"compute.googleapis.com\"",
    "title": "Compute instances only",
    "description": "Condition that limits permissions to only Compute instances"
  },
  "conditionExplanation": {
    "evaluationStates": [{
      "end": 51,
      "start": 1,
      "value": true
    }, {
      "end": 99,
      "start": 55,
      "value": true
    }],
    "value": true,
  },
  "memberships": {
    "user:my-user@example.com": {
      "membership": "MEMBERSHIP_MATCHED",
      "relevance": "HEURISTIC_RELEVANCE_HIGH"
    }
  },
  "relevance": "HEURISTIC_RELEVANCE_HIGH",
  "role": "roles/compute.viewer",
  "rolePermission": "ROLE_PERMISSION_INCLUDED",
  "rolePermissionRelevance": "HEURISTIC_RELEVANCE_HIGH"
}
...

REST

כדי לפתור בעיות שקשורות לקישורי תפקידים מותנים ולכללי דחייה, משתמשים ב-method ‏iam.troubleshoot של Policy Troubleshooter API.

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • EMAIL: כתובת האימייל של חשבון המשתמש שרוצים לפתור בעיות בהרשאות שלו.
  • RESOURCE: המשאב שעליו ניתנה ההרשאה.
  • PERMISSION: ההרשאה שרוצים לפתור את הבעיה שלה.
  • DESTINATION_IP: אופציונלי. כתובת ה-IP של יעד הבקשה שבה יש להשתמש כשבודקים את הקצאות התפקידים המותנות. לדוגמה: 198.1.1.1.
  • DESTINATION_PORT: אופציונלי. יציאת היעד של הבקשה שבה יש להשתמש כשבודקים את הקשרים של תפקידים מותנים. לדוגמה, ‎`8080`‎.
  • REQUEST_TIME: אופציונלי. חותמת הזמן של הבקשה שבה המערכת תשתמש כדי לבדוק את קישורי התפקידים המותנים. משתמשים בחותמת זמן בפורמט RFC 3339 – לדוגמה, 2099-02-01T00:00:00Z.
  • RESOURCE_NAME: אופציונלי. הערך של שם המשאב שבו צריך להשתמש כשבודקים את הקשרים המותנים בין תפקידים. רשימה של הפורמטים המקובלים של שמות משאבים זמינה במאמר פורמט השמות של המשאבים.
  • RESOURCE_SERVICE: אופציונלי. הערך של שירות המשאבים שבו צריך להשתמש כשבודקים קשירת תפקידים מותנית. רשימה של שמות השירותים שאפשר להשתמש בהם מופיעה במאמר ערכי שירות של משאבים.
  • RESOURCE_TYPE: אופציונלי. במאמר ערכים של סוגי משאבים תוכלו למצוא רשימה של סוגי המשאבים שמתקבלים.

ה-method של ה-HTTP וכתובת ה-URL:

POST https://policytroubleshooter.googleapis.com/v3/iam:troubleshoot

תוכן בקשת JSON:

{
  "accessTuple": {
    "principal": "EMAIL",
    "fullResourceName": "RESOURCE",
    "permission": "PERMISSION",
    "conditionContext": {
      "destination": {
        "ip": DESTINATION_IP,
        "port": DESTINATION_PORT
      },
      "request": {
        "receiveTime": REQUEST_TIME
      },
      "resource": {
        "name": RESOURCE_NAME,
        "service": RESOURCE_SERVICE,
        "type": RESOURCE_TYPE
      }
    }
  }
}

כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:

התשובה תכיל הסבר על הגישה של הגורם הראשי. לכל כלל דחייה וכל קשירת תפקיד עם תנאי, התשובה כוללת שדה conditionExplanation שמתאר אם התנאי מוערך כ-True או כ-False על סמך הקשר של התנאי שסיפקתם.

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

...
{
  "allowAccessState": "ALLOW_ACCESS_STATE_GRANTED",
  "role": "roles/compute.viewer",
  "rolePermission": "ROLE_PERMISSION_INCLUDED",
  "rolePermissionRelevance": "HEURISTIC_RELEVANCE_HIGH",
  "combinedMembership": {
    "membership": "MEMBERSHIP_MATCHED",
    "relevance": "HEURISTIC_RELEVANCE_HIGH"
  },
  "memberships": {
    "user:my-user@example.com": {
      "membership": "MEMBERSHIP_MATCHED",
      "relevance": "HEURISTIC_RELEVANCE_HIGH"
    }
  },
  "relevance": "HEURISTIC_RELEVANCE_HIGH",
  "condition": {
    "expression": " resource.type \u003d\u003d \"compute.googleapis.com/Instance\" \u0026\u0026 resource.service \u003d\u003d \"compute.googleapis.com\"",
    "title": "Compute instances only",
    "description": "Condition that limits permissions to only Compute instances"
  },
  "conditionExplanation": {
    "value": true,
    "evaluationStates": [{
      "start": 1,
      "end": 51,
      "value": true
    }, {
      "start": 55,
      "end": 99,
      "value": true
    }]
  }
}
...

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