ניהול משאבים של שושלת הנתונים באמצעות אילוצים מותאמים אישית

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

מידע על שירות מדיניות הארגון של Google Cloud

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

יתרונות

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

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

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

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

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

תמחור

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

מגבלות

  • אפשר לאכוף אילוצים בהתאמה אישית רק על משאבים של שושלת נתונים Process. אין תמיכה במשאבים אחרים, כמו Runs ו-Events.

  • אילוצים מותאמים אישית שנאכפים לא חלים על משאבים קיימים.

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

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

    1. מוודאים שיש לכם את התפקיד "יצירת פרויקטים" (roles/resourcemanager.projectCreator) ב-IAM. איך נותנים תפקידים?
    2. נכנסים לדף לבחירת הפרויקט במסוף Google Cloud .

      כניסה לדף לבחירת הפרויקט

    3. לוחצים על Create project.

    4. נותנים שם לפרויקט. רושמים או זוכרים את מזהה הפרויקט שנוצר.

    5. עורכים את שאר השדות לפי הצורך.

    6. לוחצים על יצירה.

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

כדי לקבל את ההרשאות שדרושות לניהול מדיניות הארגון, בקשו מהאדמין להקצות לכם את התפקיד אדמין של מדיניות הארגון (roles/orgpolicy.policyAdmin) ב-IAM ברמת הארגון. כדי לקרוא הסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.

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

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

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

  • orgpolicy.constraints.list
  • orgpolicy.customConstraints.create
  • orgpolicy.customConstraints.delete
  • orgpolicy.customConstraints.get
  • orgpolicy.customConstraints.list
  • orgpolicy.customConstraints.update
  • 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:
- datalineage.googleapis.com/RESOURCE_TYPE
methodTypes:
- CREATE
- UPDATE
condition: "CONDITION"
actionType: ACTION
displayName: DISPLAY_NAME
description: DESCRIPTION

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

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

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

  • ‫RESOURCE_TYPE: השם (לא ה-URI) של משאב ה-REST של Data Lineage API שמכיל את האובייקט והשדה שרוצים להגביל. לגבי שושלת נתונים, רק Process זמין.

  • ‫CONDITION: תנאי CEL שנכתב כנגד ייצוג של משאב שירות נתמך. האורך המקסימלי של השדה הזה הוא 1,000 תווים. במאמר משאבים נתמכים תוכלו לקרוא בהרחבה על המשאבים שאפשר לכתוב להם תנאים. לדוגמה, "resource.name.contains('invalid_name')".

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

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

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

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

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

המסוף

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

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

    כניסה לדף Organization policies

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

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

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

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

gcloud

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

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

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

    • ‫CONDITION: תנאי CEL שנכתב כנגד ייצוג של משאב שירות נתמך. השדה הזה יכול להכיל עד 1,000 תווים. לדוגמה, "resource.name.contains('invalid_name')".
    • למידע נוסף על המשאבים הזמינים לכתיבת תנאים, ראו משאבים נתמכים.

    • ‫ACTION: הפעולה שצריך לבצע אם התנאי condition מתקיים. הערכים האפשריים הם ALLOW ו-DENY.
    • הפעולה allow פירושה שאם התנאי מקבל את הערך true, מותר ליצור או לעדכן את המשאב. זה גם אומר שכל מקרה אחר, מלבד המקרה שמופיע במפורש בתנאי, חסום.

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

    כניסה לדף Organization policies

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

gcloud

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

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

    • ‫PROJECT_ID: הפרויקט שבו רוצים לאכוף את האילוץ.
    • ‫CONSTRAINT_NAME: השם שהגדרתם לאילוץ המותאם אישית. לדוגמה, custom.denyLineageProcess.
  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 דקות לכל היותר.

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

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

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

  2. מעתיקים את האילוץ הבא לקובץ YAML:

      name: organizations/ORGANIZATION_ID/customConstraints/custom.denyLineageProcess
      resourceTypes: datalineage.googleapis.com/Process
      methodTypes:
        - CREATE
        - UPDATE
      condition:
        "resource.name.contains('invalid_name')"
      actionType: DENY
      displayName: Do not allow data lineage process with 'invalid_name' to be created.
    

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

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

  4. יוצרים תהליך עם השם שכללתם באילוץ המותאם אישית.

    curl -s -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application.json" \
    "https://datalineage.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/processes" \
    -d '{"name":"projects/PROJECT_ID/locations/LOCATION/processes/invalid_name"}'

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

    • ‫PROJECT_ID: מזהה הפרויקט שבו נוצר התהליך. הוא צריך להיות באותו ארגון שבו מוגדרת המגבלה.
    • ‫LOCATION: Google Cloud האזור שבו נוצר התהליך.

    הפלט שיתקבל:

    Operation denied by org policy on resource 'projects/PROJECT_ID/locations/LOCATION': ["customConstraints/custom.denyLineageProcess"]
    

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

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

  • resource.name
  • resource.displayName
  • resource.origin.name
  • resource.origin.sourceType

השיטות הבאות נבדקות כדי לוודא שהן עומדות באילוצים המותאמים אישית:

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

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

למידע נוסף על פקודות מאקרו של CEL שאפשר להשתמש בהן בתנאים של אילוצים מותאמים אישית, ראו Common Expression Language.

תרחיש לדוגמה תחביר של אילוצים
השבתת היצירה של תהליכי שושלת נתונים
    name: organizations/ORGANIZATION_ID/customConstraints/custom.denyLineageProcessesCreation
    resourceTypes:
    - datalineage.googleapis.com/Process
    methodTypes:
    - CREATE
    condition: "True"
    actionType: DENY
    displayName: Deny creation of all data lineage processes.
השבתת היצירה של תהליכי שושלת נתונים על ידי BigQuery או Managed Service for Apache Spark
    name: organizations/ORGANIZATION_ID/customConstraints/custom.denyLineageProcessesCreation
    resourceTypes:
    - datalineage.googleapis.com/Process
    methodTypes:
    - CREATE
    condition: "resource.origin.sourceType == 'BIGQUERY' || resource.origin.sourceType == 'DATAPROC'"
    actionType: DENY
    displayName: Deny data lineage processes created by BigQuery or Managed Service for Apache Spark.
השבתת תהליכים של שושלת נתונים עם השם שצוין
    name: organizations/ORGANIZATION_ID/customConstraints/custom.denyLineageProcessesCreation
    resourceTypes:
    - datalineage.googleapis.com/Process
    methodTypes:
    - CREATE
    - UPDATE
    condition: "resource.name.contains('RESTRICTED_NAME')"
    actionType: DENY
    displayName: Deny data lineage processes whose name contains RESTRICTED_NAME.

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