יצירת אילוצים מותאמים אישית ל-Filestore

בדף הזה מוסבר איך להשתמש באילוצים בהתאמה אישית של שירות מדיניות הארגון כדי להגביל פעולות ספציפיות במשאבים הבאים של Cloud de Confiance by S3NS :

  • file.googleapis.com/Instance
  • file.googleapis.com/Backup
  • file.googleapis.com/Snapshot

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

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

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

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

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

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

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

  1. In the Cloud de Confiance console, on the project selector page, select or create a Cloud de Confiance project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  2. Verify that billing is enabled for your Cloud de Confiance project.

  3. Install the Google Cloud CLI.

  4. Configure the gcloud CLI to use your federated identity.

    For more information, see Sign in to the gcloud CLI with your federated identity.

  5. To initialize the gcloud CLI, run the following command:

    gcloud init
  6. חשוב לוודא שאתם יודעים מהו מזהה הארגון שלכם.

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

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

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

משאבים נתמכים ב-Filestore

בטבלה הבאה מפורטים המשאבים של Filestore שאפשר להפנות אליהם באילוצים מותאמים אישית.

משאב שדה

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

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

המסוף

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

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

    כניסה לדף Organization policies

  2. בכלי לבחירת פרויקטים, בוחרים את הפרויקט שרוצים להגדיר לו את מדיניות הארגון.
  3. לוחצים על Custom constraint (הגבלה מותאמת אישית).
  4. בתיבה שם לתצוגה, מזינים שם קריא לאנשים עבור האילוץ. השם הזה מופיע בהודעות שגיאה ויכול לשמש לזיהוי ולניפוי באגים. אל תשתמשו בפרטים אישיים מזהים (PII) או בנתונים רגישים בשמות לתצוגה, כי השם הזה עלול להיחשף בהודעות שגיאה. השדה הזה יכול להכיל עד 200 תווים.
  5. בתיבה Constraint ID, מזינים את המזהה שרוצים לתת לאילוץ החדש בהתאמה אישית. אילוץ בהתאמה אישית יכול להכיל רק אותיות (כולל אותיות גדולות וקטנות) או מספרים, למשל custom.deletionProtectionEnabledEnforcedOnCreate. השדה הזה יכול להכיל עד 70 תווים, לא כולל הקידומת (custom.), לדוגמה, organizations/123456789/customConstraints/custom. אל תכללו פרטים אישיים מזהים או מידע אישי רגיש במזהה האילוץ, כי הם עלולים להיחשף בהודעות שגיאה.
  6. בתיבה Description, מזינים תיאור של האילוץ שקל לאנשים לקרוא. התיאור הזה משמש כהודעת שגיאה כשיש הפרה של המדיניות. צריך לכלול פרטים על הסיבה להפרת המדיניות ועל האופן שבו אפשר לפתור את הבעיה. אל תכללו בתיאור פרטים אישיים מזהים (PII) או מידע רגיש, כי הם עלולים להיחשף בהודעות שגיאה. בשדה הזה אפשר להזין עד 2,000 תווים.
  7. בתיבה Resource type, בוחרים את השם של Cloud de Confiance משאב REST שמכיל את האובייקט והשדה שרוצים להגביל – לדוגמה, container.googleapis.com/NodePool. רוב סוגי המשאבים תומכים בעד 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. הפעולה deny (דחייה) פירושה שהפעולה ליצירה או לעדכון של המשאב נחסמת אם התנאי מחזיר את הערך 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.deletionProtectionEnabledEnforcedOnCreate. השדה הזה יכול להכיל עד 70 תווים, לא כולל הקידומת (custom.) – לדוגמה, organizations/123456789/customConstraints/custom. אל תכללו פרטים אישיים מזהים או מידע אישי רגיש במזהה האילוץ, כי הם עלולים להיחשף בהודעות שגיאה.
    • ‫RESOURCE_NAME: השם המוגדר במלואו של המשאב ב- Cloud de Confianceשמכיל את האובייקט והשדה שרוצים להגביל. לדוגמה, file.googleapis.com/Instance. רוב סוגי המשאבים תומכים בעד 20 אילוצים בהתאמה אישית. אם תנסו ליצור יותר אילוצים בהתאמה אישית, הפעולה תיכשל.
    • ‫methodTypes: שיטות ה-REST שעליהן נאכף האילוץ. יכול להיות CREATE או גם CREATE וגם UPDATE. אם אוכפים את האילוץ באמצעות השיטה UPDATE על משאב שמפר את האילוץ, שינויים במשאב הזה נחסמים על ידי מדיניות הארגון, אלא אם השינוי פותר את ההפרה.
    • כדי לראות את השיטות הנתמכות לכל שירות, חפשו את השירות במאמר שירותים שתומכים באילוצים בהתאמה אישית.

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

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

      הפעולה deny (דחייה) פירושה שאם התנאי מחזיר את הערך 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.

    בסיום הפעולה, האילוצים המותאמים אישית יהיו זמינים כמדיניות ארגונית ברשימת Cloud de Confiance by S3NS המדיניות הארגונית.

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

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

    למידע נוסף, קראו את המאמר הצגת מדיניות הארגון.

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

כדי לאכוף אילוץ, אפשר ליצור מדיניות ארגון שמפנה אליו, ואז להחיל את מדיניות הארגון על משאב ב- Cloud de Confiance by S3NS .

המסוף

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

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

  2. בתפריט לבחירת פרויקט, בוחרים את הפרויקט שרוצים להגדיר לו את מדיניות הארגון.
  3. מהרשימה בדף מדיניות הארגון, בוחרים את האילוץ כדי לראות את הדף פרטי המדיניות של האילוץ הזה.
  4. כדי להגדיר את מדיניות הארגון למשאב הזה, לוחצים על Manage policy.
  5. בדף עריכת המדיניות, בוחרים באפשרות במקום המדיניות של המשאב הראשי.
  6. לוחצים על Add a rule.
  7. בקטע Enforcement, בוחרים אם לאכוף את מדיניות הארגון או לא.
  8. אופציונלי: כדי להוסיף תנאי למדיניות הארגון שמבוסס על תג, לוחצים על Add condition. שימו לב: אם מוסיפים כלל מותנה למדיניות הארגון, צריך להוסיף לפחות כלל אחד לא מותנה, אחרת אי אפשר לשמור את המדיניות. מידע נוסף זמין במאמר בנושא הגדרת היקף של מדיניות הארגון באמצעות תגים.
  9. לוחצים על Test changes כדי לדמות את ההשפעה של מדיניות הארגון. מידע נוסף זמין במאמר בדיקת שינויים במדיניות הארגון באמצעות סימולטור המדיניות.
  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.deletionProtectionEnabledEnforcedOnCreate.
  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 דקות לכל היותר.

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

בדוגמה הבאה נוצרים מדיניות ואילוץ בהתאמה אישית, שמאפשרים למשתמשים ליצור מכונה של Filestore אם השדה deletionProtection מוגדר לערך true.

לפני שמתחילים, צריך להכין את הדברים הבאים:

  • מזהה הארגון
  • מזהה הפרויקט שלכם

יצירת האילוץ

  1. שומרים את הקובץ הבא בשם constraint-instance.yaml:

    name: organizations/ORGANIZATION_ID/customConstraints/custom.deletionProtectionEnabledEnforcedOnCreate
    resourceTypes:
    - file.googleapis.com/Instance
    methodTypes:
    - CREATE
    condition: "resource.deletionProtectionEnabled == true"
    actionType: ALLOW
    displayName: Enforce deletion protection
    description: Enforce instance creation with deletion protection.
    

    כך מגדירים אילוץ שבו צריך להגדיר את השדה deletionProtection לערך true ב-method‏ CREATE.

  2. מחילים את האילוץ:

    gcloud org-policies set-custom-constraint constraint-instance.yaml
    
  3. מוודאים שהאילוץ קיים:

    gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
    

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

    CUSTOM_CONSTRAINT                                 ACTION_TYPE  METHOD_TYPES   RESOURCE_TYPES                DISPLAY_NAME
    custom.deletionProtectionEnabledEnforcedOnCreate  ALLOW        CREATE         file.googleapis.com/Instance  Enforce deletion protection
    
    ...
    

יצירת המדיניות

  1. שומרים את הקובץ הבא בשם policy-instance.yaml:

    name: projects/PROJECT_ID/policies/custom.deletionProtectionEnabledEnforcedOnCreate
    spec:
      rules:
      - enforce: true
    

    מחליפים את PROJECT_ID במזהה הפרויקט.

  2. החלת המדיניות:

    gcloud org-policies set-policy policy-instance.yaml
    
  3. מוודאים שהמדיניות קיימת:

    gcloud org-policies list --project=PROJECT_ID
    

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

    CONSTRAINT                                        LIST_POLICY  BOOLEAN_POLICY  ETAG
    custom.deletionProtectionEnabledEnforcedOnCreate  -            SET             CJqb674GEMiAzGE=-
    

אחרי שמחילים את המדיניות, מחכים כשתי דקות עד ש- Cloud de Confiance יתחיל לאכוף את המדיניות.

בדיקת המדיניות

נסו ליצור מכונה בלי להגדיר את deletionProtection לערך true:

  gcloud filestore instances create test-ins --zone=us-central1 --tier=enterprise --network=name="default" --file-share="capacity=1024,name=test-fs"

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

ERROR: (gcloud.filestore.instances.create) FAILED_PRECONDITION: Operation denied by custom org policy on resource 'projects/test-project/locations/us-central1/instances/test-ins': ["customConstraints/custom.deletionProtectionEnabledEnforcedOnCreate": "Enforce instance creation with deletion protection."].
- '@type': type.googleapis.com/google.rpc.DebugInfo
  detail: "generic::failed_precondition: Operation denied by custom org policy on\
    \ resource 'projects/test-project/locations/us-central1/instances/test-ins':\
    \ [\"customConstraints/custom.deletionProtectionEnabledEnforcedOnCreate\": \"\
    Enforce instance creation with deletion protection.\"]."
  .
  .
  .

- '@type': type.googleapis.com/google.rpc.DebugInfo
- '@type': type.googleapis.com/google.rpc.ErrorInfo
  domain: file.googleapis.com
  metadata:
    customConstraints: customConstraints/custom.deletionProtectionEnabledEnforcedOnCreate
    resource: projects/test-project/locations/us-central1/instances/test-ins
  reason: CUSTOM_ORG_POLICY_VIOLATION

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

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

תיאור תחביר של אילוצים
כשמגדירים את בקרת הגישה לרשימה מוגבלת של כתובות IP ותפקידים, צריך לאפשר הגדרת כתובת ה-IP של האדמין לכתובת IP ייחודית
    name: organizations/ORGANIZATION_ID/customConstraints/custom.filestoreAdminIP
    resourceTypes:
    - file.googleapis.com/Instance
    methodTypes:
    - CREATE
    - UPDATE
    condition: "resource.fileShares.size() > 0 && resource.fileShares[0].nfsExportOptions.size() > 0 && resource.fileShares[0].nfsExportOptions.exists(o, o.squashMode == 'NO_ROOT_SQUASH' && o.accessMode == 'READ_WRITE' && o.ipRanges.exists(i, i != '10.0.0.1'))"
    actionType: ALLOW
    displayName: Access control admin IP
    description: Access control restriction allows setting admin IP exclusively to 10.0.0.1.
השבתת יצירת מופעים עם קיבולת של יותר מ-1,024GB
    name: organizations/ORGANIZATION_ID/customConstraints/custom.disableLargeCapacity
    resourceTypes:
    - file.googleapis.com/Instance
    methodTypes:
    - CREATE
    - UPDATE
    condition: "resource.fileShares.size() > 0 && resource.fileShares[0].capacityGb > 1024"
    actionType: DENY
    displayName: Disable large instance creation
    description: Instance capacity must be up to 1024 GB.
לא לאפשר יצירת גיבוי אם המכונה של המקור מכילה את המילה test בשם שלה
    name: organizations/ORGANIZATION_ID/customConstraints/custom.denyBackupFromTestInstance
    resourceTypes:
    - file.googleapis.com/Backup
    methodTypes:
    - CREATE
    condition: "resource.sourceInstance.contains('test')"
    actionType: DENY
    displayName: Deny backup of test instance
    description: Don't allow creating a backup if the source instance contains 'test' in its name.

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