בדף הזה מוסבר איך להשתמש באילוצים מותאמים אישית של שירות מדיניות הארגון ב-Google Cloud כדי להגביל פעולות ספציפיות במשאבי Cloud Storage for Firebase הבאים:
firebasestorage.googleapis.com/DefaultBucket
מידע נוסף על מדיניות הארגון זמין במאמר מדיניות ארגונית בהתאמה אישית.
מידע על כללי מדיניות ואילוצים של הארגון
Google Cloud שירות מדיניות הארגון מאפשר לכם שליטה מרוכזת ופרוגרמטית על המשאבים של הארגון. אדמינים של מדיניות הארגון יכולים להגדיר מדיניות לארגון, שהיא קבוצה של הגבלות שנקראות אילוצים. האילוצים האלה חלים על משאבי Google Cloud ועל הצאצאים של המשאבים האלה בהיררכיית המשאבים של Google Cloud. אתם יכולים לאכוף את מדיניות הארגון ברמת הארגון, התיקייה או הפרויקט.
מדיניות הארגון מספקת אילוצים מנוהלים מובְנים לשירותים שונים של Google Cloud. עם זאת, אם אתם רוצים שליטה מפורטת יותר וניתנת להתאמה אישית על השדות הספציפיים שמוגבלים במדיניות הארגון, אתם יכולים גם ליצור אילוצים בהתאמה אישית ולהשתמש בהם במדיניות הארגון.
ירושה של מדיניות
כברירת מחדל, מדיניות הארגון עוברת בירושה לצאצאים של המשאבים שעליהם אתם אוכפים את המדיניות. לדוגמה, אם אוכפים מדיניות בתיקייה, Google Cloud אוכף את המדיניות בכל הפרויקטים שבתיקייה. במאמר כללי הערכה של היררכיה מוסבר בהרחבה על ההתנהגות הזו ואיך לשנות אותה.
בנוסף, מכיוון ש-Cloud Storage for Firebase מאחסן קבצים בקטגוריות בסיסיות של Cloud Storage, כל כללי המדיניות של הארגון או האילוצים בהתאמה אישית שנאכפים על משאבי Cloud Storage חלים גם על הקטגוריות של Cloud Storage for Firebase.
יתרונות
- אבטחה ופיקוח: אכיפת שליטה ארגונית מרכזית על הקצאת קטגוריות ב-Cloud Storage כדי להבטיח עמידה בדרישות של מיקום אחסון הנתונים וניהול העלויות.
- שליטה במאפיינים ברמה פרטנית: הגבלת יצירת קטגוריות כברירת מחדל על סמך מאפייני משאבים ספציפיים, כמו
storageClassאוlocation.
מגבלות
המגבלות הבאות חלות כשמשתמשים במדיניות ארגונית בהתאמה אישית עם Cloud Storage for Firebase:
- אין אכיפה רטרואקטיבית: אילוצים מותאמים אישית שנאכפים לא חלים על משאבים קיימים. קטגוריות ברירת מחדל קיימות לא נבדקות, אלא אם הן מעודכנות. כדי לזהות משאבים קיימים שעשויים להפר אילוץ, אתם יכולים לבדוק את כללי המדיניות באמצעות מצב פרימטר לבדיקות.
- הגבלות על בקרת גישה: אילוצים בהתאמה אישית לא יכולים להגביל רשימות של בקרת גישה (ACL) או מדיניות IAM בקטגוריות.
לפני שמתחילים
במסוף Firebase, בוחרים או יוצרים פרויקט ב-Firebase.
מוודאים שהפרויקט הוא חלק מארגון ושיש לכם את מזהה הארגון.
כדי להגדיר ולאכוף אילוצים בהתאמה אישית באמצעות שורת הפקודה, התקינו את Google Cloud CLI (
gcloud). אי אפשר לנהל כללי מדיניות ארגונית בהתאמה אישית באמצעות ה-Firebase CLI.
התפקידים הנדרשים
כדי לקבל את ההרשאות שדרושות לניהול של כללי מדיניות מותאמים אישית של הארגון, בקשו מהאדמין להקצות לכם את התפקיד אדמין של מדיניות הארגון (roles/orgpolicy.policyAdmin) ב-IAM ברמת הארגון.
Cloud Storage for Firebase משאבים נתמכים
בטבלה הבאה מפורטים המשאבים של Cloud Storage for Firebase שאפשר להפנות אליהם באילוצים בהתאמה אישית. אפשר גם לעיין במשאבים הנתמכים של Cloud Storage, כי אילוצים בהתאמה אישית במשאבים האלה חלים גם על קטגוריות של Cloud Storage for Firebase.
| משאב | שדות נתמכים |
|---|---|
firebasestorage.googleapis.com/DefaultBucket |
|
הגדרת אילוץ בהתאמה אישית
אילוץ בהתאמה אישית מוגדר בקובץ YAML לפי המשאבים, השיטות, התנאים והפעולות שנתמכים בשירות שבו אתם אוכפים את מדיניות הארגון. התנאים לאילוצים המותאמים אישית מוגדרים באמצעות Common Expression Language (CEL). מידע נוסף על יצירת תנאים באילוצים בהתאמה אישית באמצעות CEL זמין בקטע בנושא CEL במאמר יצירה וניהול של אילוצים בהתאמה אישית.
המסוף
כדי ליצור אילוץ בהתאמה אישית:
- במסוף Google Cloud, נכנסים לדף מדיניות הארגון.
- בכלי לבחירת פרויקטים, בוחרים את הפרויקט שרוצים להגדיר לו את מדיניות הארגון.
- לוחצים על Custom constraint.
- בתיבה Display name, מזינים שם לאילוץ שיהיה קריא לאנשים. השם הזה מופיע בהודעות שגיאה ואפשר להשתמש בו לזיהוי ולניפוי באגים. אל תשתמשו בפרטים אישיים מזהים (PII) או במידע רגיש בשמות לתצוגה, כי השם הזה עלול להיחשף בהודעות שגיאה. השדה הזה יכול להכיל עד 200 תווים.
- בתיבה Constraint ID, מזינים את המזהה שרוצים לתת לאילוץ המותאם אישית החדש. אילוץ בהתאמה אישית יכול להכיל רק אותיות (כולל אותיות רישיות וקטנות) או מספרים, לדוגמה
custom.restrictStorageClass. השדה הזה יכול להכיל עד 70 תווים, לא כולל הקידומת (custom.), לדוגמה,organizations/123456789/customConstraints/custom.restrictStorageClass. אל תכללו פרטים אישיים מזהים או מידע רגיש במזהה האילוץ, כי הם עלולים להיחשף בהודעות שגיאה. - בתיבה Description, מזינים תיאור של האילוץ שקריא לאנשים. התיאור הזה משמש כהודעת שגיאה כשיש הפרה של המדיניות. ציינו למה המדיניות הופרה ואיך אפשר לפתור את הבעיה. אל תכללו פרטים אישיים מזהים (PII) או מידע רגיש בתיאור, כי הם עלולים להיחשף בהודעות שגיאה. השדה הזה יכול להכיל עד 2,000 תווים.
- בתיבה Resource type, בוחרים את השם של משאב ה-REST שמכיל את האובייקט והשדה שרוצים להגביל, לדוגמה
firebasestorage.googleapis.com/DefaultBucket. רוב סוגי המשאבים תומכים בעד 20 אילוצים בהתאמה אישית. אם תנסו ליצור יותר אילוצים בהתאמה אישית, הפעולה תיכשל. - בקטע Enforcement method, בוחרים אם לאכוף את האילוץ על שיטת REST
CREATEאו על שתי השיטותCREATEו-UPDATE. (הערה:DefaultBucketתומך רק ב-CREATE). - כדי להגדיר תנאי, לוחצים על עריכת התנאי.
- בחלונית Add condition, יוצרים תנאי CEL שמתייחס למשאב שירות נתמך, לדוגמה,
resource.storageClass == 'STANDARD'. השדה הזה יכול להכיל עד 1,000 תווים. לפרטים על השימוש ב-CEL, קראו את המאמר Common Expression Language. - לוחצים על שמירה.
- בחלונית Add condition, יוצרים תנאי CEL שמתייחס למשאב שירות נתמך, לדוגמה,
- בקטע פעולה, בוחרים אם לאשר או לדחות את השיטה שנבדקה אם התנאי מתקיים.
פעולת הדחייה פירושה שהפעולה ליצירה או לעדכון של המשאב נחסמת אם התנאי מתקיים.
פעולת ההרשאה מאפשרת ליצור או לעדכן את המשאב רק אם התנאי מתקיים. כל מקרה אחר, מלבד אלה שרשומים במפורש בתנאי, נחסם.
- לוחצים על Create constraint.
gcloud
- כדי ליצור אילוץ בהתאמה אישית, יוצרים קובץ YAML בפורמט הבא:
name: organizations/ORGANIZATION_ID/customConstraints/custom.restrictStorageClass resourceTypes: firebasestorage.googleapis.com/DefaultBucket methodTypes: - CREATE condition: "resource.storageClass == 'STANDARD'" actionType: DENY displayName: Restrict Standard Storage Class description: Deny creating buckets with STANDARD storage class.
- אחרי שיוצרים את קובץ ה-YAML לאילוץ חדש בהתאמה אישית, צריך להגדיר אותו כדי שיהיה זמין למדיניות הארגון. כדי להגדיר אילוץ בהתאמה אישית, משתמשים בפקודה
gcloud org-policies set-custom-constraint:gcloud org-policies set-custom-constraint CONSTRAINT_PATH
מחליפים את
CONSTRAINT_PATHבנתיב המלא לקובץ האילוץ בהתאמה אישית. לדוגמה,/home/user/customconstraint.yaml. - כדי לוודא שהאילוץ המותאם אישית קיים, משתמשים בפקודה
gcloud org-policies list-custom-constraints:gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
אכיפה של מדיניות ארגונית בהתאמה אישית
כדי לאכוף אילוץ, אפשר ליצור מדיניות ארגון שמפנה אליו, ואז להחיל את המדיניות הזו על משאב Google Cloud.
המסוף
- במסוף Google Cloud, נכנסים לדף מדיניות הארגון.
- בכלי לבחירת פרויקטים, בוחרים את הפרויקט שרוצים להגדיר לו את מדיניות הארגון.
- ברשימה שבדף מדיניות הארגון, בוחרים את האילוץ כדי להציג את הדף Policy details של אותו אילוץ.
- כדי להגדיר את מדיניות הארגון למשאב הזה, לוחצים על ניהול המדיניות.
- בדף עריכת המדיניות, בוחרים באפשרות במקום המדיניות של המשאב הראשי.
- לוחצים על Add a rule.
- בקטע Enforcement, בוחרים אם לאכוף את מדיניות הארגון הזו או לא.
- כדי לאכוף את מדיניות הארגון במצב פרימטר לבדיקות, לוחצים על הגדרת המדיניות להרצת בדיקה. מידע נוסף זמין במאמר בדיקת כללי מדיניות של הארגון.
- אחרי שמוודאים שמדיניות הארגון במצב פרימטר לבדיקות פועלת כמו שצריך, לוחצים על Set policy כדי להגדיר את המדיניות הפעילה.
gcloud
- כדי ליצור מדיניות ארגונית עם כללים בוליאניים, יוצרים קובץ YAML של מדיניות שמפנה לאילוץ:
name: projects/PROJECT_ID/policies/custom.restrictStorageClass spec: rules: - enforce: true dryRunSpec: rules: - enforce: true
- כדי לאכוף את מדיניות הארגון במצב פרימטר לבדיקות, מריצים את הפקודה הבאה עם הדגל
dryRunSpec:gcloud org-policies set-policy POLICY_PATH --update-mask=dryRunSpec
- אחרי שמוודאים שמדיניות הארגון במצב פרימטר לבדיקות פועלת כמו שצריך, מגדירים את המדיניות הפעילה באמצעות הפקודה
org-policies set-policyוהדגלspec:gcloud org-policies set-policy POLICY_PATH --update-mask=spec
בדיקת מדיניות הארגון בהתאמה אישית
בדוגמה הבאה נוצרים אילוץ ומדיניות בהתאמה אישית, שדורשים שכל הקטגוריות החדשות שנוצרות כברירת מחדל לא ישתמשו בסוג האחסון STANDARD. כדי לבדוק את המדיניות, אתם יכולים לנסות לבצע פעולה שהמדיניות אמורה למנוע.
יצירת האילוץ
שומרים את הקובץ הבא בשם
constraint-restrict-storage-class.yaml:name: organizations/ORGANIZATION_ID/customConstraints/custom.restrictStorageClass resourceTypes: - firebasestorage.googleapis.com/DefaultBucket methodTypes: - CREATE condition: "resource.storageClass == 'STANDARD'" actionType: DENY displayName: Restrict Standard Storage Class description: Deny creating buckets with STANDARD storage class.מחליפים את
ORGANIZATION_IDבמזהה הארגון.מחילים את האילוץ:
gcloud org-policies set-custom-constraint ~/constraint-restrict-storage-class.yamlמוודאים שהאילוץ קיים:
gcloud org-policies list-custom-constraints --organization=ORGANIZATION_IDהפלט אמור להיראות כך:
CUSTOM_CONSTRAINT ACTION_TYPE METHOD_TYPES RESOURCE_TYPES DISPLAY_NAME custom.restrictStorageClass DENY CREATE firebasestorage.googleapis.com/DefaultBucket Restrict Standard Storage Class ...
יצירת המדיניות
שומרים את הקובץ הבא בשם
policy-restrict-storage-class.yaml:name: projects/PROJECT_ID/policies/custom.restrictStorageClass spec: rules: - enforce: trueמחליפים את
PROJECT_IDבמזהה הפרויקט.מחילים את המדיניות:
gcloud org-policies set-policy ~/policy-restrict-storage-class.yamlמוודאים שהמדיניות קיימת:
gcloud org-policies list --project=PROJECT_IDהפלט אמור להיראות כך:
CONSTRAINT LIST_POLICY BOOLEAN_POLICY ETAG custom.restrictStorageClass - SET CIqktscGELiZn6cC-
אחרי שמחילים את המדיניות, ממתינים כשתי דקות עד ש-Google Cloud יתחיל לאכוף את המדיניות.
בדיקת המדיניות
מנסים ליצור קטגוריית ברירת מחדל באמצעות ה-API בארכיטקטורת REST של Cloud Storage for Firebase, בלי לציין סוג אחסון (שמוגדר כברירת מחדל ל-STANDARD):
PROJECT_ID="PROJECT_ID"
TOKEN=$(gcloud auth print-access-token)
curl -X POST "https://firebasestorage.googleapis.com/v1beta/projects/${PROJECT_ID}/defaultBucket" \
-H "Authorization: Bearer ${TOKEN}" \
-H "Content-Type: application/json" \
-d '{"location": "US-EAST1"}'
הבקשה נכשלת ומופיעה שגיאה שדומה לזו:
FAILED_PRECONDITION: Operation denied by org policy: ["customConstraints/custom.restrictStorageClass": "Deny creating buckets with STANDARD storage class."].
- '@type': type.googleapis.com/google.rpc.ErrorInfo
domain: iam.googleapis.com
metadata:
customConstraints: customConstraints/custom.restrictStorageClass
reason: CUSTOM_ORG_POLICY_VIOLATION
דוגמאות למדיניות ארגונית בהתאמה אישית לתרחישים נפוצים
בטבלה הזו מופיעות דוגמאות לתחביר של כמה אילוצים נפוצים בהתאמה אישית.
| תיאור | תחביר של אילוצים |
|---|---|
| הגבלת היצירה של קטגוריות ברירת מחדל עם סוג האחסון Standard Storage |
name: organizations/ORGANIZATION_ID/customConstraints/custom.restrictStorageClass resourceTypes: - firebasestorage.googleapis.com/DefaultBucket methodTypes: - CREATE condition: "resource.storageClass == 'STANDARD'" actionType: DENY displayName: Restrict Standard Storage Class description: Deny creating buckets with STANDARD storage class. |
| דרישה ליצור קטגוריות ברירת מחדל במיקום ספציפי |
name: organizations/ORGANIZATION_ID/customConstraints/custom.requireDefaultBucketLocation resourceTypes: - firebasestorage.googleapis.com/DefaultBucket methodTypes: - CREATE condition: "resource.location != 'US-EAST1'" actionType: DENY displayName: Require US-EAST1 Location description: Deny creating default buckets outside the US-EAST1 location. |
המאמרים הבאים
- מידע נוסף על שירות מדיניות הארגון
- איך יוצרים ומנהלים את מדיניות הארגון
- רשימה מלאה של אילוצים מנוהלים של מדיניות הארגון