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

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

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

יתרונות

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

  • אתם יכולים להשבית את אפשרות הכניסה לאפליקציות באמצעות סיסמה בארגון שלכם, ולדרוש מהמשתמשים להשתמש תמיד באפשרות הכניסה באמצעות אימייל.
  • אתם יכולים להגביל את האפליקציות בארגון שלכם לשימוש בספק זהויות (IdP) שתומך ב-OIDC עם מנפיק שצוין.
  • אתם יכולים להשבית את האפשרויות של ספק הזהויות (IdP) ב-OIDC וב-SAML עבור אפליקציות בארגון.
  • אתם יכולים להשבית את האפשרות של ריבוי דיירים באפליקציות בארגון.

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

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

תמחור

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

מגבלות

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

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

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

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

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

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

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

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

  • orgpolicy.constraints.list
  • orgpolicy.policies.create
  • orgpolicy.policies.delete
  • orgpolicy.policies.list
  • orgpolicy.policies.update
  • orgpolicy.policy.get
  • orgpolicy.policy.set

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

יצירת אילוץ בהתאמה אישית

אילוץ בהתאמה אישית מוגדר בקובץ YAML לפי המשאבים, השיטות, התנאים והפעולות שנתמכים על ידי השירות שבו אתם אוכפים את מדיניות הארגון. התנאים להגבלות המותאמות אישית מוגדרים באמצעות Common Expression Language ‏ (CEL). מידע נוסף על יצירת תנאים באילוצים מותאמים אישית באמצעות CEL זמין בקטע על CEL במאמר יצירה וניהול של אילוצים מותאמים אישית.

כדי ליצור קובץ YAML לאילוץ בהתאמה אישית:

name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME
resourceTypes:
- identitytoolkit.googleapis.com/RESOURCE_NAME
methodTypes: METHOD
condition: CONDITION
actionType: ACTION
displayName: DISPLAY_NAME
description: DESCRIPTION

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

  • ORGANIZATION_ID: מזהה הארגון, למשל 123456789.

  • CONSTRAINT_NAME: השם שרוצים לתת לאילוץ החדש בהתאמה אישית. אילוץ מותאם אישית חייב להתחיל ב-custom., ויכול לכלול רק אותיות גדולות, אותיות קטנות או מספרים. לדוגמה, custom.allowEmailLinkLogin. האורך המקסימלי של השדה הזה הוא 70 תווים, לא כולל הקידומת, לדוגמה, organizations/123456789/customConstraints/custom.

  • RESOURCE_NAME: השם (לא ה-URI) של משאב ה-REST של Identity Platform API שמכיל את האובייקט והשדה שרוצים להגביל. לדוגמה, identitytoolkit.googleapis.com/Config.

  • CONDITION: תנאי CEL שנכתב על סמך ייצוג של משאב שירות נתמך. האורך המקסימלי של השדה הוא 1,000 תווים. מידע נוסף על המשאבים שאפשר לכתוב תנאים לגביהם זמין במאמר משאבים נתמכים. לדוגמה, "resource.signIn.email.passwordRequired == true".

  • METHOD: כשיוצרים הגדרה או אילוץ ליצירת דייר, מציינים CREATE. כשיוצרים אילוץ של הגדרות או של דייר UPDATE, צריך לציין את שניהם באופן הבא:

    methodTypes:
    - CREATE
    - UPDATE
    
  • ACTION: הפעולה שיש לבצע אם התנאי condition מתקיים. הערך יכול להיות ALLOW או DENY.

  • DISPLAY_NAME: שם קריא לאנשים של האילוץ. האורך המקסימלי של השדה הוא 200 תווים.

  • DESCRIPTION: תיאור ידידותי למשתמש של האילוץ, שיוצג כהודעת שגיאה אם תהיה הפרה של המדיניות. האורך המקסימלי של השדה הוא 2,000 תווים.

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

הגדרת אילוץ בהתאמה אישית

המסוף

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

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

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

  2. בכלי לבחירת פרויקטים, בוחרים את הפרויקט שרוצים להגדיר לו את מדיניות הארגון.
  3. לוחצים על Custom constraint (הגבלה מותאמת אישית).
  4. בתיבה שם לתצוגה, מזינים שם שאנשים יכולים לקרוא למגבלה. השם הזה משמש בהודעות שגיאה, ואפשר להשתמש בו לצורך זיהוי וניפוי באגים. אל תשתמשו בפרטים אישיים מזהים (PII) או במידע אישי רגיש בשמות לתצוגה, כי השם הזה עלול להיחשף בהודעות שגיאה. השדה הזה יכול להכיל עד 200 תווים.
  5. בתיבה Constraint ID (מזהה ההגבלה), מזינים את המזהה שרוצים להגדיר להגבלה החדשה בהתאמה אישית. אילוץ מותאם אישית יכול להכיל רק אותיות (כולל אותיות גדולות וקטנות) או מספרים, למשל custom.allowEmailLinkLogin. השדה הזה יכול להכיל עד 70 תווים, לא כולל הקידומת (custom.), לדוגמה, organizations/123456789/customConstraints/custom. אל תכללו פרטים אישיים מזהים (PII) או נתונים רגישים במזהה האילוץ, כי הם עלולים להיחשף בהודעות שגיאה.
  6. בתיבה Description, מזינים תיאור של האילוץ שכתוב בצורה שקריאה לאנשים. התיאור הזה משמש כהודעת שגיאה כשמתבצעת הפרה של המדיניות. לכלול פרטים על הסיבה להפרת המדיניות ואיך לפתור אותה. אל תכללו בתיאור פרטים אישיים מזהים (PII) או מידע אישי רגיש, כי הם עלולים להיחשף בהודעות שגיאה. השדה הזה יכול להכיל עד 2,000 תווים.
  7. בתיבה Resource type, בוחרים את השם של משאב REST‏ Google Cloud שמכיל את האובייקט והשדה שרוצים להגביל – לדוגמה, container.googleapis.com/NodePool. רוב סוגי המשאבים תומכים בעד 20 אילוצים מותאמים אישית. אם תנסו ליצור עוד אילוצים בהתאמה אישית, הפעולה תיכשל.
  8. אפשר לאכוף את ההגבלה הזו רק בשיטת REST‏ CREATE.
  9. כדי לראות את השיטות הנתמכות לכל שירות, מחפשים את השירות בקטע שירותים שתומכים באילוצים בהתאמה אישית.

  10. כדי להגדיר תנאי, לוחצים על Edit condition.
    1. בחלונית Add condition, יוצרים תנאי CEL שמתייחס למשאב שירות נתמך, לדוגמה, resource.management.autoUpgrade == false. השדה הזה יכול להכיל עד 1,000 תווים. פרטים על השימוש ב-CEL זמינים במאמר בנושא Common Expression Language. מידע נוסף על משאבי השירות שאפשר להשתמש בהם באילוצים בהתאמה אישית זמין במאמר שירותים שתומכים באילוצים בהתאמה אישית.
    2. לוחצים על Save.
  11. בקטע פעולה, בוחרים אם לאשר או לדחות את השיטה שנבדקה אם התנאי מתקיים.
  12. הפעולה deny (דחייה) פירושה שהפעולה ליצירה או לעדכון של המשאב נחסמת אם התנאי מוערך כ-True.

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

  13. לוחצים על יצירת אילוץ.
  14. אחרי שמזינים ערך בכל שדה, מופיעה משמאל הגדרת ה-YAML המקבילה לאילוץ המותאם אישית הזה.

gcloud

  1. כדי ליצור אילוץ בהתאמה אישית, יוצרים קובץ YAML בפורמט הבא:
  2. name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME
    resourceTypes: RESOURCE_NAME
    methodTypes:
      - CREATE
    condition: "CONDITION"
    actionType: ACTION
    displayName: DISPLAY_NAME
    description: DESCRIPTION

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

    • ORGANIZATION_ID: מזהה הארגון, למשל 123456789.
    • CONSTRAINT_NAME: השם שרוצים לתת לאילוץ המותאם אישית החדש. אילוץ מותאם אישית יכול להכיל רק אותיות (כולל אותיות רישיות וקטנות) או מספרים, למשל, custom.allowEmailLinkLogin. השדה הזה יכול להכיל עד 70 תווים, לא כולל הקידומת (custom.) – לדוגמה, organizations/123456789/customConstraints/custom. אל תכללו פרטים אישיים מזהים (PII) או נתונים רגישים במזהה האילוץ, כי הם עלולים להיחשף בהודעות שגיאה.
    • RESOURCE_NAME: השם מוגדר במלואו של המשאב Google Cloudשמכיל את האובייקט והשדה שרוצים להגביל. לדוגמה: identitytoolkit.googleapis.com/Config. רוב סוגי המשאבים תומכים בעד 20 אילוצים מותאמים אישית. אם תנסו ליצור עוד אילוצים בהתאמה אישית, הפעולה תיכשל.
    • methodTypes: שיטות ה-REST שבהן האילוץ נאכף. הערך יכול להיות רק CREATE.
    • כדי לראות את השיטות הנתמכות לכל שירות, מחפשים את השירות ב שירותים שתומכים באילוצים בהתאמה אישית.

    • CONDITION: תנאי CEL שנכתב על סמך ייצוג של משאב שירות נתמך. השדה הזה יכול להכיל עד 1,000 תווים. לדוגמה: "resource.signIn.email.passwordRequired == true".
    • מידע נוסף על המשאבים שאפשר לכתוב תנאים לגביהם זמין במאמר משאבים נתמכים.

    • ACTION: הפעולה שתתבצע אם התנאי condition יתקיים. הערך יכול להיות רק ALLOW.
    • הפעולה allow (אישור) אומרת שאם התנאי מקבל את הערך True, הפעולה ליצירה או לעדכון של המשאב מותרת. המשמעות היא שכל מקרה אחר, חוץ מהמקרה שמופיע במפורש בתנאי, ייחסם.

    • DISPLAY_NAME: שם קריא לאנשים של האילוץ. השם הזה מופיע בהודעות שגיאה ויכול לשמש לזיהוי ולניפוי באגים. אל תשתמשו בפרטים אישיים מזהים (PII) או במידע אישי רגיש בשמות המוצגים, כי השם הזה עלול להיחשף בהודעות שגיאה. השדה הזה יכול להכיל עד 200 תווים.
    • DESCRIPTION: תיאור ידידותי למשתמש של האילוץ שיוצג כהודעת שגיאה אם המדיניות תופר. השדה הזה יכול להכיל עד 2,000 תווים.
  3. אחרי שיוצרים קובץ YAML לאילוץ חדש בהתאמה אישית, צריך להגדיר אותו כדי שיהיה זמין למדיניות הארגון בארגון. כדי להגדיר אילוץ בהתאמה אישית, משתמשים בפקודה gcloud org-policies set-custom-constraint:
  4. gcloud org-policies set-custom-constraint CONSTRAINT_PATH

    מחליפים את CONSTRAINT_PATH בנתיב המלא לקובץ האילוצים המותאמים אישית. לדוגמה, /home/user/customconstraint.yaml.

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

  5. כדי לוודא שהאילוץ המותאם אישית קיים, משתמשים בפקודה gcloud org-policies list-custom-constraints:
  6. gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID

    מחליפים את ORGANIZATION_ID במזהה של משאב הארגון.

    מידע נוסף זמין במאמר בנושא צפייה במדיניות הארגון.

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

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

המסוף

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

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

  2. מכלי לבחירת פרויקטים, בוחרים את הפרויקט שרוצים להגדיר לו את מדיניות הארגון.
  3. מהרשימה בדף מדיניות הארגון, בוחרים את האילוץ כדי לראות את הדף פרטי המדיניות של האילוץ הזה.
  4. כדי להגדיר את מדיניות הארגון עבור המשאב הזה, לוחצים על ניהול מדיניות.
  5. בדף עריכת מדיניות, בוחרים באפשרות במקום המדיניות של המשאב הראשי.
  6. לוחצים על Add a rule.
  7. בקטע Enforcement (אכיפה), בוחרים אם מדיניות הארגון הזו נאכפת או לא.
  8. אופציונלי: כדי להגדיר את מדיניות הארגון כתלויה בתג, לוחצים על הוספת תנאי. הערה: אם מוסיפים כלל מותנה למדיניות ארגון, צריך להוסיף לפחות כלל לא מותנה אחד, אחרת אי אפשר לשמור את המדיניות. מידע נוסף על מדיניות ארגונית עם תגים
  9. לוחצים על בדיקת שינויים כדי לדמות את ההשפעה של מדיניות הארגון. מידע נוסף זמין במאמר בדיקת שינויים במדיניות הארגון באמצעות סימולטור המדיניות.
  10. כדי לאכוף את המדיניות של הארגון במצב פרימטר לבדיקות, לוחצים על הגדרת המדיניות להרצת בדיקה. מידע נוסף זמין במאמר בנושא בדיקת מדיניות הארגון.
  11. אחרי שמוודאים שמדיניות הארגון במצב הרצה יבשה פועלת כמו שרוצים, לוחצים על הגדרת מדיניות כדי להגדיר את המדיניות הפעילה.

gcloud

  1. כדי ליצור מדיניות ארגונית עם כללים בוליאניים, יוצרים קובץ YAML של מדיניות שמפנה לאילוץ:
  2. name: projects/PROJECT_ID/policies/CONSTRAINT_NAME
    spec:
      rules:
      - enforce: true
    
    dryRunSpec:
      rules:
      - enforce: true

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

    • PROJECT_ID: הפרויקט שבו רוצים לאכוף את האילוץ.
    • CONSTRAINT_NAME: השם שהגדרתם לאילוץ המותאם אישית. לדוגמה, custom.allowEmailLinkLogin.
  3. כדי לאכוף את מדיניות הארגון במצב הרצה יבשה, מריצים את הפקודה הבאה עם הדגל dryRunSpec:
  4. gcloud org-policies set-policy POLICY_PATH --update-mask=dryRunSpec

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

  5. אחרי שמוודאים שמדיניות הארגון במצב הרצה יבשה פועלת כמו שרוצים, מגדירים את המדיניות הפעילה באמצעות הפקודה org-policies set-policy והדגל spec:
  6. gcloud org-policies set-policy POLICY_PATH --update-mask=spec

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

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

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

curl -i -X PATCH \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-d '
{
  "sign_in": {"email": {"password_required": false}}
}' https://autopush-identitytoolkit.sandbox.googleapis.com/admin/v2/projects/shimingz-playground-1/config\?update_mask\=sign_in.email.password_required

הפלט אמור להיראות כך:

Operation denied by custom org policies: ["customConstraints/custom.allowEmailLinkLogin": "Cannot disable email link login."]

משאבים ופעולות נתמכים ב-Identity Platform

‫Identity Platform תומך במשאבים הבאים למדיניות ארגונית בהתאמה אישית:

שדות שלא נתמכים

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

  • identitytoolkit.googleapis.com/Config:
    • resource.notification.send_email.smtp.password
  • identitytoolkit.googleapis.com/DefaultSupportedIdpConfig:
    • resource.client_secret
  • identitytoolkit.googleapis.com/OauthIdpConfig:
    • resource.client_secret

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

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

תיאור תחביר של אילוצים
לא להשבית את הכניסה לאפליקציה באמצעות אימייל
    name: organizations/ORGANIZATION_ID/customConstraints/custom.enableEmailLogin
    resourceTypes:
    - identitytoolkit.googleapis.com/Config
    methodTypes:
    - CREATE
    - UPDATE
    condition: "resource.signIn.email.enabled == true"
    actionType: ALLOW
    displayName: Enable email login
    description: All applications must have email login enabled.
אפשר להתחבר רק באמצעות חשבון Google עם מזהה לקוח ספציפי של Google
    name: organizations/ORGANIZATION_ID/customConstraints/custom.denyUnexpectedGoogleClientId
    resourceTypes:
    - identitytoolkit.googleapis.com/DefaultSupportedIdpConfig
    methodTypes:
    - CREATE
    - UPDATE
    condition: "resource.name.contains('google.com') && !resource.client_id == 'my-client-id'"
    actionType: DENY
    displayName: Only allow login with Google with specific Google client ID
    description: Only allow login with Google with specific Google client ID for all applications.
התרת ישות SAML ספציפית בלבד
    name: organizations/ORGANIZATION_ID/customConstraints/custom.allowSpecificSamlEntity
    resourceTypes:
    - identitytoolkit.googleapis.com/InboundSamlConfig
    methodTypes:
    - CREATE
    - UPDATE
    condition: "resource.idp_config.idp_entity_id == 'my-saml-entity-id'"
    actionType: ALLOW
    displayName: Only allow a specific SAML entity
    description: Only allow a specific SAML entity for applications in this organization.
אפשר להשתמש בספק זהויות (IdP) של OIDC עם תהליך קוד
    name: organizations/ORGANIZATION_ID/customConstraints/custom.allowOauthIdpWithCodeFlow
    resourceTypes:
    - identitytoolkit.googleapis.com/OauthIdpConfig
    methodTypes:
    - CREATE
    - UPDATE
    condition: "resource.response_type.code == true"
    actionType: ALLOW
    displayName: Allow OIDC IdP with code flow
    description: All OIDC IdP must use code flow.
אפשר לשלוח SMS באזור בארה"ב
    name: organizations/ORGANIZATION_ID/customConstraints/custom.allowSmsRegion
    resourceTypes:
    - identitytoolkit.googleapis.com/Tenant
    methodTypes:
    - CREATE
    - UPDATE
    condition: "resource.sms_region_config.allow_by_default.disallowed_regions.exists(disallowed_region, disallowed_region != 'US')"
    actionType: DENY
    displayName: Allow SMS region in US
    description: Only allow SMS to be operated in the US for all applications.

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