מדיניות הארגון מאפשרת לכם שליטה מרוכזת ופרוגרמטית על המשאבים של הארגון. כאדמינים של מדיניות הארגון, אתם יכולים להגדיר כללי מדיניות בכל הארגון כדי ליהנות מהיתרונות הבאים:
- לרכז את השליטה כדי להגדיר הגבלות על אופן השימוש במשאבים של הארגון.
- להגדיר ולקבוע גבולות לצוותי הפיתוח כדי לוודא שהם עומדים בדרישות התאימות.
- לעזור לבעלי פרויקטים ולצוותים שלהם להתקדם במהירות בלי להפר את התאימות.
ב-Google Distributed Cloud (GDC) עם air gap אין ממשק משתמש של מסוף או CLI ייעודי ליצירה ולניהול של כללי מדיניות של הארגון. לצורך כך, אתם צריכים להשתמש ב-API של Kubernetes או ב-CLI של kubectl.
ההבדלים בין ניהול זהויות והרשאות גישה (IAM) לבין בקרת גישה מבוססת-תפקיד (RBAC)
ניהול זהויות והרשאות גישה (IAM) וכללי מדיניות של הארגון משמשים כפונקציות משלימות של גישה ופיקוח:
- IAM מתמקד בהענקת הרשאות. היא מגדירה מי (חברים כמו משתמשים, קבוצות או חשבונות שירות) יכול לבצע אילו פעולות (תפקידים) באילו משאבים (היקף המשאבים). ההרשאות שניתנות באמצעות תפקידי IAM הן מצטברות ואין להן כללי דחייה.
- כללי מדיניות של הארגון מתמקדים בהגדרת גבולות. הם מאפשרים לאדמינים להגדיר הגבלות פרוגרמטיות על משאבים בכל הארגון, כמו השבתת שירותים ספציפיים או הגבלת שינויים במשאבים על סמך מאפייני נושא באמצעות בקרת גישה מבוססת-מאפיינים (ABAC). למדיניות הארגון יש עדיפות על פני תפקידי IAM, והיא יכולה לחסום פעולות גם אם למשתמש יש תפקיד IAM.
לפני שמתחילים
לפני שמגדירים את מדיניות הארגון, צריך לבקש את ההרשאות הנדרשות ולהכין את הסביבה.
בקשת תפקידים ב-IAM
כדי לבקש את תפקידי ה-IAM הבאים, פנו למנהל חשבון ארגוני ב-IAM בהתאם למשימות שאתם צריכים לבצע:
- אדמין של מדיניות שירות מוגבל (
gdchrestrictedservice-policy-admin): יצירה, עדכון ומחיקה של כללי מדיניות של שירותים מוגבלים. - אדמין של מדיניות הגבלה לפי מאפיינים (
gdchrestrictbyattributes-policy-admin): יצירה, עדכון ומחיקה של כללי מדיניות של בקרת גישה מבוססת-מאפיינים.
הכנת הסביבה
יוצרים קובץ kubeconfig כדי להגדיר את הגישה ל-CLI של kubectl.
הגדרת מדיניות
אפשר להגדיר שני סוגים של מדיניות ארגונית ב-GDC:
- מדיניות שירות מוגבל (
GDCHRestrictedService): מגבילה את השירותים שאפשר להשתמש בהם או לשנות אותם באשכול. - מדיניות של בקרת גישה שמבוססת על מאפיינים (
GDCHRestrictByAttributes): מגבילה את הגישה למשאבים באשכול על סמך מאפייני נושא שממופים מספק הזהויות.
הגדרת מדיניות שירות מוגבלת
סוג המדיניות GDCHRestrictedService מאפשר להגביל את השירותים שאפשר להשתמש בהם או לשנות אותם באשכול, על ידי חסימה של ממשקי API ספציפיים. למשל, הגבלת שירות לפרויקטים מסוימים או חסימת הגישה לשירות חדש בזמן שבודקים אותו. צריך ליצור את המדיניות הזו באותו אשכול שבו נמצאים משאבי השירות. אתם יכולים ליצור כמה מופעי מדיניות באשכול לשירותים או לפרויקטים שונים.
GDCHRestrictedService תומך בפעולות CREATE, UPDATE ו-DELETE. כדי להגביל את פעולות הקריאה של GET ו-LIST, משתמשים בקישורי תפקידים ב-IAM כדי לתת גישה ולבטל אותה.
הגדרת מדיניות שירות מוגבלת:
מגדירים את המניפסט של המדיניות:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: GDCHRestrictedService metadata: name: POLICY_NAME spec: match: kinds: - apiGroups: - "API_GROUP" kinds: - "KIND" parameters: disabledOperations: - DISABLED_OPERATIONמחליפים את מה שכתוב בשדות הבאים:
POLICY_NAME: השם של מדיניות הארגון.
API_GROUP: קבוצת ה-API של השירות שרוצים להגביל, כמו שמופיע בטבלת השירותים הנתמכים בהמשך.
KIND: סוג המשאב שרוצים להגביל, כפי שמופיע בטבלת השירותים הנתמכים הבאה.
DISABLED_OPERATION: קבוצות הפעולות שהמדיניות הזו חוסמת. הערכים המותרים הםCREATE,UPDATEו-DELETE. ערך ברירת המחדל של השדהdisabledOperationsהוא*. כדי להשבית שירות לחלוטין, צריך לציין אתCREATE,UPDATEו-DELETE(ולציין את כל הסוגים שלו).
כברירת מחדל, המדיניות חלה על כל מרחבי השמות באשכול. כדי להגדיר את היקף המדיניות למרחבי שמות או לפרויקטים ספציפיים, ראו הגדרת ההיקף של מדיניות הארגון בתוך אשכול.
המדיניות
GDCHRestrictedServiceתומכת בקבוצת המשנה הבאה של שירותים ב-GDC:Service קבוצת API kinds Marketplace marketplace.gdc.googMarketplaceServiceVertex AI Workbench aiplatform.gdc.googNotebookDatabase Service - Postgres postgresql.dbadmin.gdc.googDBClusterBackupPlanImportRestore
Transfer Appliance system.gpc.gke.ioTransferApplianceRequestגיבוי backup.gdc.googBackupRepositoryManagerDataproc Container for Spark (שירות Marketplace) sparkoperator.k8s.ioSparkApplicationאם שירות מסוים מציג כמה סוגים בטבלה (כמו Database Service), אתם יכולים לציין רק את הסוגים הספציפיים שאתם רוצים להגביל. לדוגמה, אתם יכולים לחסום פעולות של
Restoreולאפשר פעולות שלDBCluster.בדוגמה הבאה, העדכונים מוגבלים לשירותי Marketplace:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: GDCHRestrictedService metadata: name: no-update-to-marketplace-service spec: match: kinds: - apiGroups: - "marketplace.gdc.goog" kinds: - MarketplaceService parameters: disabledOperations: - "UPDATE"מחילים את המדיניות באמצעות ה-CLI של kubectl:
kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f POLICY_NAME.yamlמחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_KUBECONFIG: קובץ ה-kubeconfig של האשכול שבו רוצים להחיל את המדיניות -
POLICY_NAME: השם של קובץ מדיניות הארגון
-
הגדרת מדיניות של בקרת גישה מבוססת-מאפיינים
סוג המדיניות GDCHRestrictByAttributes מאפשר ליצור כללי מדיניות של ABAC כדי להגביל את הגישה למשאבים על סמך מאפייני הנושא. לדוגמה, אתם יכולים להשתמש בסוג המדיניות הזה כדי להגביל את פעולות הכתיבה או השינוי בקטגוריות האחסון, כך שרק משתמשים או חשבונות שירות עם מאפייני זהות ספציפיים (כמו citizenship=USA או citizenship=UK) יוכלו לבצע אותן.
יוצרים את המדיניות הזו באותו אשכול שבו נמצאים המשאבים. אתם יכולים ליצור כמה מופעי מדיניות באשכול למשאבים או לפרויקטים שונים.
הגדרת מדיניות של בקרת גישה שמבוססת על מאפיינים:
יוצרים קובץ JSON לתיקון כדי למפות מאפייני זהות בהתאמה אישית למשאב
IdentityProviderConfig:cat <<EOF > attributeMapping-patch.json { "CUSTOM_ATTRIBUTE": "assertion[\"CUSTOM_ATTRIBUTE\"]" } EOFמחליפים את
CUSTOM_ATTRIBUTEבשם של מאפיין הזהות שרוצים למפות, למשלcitizenship.מתקנים את המשאב
IdentityProviderConfigבמרחב השמותplatform:kubectl --kubeconfig CLUSTER_KUBECONFIG patch \ IdentityProviderConfig IDENTITY_PROVIDER_CONFIG_NAME \ -n platform --type=json \ -p '[{"op":"add","path":"/spec/oidc/attributeMapping", "value": '"$(cat attributeMapping-patch.json)"'}]'מחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_KUBECONFIG: קובץ ה-kubeconfig של האשכול שבו נמצא ספק הזהויות -
IDENTITY_PROVIDER_CONFIG_NAME: השם של המשאב ב-IdentityProviderConfig
-
מגדירים את המניפסט של המדיניות:
apiVersion: constraints.global.gatekeeper.sh/v1beta1 kind: GDCHRestrictByAttributes metadata: name: POLICY_NAME spec: match: kinds: - apiGroups: - "API_GROUP" kinds: - "KIND" parameters: attributes: - CUSTOM_ATTRIBUTE attributeValues: - ALLOWED_ATTRIBUTE_VALUEמחליפים את מה שכתוב בשדות הבאים:
POLICY_NAME: השם של מדיניות הארגון.
API_GROUP: קבוצת ה-API של המשאבים שרוצים להגביל, למשלobject.gdc.goog.
KIND: סוג המשאב שרוצים להגביל, למשלBucket.
CUSTOM_ATTRIBUTE: מאפיין הנושא בהתאמה אישית שממופה מספק הזהויות, כמוcitizenship.
ALLOWED_ATTRIBUTE_VALUE: הערך המותר למאפיין המותאם אישית, למשלUSA. בקשות מנושאים שהמאפיין שלהם לא תואם לאחד מהערכים המותרים יידחו.
כברירת מחדל, המדיניות חלה על כל מרחבי השמות באשכול. כדי להגדיר את היקף המדיניות למרחבי שמות או לפרויקטים ספציפיים, ראו הגדרת ההיקף של מדיניות הארגון בתוך אשכול.
בדוגמה הבאה, רק נושאים עם המאפיין
citizenship=USAאוcitizenship=UKיכולים לשנות משאבים מסוגBucketבמרחב השמותproject-foo:apiVersion: constraints.global.gatekeeper.sh/v1beta1 kind: GDCHRestrictByAttributes metadata: name: restrict-by-citizenship spec: match: scope: Namespaced kinds: - apiGroups: - "object.gdc.goog" kinds: - Bucket namespaces: - project-foo parameters: attributes: - "citizenship" attributeValues: - "USA" - "UK"מחילים את המדיניות באמצעות ה-CLI של kubectl:
kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f POLICY_NAME.yamlמחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_KUBECONFIG: קובץ ה-kubeconfig של האשכול שבו רוצים להחיל את המדיניות -
POLICY_NAME: השם של קובץ מדיניות הארגון
-
הגדרת ההיקף של מדיניות הארגון בתוך אשכול
כשמגדירים מדיניות ארגונית, צריך להחליט אם היא תשפיע על כל מרחבי השמות, רק על מרחבי שמות ספציפיים או על כל מרחבי השמות חוץ מרשימה נתונה. כדי לעשות את זה, משתמשים בשילוב של הפרמטרים .spec.match.excludedNamespaces, .spec.match.namespaceSelector, .spec.match.namespaces ו-.spec.match.scope בהגדרת המדיניות.
מידע נוסף על הפרמטרים האלה זמין בקטע התאמה למדיניות הארגון. לדוגמה, כדי לאפשר יצירה של מסדי נתונים רק במרחבי שמות עם התווית owner: dba-team, יוצרים את המדיניות הבאה:
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: GDCHRestrictedService
metadata:
name: db-restricted-to-dbas
spec:
match:
scope: Namespaced
namespaceSelector:
matchExpressions:
# We are restricting the use of the service in namespaces that
# don't have the owner: dba-team label
- key: owner
operator: NotIn
values:
- dba-team
kinds:
- apiGroups:
- "postgresql.dbadmin.gdc.goog"
kinds:
- DBCluster
- BackupPlan
- Import
- Restore
parameters:
disabledOperations:
- "UPDATE"
- "CREATE"
- "DELETE"
חזרה לגרסה קודמת של מדיניות קיימת
כדי להפסיק את האכיפה של מדיניות קיימת, צריך למחוק אותה באמצעות kubectl CLI. משתמשים בקובץ kubeconfig שנותן גישה לאשכול שבו מוגדרת המדיניות, ולתפקיד ב-IAM שתואם לסוג המדיניות (למשל gdchrestrictedservice-policy-admin או gdchrestrictbyattributes-policy-admin).
מחיקה של מדיניות הארגון:
kubectl --kubeconfig CLUSTER_KUBECONFIG delete \
POLICY_TYPE/POLICY_NAME
מחליפים את מה שכתוב בשדות הבאים:
CLUSTER_KUBECONFIG: קובץ ה-kubeconfig של האשכול שבו נמצאת מדיניות הארגון
POLICY_TYPE: סוג מדיניות הארגון שרוצים למחוק, למשלGDCHRestrictedServiceאוGDCHRestrictByAttributes
POLICY_NAME: השם של מדיניות הארגון שרוצים למחוק
בדיקת מדיניות במצב ביקורת
אתם יכולים לבדוק מדיניות בלי לאכוף אותה. לפני שמשיקים מדיניות, כדאי לבדוק אותה כדי לוודא שהיא לא משבשת מערכות קיימות, או כדי לקבל הערכה לגבי היקף ההתנהגות. כדי להוסיף בדיקה, מוסיפים enforcementAction להגדרת המדיניות. יש שלושה ערכים אפשריים לפרמטר הזה:
-
deny: המדיניות נאכפת. זוהי הגדרת ברירת המחדל. -
dryrun: הפעולה מותרת, אבל אפשר לראות שיש הפרת מדיניות גם ביומני הביקורת וגם בסטטוס המדיניות. בודקים את ההפרה באמצעותkubectl --kubeconfig CLUSTER_KUBECONFIG get POLICY_TYPE/POLICY_NAME. -
warn: זהה ל-dryrun, אבל הבדיקה גם מציגה אזהרה בתגובה לבקשה שהפעילה הפרת מדיניות.
לדוגמה, כדי לבדוק מדיניות שמשביתה את Marketplace, יוצרים את המדיניות הבאה:
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: GDCHRestrictedService
metadata:
name: disable-marketplace-service-project-alice
spec:
enforcementAction: warn
match:
kinds:
- apiGroups: ["marketplace.gdc.goog"]
kinds: ["MarketplaceService"]