ניתוח של מדיניות הארגון

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

שאילתת ניתוח מורכבת מהיקף ומאילוץ.

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

  • מפעילים את Cloud Asset API.

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

    כדי להפעיל ממשקי API, נדרשת ההרשאה serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק 'שימוש בשירות'' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים

    להפעלת ה-API

    צריך להפעיל את ה-API בפרויקט שבו ישמש לשליחת השאילתה. המשאב הזה לא חייב להיות זהה למשאב שאליו מצומצמת השאילתה.

  • אופציונלי: אם רוצים להריץ יותר מ-20 שאילתות ניתוח מדיניות לכל ארגון ביום, צריך לוודא שיש לכם הפעלה ברמת הארגון של רמת Premium או Enterprise של Security Command Center. מידע נוסף זמין במאמר שאלות בנושא חיוב.

התפקידים וההרשאות הנדרשים

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

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

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

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

כדי להריץ ניתוח של מדיניות הארגון, נדרשות ההרשאות הבאות:

  • כדי לבצע את הניתוח:
    • cloudasset.assets.analyzeOrgPolicy
    • cloudasset.assets.searchAllResources
    • cloudasset.assets.searchAllIamPolicies
  • כדי לראות אילוצים מותאמים אישית ומנוהלים: orgpolicy.customConstraints.get

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

תמחור ומכסות

כלי הניתוח למדיניות לניתוח מדיניות ארגונית בהיקף נרחב (מעל 20 שאילתות לארגון ביום) והדמיות של ירושה זמינים רק ללקוחות עם הפעלות ברמת הארגון של Security Command Center.

המיכסה של כלי הניתוח למדיניות של Organization Policy משותפת לכל כלי הניתוח למדיניות. מידע נוסף זמין במאמר שאלות בנושא חיוב.

ניתוח של כללי מדיניות מוגדרים

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

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

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

  • project: המזהה של משאב הפרויקט שאליו שייכת המדיניות המאוחדת הזו.

  • folders: המזהה של משאבי תיקיות שהם ישויות אב של המשאב שאליו מצורפת מדיניות הארגון.

  • organization: המזהה של משאב הארגון שהוא ישות האם של המשאב שאליו מצורפת מדיניות הארגון.

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

אם המשאבים שלכם מוגנים על ידי גבולות גזרה לשירות של VPC Service Controls, אתם צריכים ליצור כלל תעבורת נתונים יוצאת (egress) בגבולות הגזרה של משאב הארגון, שיאפשר גישה לשירות cloudasset.googleapis.com. מכיוון שלא ניתן להגדיר הגבלות ברמת ה-method ב-Cloud Asset API, צריך לאפשר את כל ה-methods של Cloud Asset API על ידי ציון method: * בכלל היציאה. אם אין לכם כלל יציאה, הבקשה תיכשל ותוצג השגיאה NETWORK_NOT_IN_SAME_SERVICE_PERIMETER. מידע נוסף זמין במאמר ניפוי באגים בבקשות שנחסמו על ידי VPC Service Controls.

המסוף

  1. נכנסים לדף כלי הניתוח למדיניות במסוף Google Cloud .

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

  2. בקטע Analyze organization policy, מוצאים את החלונית Where are specific organization policies configured? ולוחצים על Create query בחלונית הזו.

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

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

  5. מזינים את השם של האילוץ שרוצים לנתח. הקידומת של סוג האילוץ שאתם מנתחים כבר כלולה. לדוגמה, כדי להגדיר את האילוץ המוגדר מראש של הגבלת הדומיין, מזינים iam.allowedPolicyMemberDomains. כדי להגדיר את האילוץ המנוהל של יצירת חשבון שירות, מזינים iam.managed.disableServiceAccountKeyCreation. כדי להגדיר אילוץ מותאם אישית, מזינים את השם שלו, כמו disableGkeAutoUpgrade.

  6. לוחצים על Analyze (ניתוח) ואז על Run query (הפעלת שאילתה). בדף הדוח מוצגים פרמטרי השאילתה שהזנתם, וטבלת תוצאות של כל המשאבים שההגבלה הזו חלה עליהם באופן ישיר.

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

  8. כדי לראות את ההורשה של האילוץ שניתחתם, בוחרים לפחות משאב אחד מהרשימה ואז לוחצים על View inheritance (הצגת ההורשה). אפשר גם לעבור מיד לתצוגה החזותית כשיוצרים את שאילתת הניתוח. לשם כך לוחצים על ניתוח ואז על תצוגה חזותית. מידע נוסף זמין במאמר הצגה חזותית של הרשאות ירושה.

gcloud

כדי לקבל ניתוח של אופן האכיפה של אילוץ מדיניות הארגון בארגון, משתמשים בפקודה gcloud asset analyze-org-policies:

gcloud asset analyze-org-policies \
    --constraint=CONSTRAINT_NAME  \
    --scope=organizations/ORGANIZATION_ID \
    --limit=LIMIT_POLICIES \
    --filter=FILTER_QUERY

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

  • CONSTRAINT_NAME: השם של האילוץ של מדיניות הארגון שרוצים לנתח. רשימת האילוצים זמינה במאמר בנושא אילוצים של מדיניות הארגון.

  • ORGANIZATION_ID: המזהה של משאב הארגון. מידע נוסף על איתור מזהה הארגון זמין במאמר יצירה וניהול של ארגונים.

  • LIMIT_POLICIES: מספר רשומות התוצאות שרוצים להציג. כדי לראות את כל הערכים, מזינים unlimited.

  • FILTER_QUERY: שאילתת סינון כדי לראות רק מדיניות שתואמת לביטוי הסינון. השדה היחיד שזמין לסינון הוא consolidated_policy.attached_resource. לדוגמה, ‫consolidated_policy.attached_resource="//cloudresourcemanager.googleapis.com/projects/1234567890" יחזיר רק את כללי המדיניות שצורפו לפרויקט עם מזהה הפרויקט 1234567890.

תגובת ה-YAML תיראה כך:

דוגמה לתגובת YAML

---
consolidatedPolicy:
  appliedResource: //cloudresourcemanager.googleapis.com/projects/opa-test-project-1-364621
  attachedResource: //cloudresourcemanager.googleapis.com/projects/opa-test-project-1-364621
  rules:
  - enforce: true
policyBundle:
- appliedResource: //cloudresourcemanager.googleapis.com/projects/opa-test-project-1-364621
  attachedResource: //cloudresourcemanager.googleapis.com/projects/opa-test-project-1-364621
  reset: true
- appliedResource: //cloudresourcemanager.googleapis.com/organizations/474566717491
  rules:
  - enforce: true
---
consolidatedPolicy:
  appliedResource: //cloudresourcemanager.googleapis.com/organizations/474566717491
  rules:
  - enforce: true
policyBundle:
- appliedResource: //cloudresourcemanager.googleapis.com/organizations/474566717491
  rules:
  - enforce: true

REST

כדי לקבל ניתוח של האופן שבו אילוץ במדיניות הארגון נאכף בארגון, משתמשים ב-method ‏analyzeOrgPolicies של Cloud Asset API.

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

GET https://cloudasset.googleapis.com/v1/organizations/ORGANIZATION_ID:analyzeOrgPolicies

תוכן בקשת JSON:

JSON_REQUEST="{
  'constraint': 'CONSTRAINT_NAME',
  'filter': 'FILTER_QUERY',
  'page_size': PAGE_SIZE,
  'page_token': PAGE_TOKEN
}"

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

  • ORGANIZATION_ID: המזהה של משאב הארגון. מידע נוסף על איתור מזהה הארגון זמין במאמר יצירה וניהול של ארגונים.

  • CONSTRAINT_NAME: השם של האילוץ של מדיניות הארגון שרוצים לנתח. רשימת האילוצים זמינה במאמר בנושא אילוצים של מדיניות הארגון.

  • FILTER_QUERY: שאילתת סינון כדי לראות רק מדיניות שתואמת לביטוי הסינון. השדה היחיד שזמין לסינון הוא consolidated_policy.attached_resource. לדוגמה, ‫consolidated_policy.attached_resource="//cloudresourcemanager.googleapis.com/projects/1234567890" יחזיר רק מדיניות שצורפה לפרויקט עם מזהה הפרויקט 1234567890.

  • PAGE_SIZE: מספר רשומות התוצאות שרוצים לראות בכל דף. כדי לראות את כל הערכים, מזינים unlimited. אם שולחים בקשה עם הדגל הזה, הפונקציה מחזירה את הערך nextPageToken אם המספר הכולל של רשומות התוצאות גדול מ-PAGE_SIZE.

  • PAGE_TOKEN: אפשר להגדיר אותו רק בבקשות אחרי הבקשה הראשונה שכוללת את הדגל page_size. אפשר להשתמש בערכים nextPageToken שמתקבלים מהתגובות הקודמות כדי להחזיר דף מסוים של תוצאות.

תגובת ה-JSON תהיה דומה לזו:

דוגמה לתגובת JSON

{
  "orgPolicyResults": [
    {
      "consolidatedPolicy": {
        "attachedResource": "//cloudresourcemanager.googleapis.com/folders/123456789012",
        "rules": [
          {
            "values": {
              "allowedValues": [
                "C0265whk2"
              ]
            }
          },
          {
            "values": {
              "allowedValues": [
                "C03kd36xr"
              ]
            }
          }
        ],
        "appliedResource": "//cloudresourcemanager.googleapis.com/folders/123456789012"
      },
      "policyBundle": [
        {
          "attachedResource": "//cloudresourcemanager.googleapis.com/folders/123456789012",
          "rules": [
            {
              "values": {
                "allowedValues": [
                  "C03kd36xr"
                ]
              }
            }
          ],
          "inheritFromParent": true,
          "appliedResource": "//cloudresourcemanager.googleapis.com/folders/123456789012"
        },
        {
          "attachedResource": "//cloudresourcemanager.googleapis.com/folders/234567890123",
          "rules": [
            {
              "values": {
                "allowedValues": [
                  "C0265whk2"
                ]
              }
            }
          ],
          "appliedResource": "//cloudresourcemanager.googleapis.com/folders/234567890123"
        }
      ]
    },
    {
      "consolidatedPolicy": {
        "attachedResource": "//cloudresourcemanager.googleapis.com/folders/234567890123",
        "rules": [
          {
            "values": {
              "allowedValues": [
                "C0265whk2"
              ]
            }
          }
        ],
        "appliedResource": "//cloudresourcemanager.googleapis.com/folders/234567890123"
      },
      "policyBundle": [
        {
          "attachedResource": "//cloudresourcemanager.googleapis.com/folders/234567890123",
          "rules": [
            {
              "values": {
                "allowedValues": [
                  "C0265whk2"
                ]
              }
            }
          ],
          "appliedResource": "//cloudresourcemanager.googleapis.com/folders/234567890123"
        }
      ]
    }
  ]
  "constraint": {
    "googleDefinedConstraint": {
      "name": "constraints/iam.allowedPolicyMemberDomains",
      "displayName": "Domain restricted sharing",
      "description": "This list constraint defines one or more Cloud Identity or Google Workspace customer IDs whose principals can be added to IAM policies. \u003cbr\u003eBy default, all user identities are allowed to be added to IAM policies. Only allowed values can be defined in this constraint, denied values are not supported. \u003cbr\u003eIf this constraint is active, only principals that belong to the allowed customer IDs can be added to IAM policies.",
      "constraintDefault": "ALLOW",
      "listConstraint": {}
    }
  }
}

ניתוח קונטיינרים

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

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

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

  • conditionEvaluation: אם התנאים הכלולים גורמים לאכיפה של מדיניות הארגון, הערך של evaluationValue הוא TRUE. אם התנאים גורמים לכך שמדיניות הארגון לא נאכפת, הערך של evaluationValue הוא FALSE. אם התנאי לא נתמך על ידי אחד או יותר מהמשאבים שבהם נאכפת מדיניות הארגון, התנאי עצמו מוחזר.

  • effectiveTags: כל התגים שמצורפים ישירות למאגר התגים או עוברים בירושה מהמאגר ומהמאגרים ברמה שמעליו בהיררכיה.

  • folders: המזהה של משאבי תיקיות שמכילים את המאגר שאליו מצורפת מדיניות הארגון.

  • fullResourceName: השם המלא של המאגר.

  • organization: המזהה של משאב הארגון שהוא ישות אם של המאגר שאליו מצורפת מדיניות הארגון.

  • parent: שם המשאב המלא של ההורה של המאגר הזה.

  • policyBundle: מדיניות הארגון שהוגדרה ישירות במאגר, אם קיימת כזו, ומדיניות הארגון שהוגדרה ברכיבי האב של המאגר בהיררכיית המשאבים.

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

אם המשאבים שלכם מוגנים על ידי גבולות גזרה לשירות של VPC Service Controls, אתם צריכים ליצור כלל תעבורת נתונים יוצאת (egress) בגבולות הגזרה של משאב הארגון, שיאפשר גישה לשירות cloudasset.googleapis.com. מכיוון שלא ניתן להגדיר הגבלות ברמת ה-method ב-Cloud Asset API, צריך לאפשר את כל ה-methods של Cloud Asset API על ידי ציון method: * בכלל היציאה. אם אין לכם כלל יציאה, הבקשה תיכשל ותוצג השגיאה NETWORK_NOT_IN_SAME_SERVICE_PERIMETER. מידע נוסף זמין במאמר ניפוי באגים בבקשות שנחסמו על ידי VPC Service Controls.

המסוף

  1. נכנסים לדף כלי הניתוח למדיניות במסוף Google Cloud .

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

  2. בקטע Analyze organization policy, מוצאים את החלונית Which projects or folders are affected by an organization policy constraint? ולוחצים על Create query בחלונית הזו.

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

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

  5. מזינים את השם של האילוץ שרוצים לנתח. הקידומת של סוג האילוץ שאתם מנתחים כבר כלולה. לדוגמה, כדי להגדיר את האילוץ המוגדר מראש של הגבלת הדומיין, מזינים iam.allowedPolicyMemberDomains. כדי להגדיר את האילוץ המנוהל של יצירת חשבון שירות, מזינים iam.managed.disableServiceAccountKeyCreation. כדי להגדיר אילוץ מותאם אישית, מזינים את השם שלו, כמו disableGkeAutoUpgrade.

  6. לוחצים על Run query. בדף הדוח מוצגים פרמטרים של שאילתות שהזנתם, וטבלת תוצאות של כל מאגרי התגים שהאילוץ הזה חל עליהם או שהם ירשו אותו.

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

  8. כדי לראות את ההורשה של האילוץ שניתחתם, בוחרים לפחות מאגר אחד מהרשימה ולוחצים על View inheritance (הצגת ההורשה). אפשר גם לעבור מיד לתצוגה החזותית כשיוצרים את שאילתת הניתוח. לשם כך לוחצים על ניתוח ואז על תצוגה חזותית. מידע נוסף זמין במאמר הצגה חזותית של הרשאות ירושה.

gcloud

כדי לקבל ניתוח של אופן האכיפה של אילוץ מדיניות הארגון על מאגרי תגים בארגון, משתמשים בפקודה gcloud asset analyze-org-policy-governed-containers:

gcloud asset analyze-org-policy-governed-containers \
    --constraint=CONSTRAINT_NAME  \
    --scope=organizations/ORGANIZATION_ID \
    --limit=LIMIT_CONTAINERS \
    --filter=FILTER_QUERY

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

  • CONSTRAINT_NAME: השם של האילוץ של מדיניות הארגון שרוצים לנתח. רשימת האילוצים זמינה במאמר בנושא אילוצים של מדיניות הארגון.

  • ORGANIZATION_ID: המזהה של משאב הארגון. מידע נוסף על איתור מזהה הארגון זמין במאמר יצירה וניהול של ארגונים.

  • LIMIT_CONTAINERS: מספר רשומות התוצאות שרוצים להציג. כדי לראות את כל הערכים, מזינים unlimited.

  • FILTER_QUERY: שאילתת סינון כדי לראות רק מאגרי תגים שתואמים לביטוי הסינון. השדה היחיד שזמין לסינון הוא parent. לדוגמה, הפקודה parent="//cloudresourcemanager.googleapis.com/organizations/012345678901" תחזיר רק מאגרי נתונים שהם צאצאים של הארגון עם מזהה הארגון 012345678901.

תגובת ה-YAML תיראה כך:

דוגמה לתגובת YAML

---
consolidatedPolicy:
  appliedResource: //cloudresourcemanager.googleapis.com/projects/donghe-project1
  attachedResource: //cloudresourcemanager.googleapis.com/projects/donghe-project1
  rules:
  - values:
      allowedValues:
      - projects/donghe-project1/zones/us-central1-a/instances/instance-1
fullResourceName: //cloudresourcemanager.googleapis.com/projects/donghe-project1
parent: //cloudresourcemanager.googleapis.com/folders/86513245445
policyBundle:
- appliedResource: //cloudresourcemanager.googleapis.com/projects/donghe-project1
  attachedResource: //cloudresourcemanager.googleapis.com/projects/donghe-project1
  inheritFromParent: true
  rules:
  - values:
      allowedValues:
      - projects/donghe-project1/zones/us-central1-a/instances/instance-1
---
consolidatedPolicy:
  appliedResource: //cloudresourcemanager.googleapis.com/projects/jeffreyai-prj01-on-ipa1
  attachedResource: //cloudresourcemanager.googleapis.com/projects/jeffreyai-prj01-on-ipa1
  rules:
  - denyAll: true
fullResourceName: //cloudresourcemanager.googleapis.com/projects/jeffreyai-prj01-on-ipa1
parent: //cloudresourcemanager.googleapis.com/organizations/474566717491
policyBundle:
- appliedResource: //cloudresourcemanager.googleapis.com/projects/jeffreyai-prj01-on-ipa1
  attachedResource: //cloudresourcemanager.googleapis.com/projects/jeffreyai-prj01-on-ipa1
  inheritFromParent: true
  rules:
  - denyAll: true
---
consolidatedPolicy:
  appliedResource: //cloudresourcemanager.googleapis.com/projects/opa-test-project-1-364621
  attachedResource: //cloudresourcemanager.googleapis.com/projects/opa-test-project-1-364621
  rules:
  - values:
      allowedValues:
      - projects/opa-test-project-1-364621/zones/us-central1-a/instances/instance-1
fullResourceName: //cloudresourcemanager.googleapis.com/projects/opa-test-project-1-364621
parent: //cloudresourcemanager.googleapis.com/folders/666681422980
policyBundle:
- appliedResource: //cloudresourcemanager.googleapis.com/projects/opa-test-project-1-364621
  attachedResource: //cloudresourcemanager.googleapis.com/projects/opa-test-project-1-364621
  rules:
  - values:
      allowedValues:
      - projects/opa-test-project-1-364621/zones/us-central1-a/instances/instance-1

REST

כדי לקבל ניתוח של האופן שבו אילוץ של מדיניות הארגון נאכף על מאגרי נתונים בארגון, משתמשים ב-method ‏analyzeOrgPolicyGovernedContainers של Cloud Asset API.

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

GET https://cloudasset.googleapis.com/v1/organizations/ORGANIZATION_ID:analyzeOrgPolicyGovernedContainers

תוכן בקשת JSON:

JSON_REQUEST="{
  'constraint': 'CONSTRAINT_NAME',
  'filter': '"FILTER_QUERY"',
  'page_size': PAGE_SIZE,
  'page_token': PAGE_TOKEN
}"

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

  • ORGANIZATION_ID: המזהה של משאב הארגון. מידע נוסף על איתור מזהה הארגון זמין במאמר יצירה וניהול של ארגונים.

  • CONSTRAINT_NAME: השם של האילוץ של מדיניות הארגון שרוצים לנתח. רשימת האילוצים זמינה במאמר בנושא אילוצים של מדיניות הארגון.

  • FILTER_QUERY: שאילתת סינון כדי לראות רק מאגרי תגים שתואמים לביטוי הסינון. השדה היחיד שזמין לסינון הוא parent. לדוגמה, parent="//cloudresourcemanager.googleapis.com/organizations/012345678901" יחזיר רק מאגרי נתונים שהם צאצאים של הארגון עם מזהה הארגון 012345678901.

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

  • PAGE_TOKEN: אפשר להגדיר אותו רק בבקשות אחרי הבקשה הראשונה שכוללת את הדגל page_size. אפשר להשתמש בערכים nextPageToken שמתקבלים מהתגובות הקודמות כדי להחזיר דף מסוים של תוצאות.

תגובת ה-JSON תהיה דומה לזו:

דוגמה לתגובת JSON

{
  "governedContainers": [
    {
      "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/opa-test-project-2",
      "parent": "//cloudresourcemanager.googleapis.com/folders/513502730678",
      "consolidatedPolicy": {
        "attachedResource": "//cloudresourcemanager.googleapis.com/folders/513502730678",
        "rules": [
          {
            "enforce": false
          }
        ],
        "appliedResource": "//cloudresourcemanager.googleapis.com/folders/513502730678"
      },
      "policyBundle": [
        {
          "attachedResource": "//cloudresourcemanager.googleapis.com/folders/513502730678",
          "rules": [
            {
              "enforce": false
            }
          ],
          "appliedResource": "//cloudresourcemanager.googleapis.com/folders/513502730678"
        },
        {
          "attachedResource": "//cloudresourcemanager.googleapis.com/folders/666681422980",
          "rules": [
            {
              "enforce": true
            }
          ],
          "appliedResource": "//cloudresourcemanager.googleapis.com/folders/666681422980"
        }
      ]
    },
    {
      "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/opa-test-project-1",
      "parent": "//cloudresourcemanager.googleapis.com/folders/513502730678",
      "consolidatedPolicy": {
        "attachedResource": "//cloudresourcemanager.googleapis.com/folders/513502730678",
        "rules": [
          {
            "enforce": false
          }
        ],
        "appliedResource": "//cloudresourcemanager.googleapis.com/folders/513502730678"
      },
      "policyBundle": [
        {
          "attachedResource": "//cloudresourcemanager.googleapis.com/folders/513502730678",
          "rules": [
            {
              "enforce": false
            }
          ],
          "appliedResource": "//cloudresourcemanager.googleapis.com/folders/513502730678"
        },
        {
          "attachedResource": "//cloudresourcemanager.googleapis.com/folders/666681422980",
          "rules": [
            {
              "enforce": true
            }
          ],
          "appliedResource": "//cloudresourcemanager.googleapis.com/folders/666681422980"
        }
      ]
    }
  ]
  "constraint": {
    "googleDefinedConstraint": {
      "name": "constraints/compute.requireOsLogin",
      "displayName": "Require OS Login",
      "description": "This boolean constraint, when set to \u003ccode\u003etrue\u003c/code\u003e, enables OS Login on all newly created Projects. All VM instances created in new projects will have OS Login enabled. On new and existing projects, this constraint prevents metadata updates that disable OS Login at the project or instance level. \u003cbr\u003eBy default, the OS Login feature is disabled on Compute Engine projects.\u003cbr\u003eGKE instances in private clusters running node pool versions 1.20.5-gke.2000 and later support OS Login. GKE instances in public clusters do not currently support OS Login. If this constraint is applied to a Project running public clusters, GKE instances running in that Project may not function properly.",
      "constraintDefault": "ALLOW",
      "booleanConstraint": {}
    }
  }
}

ניתוח נכסים

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

  • constraints/ainotebooks.accessMode
  • constraints/ainotebooks.disableFileDownloads
  • constraints/ainotebooks.disableRootAccess
  • constraints/ainotebooks.disableTerminal
  • constraints/ainotebooks.environmentOptions
  • constraints/ainotebooks.requireAutoUpgradeSchedule
  • constraints/ainotebooks.restrictVpcNetworks
  • constraints/compute.disableGuestAttributesAccess
  • constraints/compute.disableInstanceDataAccessApis
  • constraints/compute.disableNestedVirtualization
  • constraints/compute.disableSerialPortAccess
  • constraints/compute.disableSerialPortLogging
  • constraints/compute.disableVpcExternalIpv6
  • constraints/compute.requireOsLogin
  • constraints/compute.requireShieldedVm
  • constraints/compute.restrictLoadBalancerCreationForTypes
  • constraints/compute.restrictProtocolForwardingCreationForTypes
  • constraints/compute.restrictXpnProjectLienRemoval
  • constraints/compute.setNewProjectDefaultToZonalDNSOnly
  • constraints/compute.skipDefaultNetworkCreation
  • constraints/compute.trustedImageProjects
  • constraints/compute.vmCanIpForward
  • constraints/compute.vmExternalIpAccess
  • constraints/gcp.detailedAuditLoggingMode
  • constraints/gcp.resourceLocations
  • constraints/iam.allowedPolicyMemberDomains
  • constraints/iam.automaticIamGrantsForDefaultServiceAccounts
  • constraints/iam.disableServiceAccountCreation
  • constraints/iam.disableServiceAccountKeyCreation
  • constraints/iam.disableServiceAccountKeyUpload
  • constraints/iam.restrictCrossProjectServiceAccountLienRemoval
  • constraints/iam.serviceAccountKeyExpiryHours
  • constraints/resourcemanager.accessBoundaries
  • constraints/resourcemanager.allowedExportDestinations
  • constraints/sql.restrictAuthorizedNetworks
  • constraints/sql.restrictNoncompliantDiagnosticDataAccess
  • constraints/sql.restrictNoncompliantResourceCreation
  • constraints/sql.restrictPublicIp
  • constraints/storage.publicAccessPrevention
  • constraints/storage.restrictAuthTypes
  • constraints/storage.uniformBucketLevelAccess

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

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

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

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

  • conditionEvaluation: אם התנאים הכלולים גורמים לאכיפה של מדיניות הארגון, הערך של evaluationValue הוא TRUE. אם התנאים גורמים לכך שמדיניות הארגון לא נאכפת, הערך של evaluationValue הוא FALSE. אם התנאי לא נתמך על ידי אחד או יותר מהמשאבים שבהם נאכפת מדיניות הארגון, התנאי עצמו מוחזר.

  • assetType: סוג המשאב של הנכס.

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

  • folders: המזהה של משאבי תיקיות שמכילים את המשאב שאליו מצורפת מדיניות הארגון.

  • fullResourceName: שם המשאב המלא של המשאב.

  • organization: שם המשאב היחסי של הארגון שמכיל את המשאב.

  • parent: שם המשאב המלא של ההורה של המשאב.

  • project: מזהה הפרויקט שמכיל את המשאב.

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

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

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

  • assetType: סוג המשאב שאליו מצורפת מדיניות ההרשאה.

  • attachedResource: השם המלא של המשאב שאליו מצורפת מדיניות ההרשאה.

  • folders: שם המשאב היחסי של תיקיות שמכילות את מדיניות ההרשאה.

  • organization: שם המשאב היחסי של הארגון שמכיל את מדיניות ההרשאה.

  • policy: מדיניות ההרשאות.

  • project: שם המשאב היחסי של הפרויקט שמכיל את מדיניות ההרשאה.

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

אם המשאבים שלכם מוגנים על ידי גבולות גזרה לשירות של VPC Service Controls, אתם צריכים ליצור כלל תעבורת נתונים יוצאת (egress) בגבולות הגזרה של משאב הארגון, שיאפשר גישה לשירות cloudasset.googleapis.com. מכיוון שלא ניתן להגדיר הגבלות ברמת ה-method ב-Cloud Asset API, צריך לאפשר את כל ה-methods של Cloud Asset API על ידי ציון method: * בכלל היציאה. אם אין לכם כלל יציאה, הבקשה תיכשל ותוצג השגיאה NETWORK_NOT_IN_SAME_SERVICE_PERIMETER. מידע נוסף זמין במאמר ניפוי באגים בבקשות שנחסמו על ידי VPC Service Controls.

המסוף

  1. נכנסים לדף כלי הניתוח למדיניות במסוף Google Cloud .

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

  2. בקטע Analyze organization policy, מאתרים את החלונית עם התווית Which resources are affected by an organization policy constraint? ולוחצים על Create query בחלונית הזו.

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

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

  5. מזינים את השם של האילוץ שרוצים לנתח. הקידומת של סוג האילוץ שאתם מנתחים כבר כלולה. לדוגמה, כדי להגדיר את האילוץ המוגדר מראש לגישה ברמת הקטגוריה, מזינים storage.uniformBucketLevelAccess. כדי להגדיר את האילוץ המנוהל ליצירת חשבון שירות, מזינים iam.managed.disableServiceAccountKeyCreation. כדי להגדיר אילוץ בהתאמה אישית, מזינים את השם שלו, כמו disableGkeAccess.

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

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

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

gcloud

כדי לקבל ניתוח של אופן האכיפה של אילוץ מדיניות הארגון על נכסים בארגון, משתמשים בפקודה gcloud asset analyze-org-policy-governed-assets:

gcloud asset analyze-org-policy-governed-assets \
    --constraint=CONSTRAINT_NAME  \
    --scope=organizations/ORGANIZATION_ID \
    --limit=LIMIT_ASSETS \
    --filter=FILTER_QUERY

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

  • CONSTRAINT_NAME: השם של האילוץ של מדיניות הארגון שרוצים לנתח. רשימת האילוצים זמינה במאמר בנושא אילוצים של מדיניות הארגון.

  • ORGANIZATION_ID: המזהה של משאב הארגון. מידע נוסף על איתור מזהה הארגון זמין במאמר יצירה וניהול של ארגונים.

  • LIMIT_ASSETS: מספר רשומות התוצאות שרוצים להציג. כדי לראות את כל הערכים, מזינים unlimited.

  • FILTER_QUERY: שאילתת סינון להצגת נכסים שתואמים לביטוי הסינון. השדות הזמינים לסינון הם governed_resource.folders,‏ governed_resource.project,‏ governed_iam_policy.folders ו-governed_iam_policy.project. לדוגמה, הפקודה governed_resource.project="projects/1234567890" תחזיר רק נכסים שצורפו לפרויקט עם מזהה הפרויקט 1234567890.

תגובת ה-YAML תיראה כך:

דוגמה לתגובת YAML

---
consolidatedPolicy:
  appliedResource: //cloudresourcemanager.googleapis.com/projects/opa-test-project-2
  attachedResource: //cloudresourcemanager.googleapis.com/projects/opa-test-project-2
  rules:
  - enforce: false
governedResource:
  folders:
  - folders/513502730678
  - folders/666681422980
  fullResourceName: //container.googleapis.com/projects/opa-test-project-2/zones/us-central1-c/clusters/opa-test-project-2-cluster-1/nodePools/default-pool
  organization: organizations/474566717491
  parent: //container.googleapis.com/projects/opa-test-project-2/zones/us-central1-c/clusters/opa-test-project-2-cluster-1
  project: projects/892625391619
policyBundle:
- appliedResource: //cloudresourcemanager.googleapis.com/projects/opa-test-project-2
  attachedResource: //cloudresourcemanager.googleapis.com/projects/opa-test-project-2
  reset: true
- appliedResource: //cloudresourcemanager.googleapis.com/organizations/474566717491
  attachedResource: //cloudresourcemanager.googleapis.com/organizations/474566717491
  rules:
  - enforce: true
---
consolidatedPolicy:
  appliedResource: //cloudresourcemanager.googleapis.com/projects/project2-244918
  attachedResource: //cloudresourcemanager.googleapis.com/projects/project2-244918
  rules:
  - enforce: false
governedResource:
  folders:
  - folders/800636178739
  - folders/408342778736
  fullResourceName: //container.googleapis.com/projects/project2-244918/zones/us-central1-c/clusters/cluster-1/nodePools/default-pool
  organization: organizations/474566717491
  parent: //container.googleapis.com/projects/project2-244918/zones/us-central1-c/clusters/cluster-1
  project: projects/761097189269
policyBundle:
- appliedResource: //cloudresourcemanager.googleapis.com/projects/project2-244918
  attachedResource: //cloudresourcemanager.googleapis.com/projects/project2-244918
  rules:
  - enforce: false
- appliedResource: //cloudresourcemanager.googleapis.com/folders/408342778736
  attachedResource: //cloudresourcemanager.googleapis.com/folders/408342778736
  rules:
  - condition:
      description: cond-desc1
      expression: resource.matchTag("474566717491/env", "prod")
      title: cond-title1
    enforce: false
  - enforce: true
- appliedResource: //cloudresourcemanager.googleapis.com/organizations/474566717491
  attachedResource: //cloudresourcemanager.googleapis.com/organizations/474566717491
  rules:
  - enforce: true
---
consolidatedPolicy:
  appliedResource: //cloudresourcemanager.googleapis.com/organizations/474566717491
  attachedResource: //cloudresourcemanager.googleapis.com/organizations/474566717491
  rules:
  - enforce: true
governedResource:
  fullResourceName: //container.googleapis.com/projects/probe-per-rt-project/zones/us-west1-a/clusters/test-cluster-for-backup/nodePools/default-pool
  organization: organizations/474566717491
  parent: //container.googleapis.com/projects/probe-per-rt-project/zones/us-west1-a/clusters/test-cluster-for-backup
  project: projects/896190383908
policyBundle:
- appliedResource: //cloudresourcemanager.googleapis.com/organizations/474566717491
  attachedResource: //cloudresourcemanager.googleapis.com/organizations/474566717491
  rules:
  - enforce: true

REST

כדי לקבל ניתוח של האופן שבו אילוץ של מדיניות הארגון נאכף על נכסים בארגון, משתמשים ב-method ‏analyzeOrgPolicyGovernedAssets של Cloud Asset API.

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

GET https://cloudasset.googleapis.com/v1/organizations/ORGANIZATION_ID:analyzeOrgPolicyGovernedAssets

תוכן בקשת JSON:

JSON_REQUEST="{
  'constraint': 'CONSTRAINT_NAME',
  'filter': 'FILTER_QUERY',
  'page_size': PAGE_SIZE,
  'page_token': PAGE_TOKEN
}"

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

  • ORGANIZATION_ID: המזהה של משאב הארגון. מידע נוסף על איתור מזהה הארגון זמין במאמר יצירה וניהול של ארגונים.

  • CONSTRAINT_NAME: השם של האילוץ של מדיניות הארגון שרוצים לנתח. רשימת האילוצים זמינה במאמר בנושא אילוצים של מדיניות הארגון.

  • FILTER_QUERY: שאילתת סינון להצגת נכסים שתואמים לביטוי הסינון. השדות הזמינים לסינון הם governed_resource.folders,‏ governed_resource.project,‏ governed_iam_policy.folders ו-governed_iam_policy.project. לדוגמה, הפקודה governed_resource.project="projects/1234567890" תחזיר רק נכסים שצורפו לפרויקט עם מזהה הפרויקט 1234567890.

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

  • PAGE_TOKEN: אפשר להגדיר אותו רק בבקשות אחרי הבקשה הראשונה שכוללת את הדגל page_size. אפשר להשתמש בערכים nextPageToken שמתקבלים מהתגובות הקודמות כדי להחזיר דף מסוים של תוצאות.

תגובת ה-JSON תהיה דומה לזו:

דוגמה לתגובת JSON

{
  "governedAssets": [
    {
      "governedResource": {
        "fullResourceName": "//container.googleapis.com/projects/opa-test-project-2/zones/us-central1-c/clusters/opa-test-project-2-cluster-1/nodePools/default-pool",
        "parent": "//container.googleapis.com/projects/opa-test-project-2/zones/us-central1-c/clusters/opa-test-project-2-cluster-1",
        "project": "projects/892625391619",
        "folders": [
          "folders/513502730678",
          "folders/666681422980"
        ],
        "organization": "organizations/474566717491"
      },
      "consolidatedPolicy": {
        "attachedResource": "//cloudresourcemanager.googleapis.com/projects/opa-test-project-2",
        "rules": [
          {
            "enforce": false
          }
        ],
        "appliedResource": "//cloudresourcemanager.googleapis.com/projects/opa-test-project-2"
      },
      "policyBundle": [
        {
          "attachedResource": "//cloudresourcemanager.googleapis.com/projects/opa-test-project-2",
          "reset": true,
          "appliedResource": "//cloudresourcemanager.googleapis.com/projects/opa-test-project-2"
        },
        {
          "attachedResource": "//cloudresourcemanager.googleapis.com/organizations/474566717491",
          "rules": [
            {
              "enforce": true
            }
          ],
          "appliedResource": "//cloudresourcemanager.googleapis.com/organizations/474566717491"
        }
      ]
    },
    {
      "governedResource": {
        "fullResourceName": "//container.googleapis.com/projects/project2-244918/zones/us-central1-c/clusters/cluster-1/nodePools/default-pool",
        "parent": "//container.googleapis.com/projects/project2-244918/zones/us-central1-c/clusters/cluster-1",
        "project": "projects/761097189269",
        "folders": [
          "folders/800636178739",
          "folders/408342778736"
        ],
        "organization": "organizations/474566717491"
      },
      "consolidatedPolicy": {
        "attachedResource": "//cloudresourcemanager.googleapis.com/projects/project2-244918",
        "rules": [
          {
            "enforce": false
          }
        ],
        "appliedResource": "//cloudresourcemanager.googleapis.com/projects/project2-244918"
      },
      "policyBundle": [
        {
          "attachedResource": "//cloudresourcemanager.googleapis.com/projects/project2-244918",
          "rules": [
            {
              "enforce": false
            }
          ],
          "appliedResource": "//cloudresourcemanager.googleapis.com/projects/project2-244918"
        },
        {
          "attachedResource": "//cloudresourcemanager.googleapis.com/folders/408342778736",
          "rules": [
            {
              "enforce": false,
              "condition": {
                "expression": "resource.matchTag(\"474566717491/env\", \"prod\")",
                "title": "cond-title1",
                "description": "cond-desc1"
              }
            },
            {
              "enforce": true
            }
          ],
          "appliedResource": "//cloudresourcemanager.googleapis.com/folders/408342778736"
        },
        {
          "attachedResource": "//cloudresourcemanager.googleapis.com/organizations/474566717491",
          "rules": [
            {
              "enforce": true
            }
          ],
          "appliedResource": "//cloudresourcemanager.googleapis.com/organizations/474566717491"
        }
      ]
    }
  ]
  "constraint": {
    "customConstraint": {
      "name": "organizations/474566717491/customConstraints/custom.disableGkeAutoUpgrade",
      "resourceTypes": [
        "container.googleapis.com/NodePool"
      ],
      "methodTypes": [
        "CREATE",
        "UPDATE"
      ],
      "condition": "resource.management.autoUpgrade == false",
      "actionType": "ALLOW",
      "displayName": "Disable GKE auto upgrade",
      "description": "Only allow GKE NodePool resource create or updates if AutoUpgrade is not enabled"
    }
  }
}

המחשת ירושה

אם הפעלתם ברמת הארגון את רמת Premium או Enterprise של Security Command Center, תוכלו להשתמש במסוף Google Cloud כדי לראות את ההורשה של מדיניות הארגון שניתחתה.

כדי לראות את ההמחשה של הירושה, יוצרים שאילתת ניתוח של מדיניות הארגון עבור מדיניות שהוגדרה, מאגרי מידע או נכסים. בדף Run query analysis, לוחצים על Analyze ואז על Visualize.

אפשר גם לעבור לכתובת ה-URL של שאילתה שמורה, לבחור את המשאבים שרוצים להדגיש ואז ללחוץ על הצגת ההרשאות שמועברות בירושה.

בדף Resource inheritance מוצגת ויזואליזציה של היררכיית המשאבים עבור המשאבים שנבחרו בשאילתת הניתוח:

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

  1. מציין אם המשאב הוא ארגון, תיקייה או פרויקט.

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

  3. מציין שהמשאב מבטל את המדיניות של משאב ההורה שלו.

  4. מציין שהמשאב מאפס את מדיניות הארגון לברירת המחדל שמנוהלת על ידי Google עבור המדיניות הזו. משאב שמבצע איפוס של המדיניות לברירת המחדל מחובר למשאב ההורה שלו באמצעות קו מקווקו.

  5. ציון שהמשאב ממזג את המדיניות עם ההורה שלו.

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

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

  8. מציין שמדיניות הארגון במשאב הזה היא אילוץ בוליאני שלא נאכף.

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