מדיניות הארגון מאפשרת לכם שליטה מרוכזת ופרוגרמטית על המשאבים של הארגון. כאדמינים של מדיניות הארגון, אתם יכולים להגדיר מדיניות בכל הארגון כדי ליהנות מהיתרונות הבאים:
- ריכוז השליטה בהגדרת ההגבלות על אופן השימוש במשאבים של הארגון.
- הגדירו וצרו אמצעי הגנה לצוותי הפיתוח כדי לוודא שהם פועלים במסגרת גבולות התאימות.
- עוזרים לבעלי הפרויקט ולצוותים שלהם להתקדם במהירות בלי לפגוע בתאימות.
Google Distributed Cloud (GDC) air-gapped לא מספק ממשק משתמש במסוף או CLI ייעודי ליצירה ולניהול של מדיניות ארגונית. אתם צריכים להשתמש ב-Kubernetes API או ב-kubectl CLI.
ההבדלים מניהול זהויות והרשאות גישה
ניהול זהויות והרשאות גישה (IAM) ומדיניות ארגונית ממלאים פונקציות משלימות של גישה וניהול:
- ה-IAM מתמקד בהענקת הרשאות. היא מגדירה מי (חברים כמו משתמשים, קבוצות או חשבונות שירות) יכול לבצע אילו פעולות (תפקידים) על אילו משאבים (היקף המשאב). ההרשאות שמוענקות דרך תפקידי IAM הן מצטברות ואין להן כללי דחייה.
- מדיניות הארגון מתמקדת בהגדרת אמצעי הגנה. הן מאפשרות לאדמינים להגדיר הגבלות תוכנתיות על משאבים בכל הארגון, כמו השבתה של שירותים ספציפיים או הגבלה של שינויים במשאבים על סמך מאפיינים של נושא באמצעות בקרת גישה מבוססת-מאפיינים (ABAC). מדיניות הארגון מקבלת עדיפות לחסימת פעולות גם אם לחבר יש תפקיד IAM.
לפני שמתחילים
לפני שמגדירים מדיניות ארגונית, צריך לבקש את ההרשאות הנדרשות ולהכין את הסביבה.
שליחת בקשה לתפקידים ב-IAM
צריך לפנות לאדמין IAM בארגון ולבקש את תפקידי ה-IAM הבאים בהתאם למשימות שצריך לבצע:
- אדמין של מדיניות שירות מוגבל
(
gdchrestrictedservice-policy-admin): יצירה, עדכון ומחיקה של מדיניות שירות מוגבלת. - אדמין של מדיניות הגבלה לפי מאפיינים
(
gdchrestrictbyattributes-policy-admin): יצירה, עדכון ומחיקה של כללי מדיניות של בקרת גישה שמבוססת על מאפיינים.
הכנת הסביבה
יוצרים קובץ kubeconfig כדי להגדיר גישה ל-kubectl CLI.
הגדרת מדיניות
ב-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 Group kinds Marketplace marketplace.gdc.googMarketplaceServiceVertex AI Workbench aiplatform.gdc.googNotebookשירות מסד נתונים – Postgres postgresql.dbadmin.gdc.googDBClusterBackupPlanImportRestore
Transfer Appliance system.gpc.gke.ioTransferApplianceRequestגיבוי backup.gdc.googBackupRepositoryManagerDataproc Container for Spark (שירות Marketplace) sparkoperator.k8s.ioSparkApplicationאם בשירות מסוים מופיעים כמה סוגים בטבלה (למשל שירות מסד נתונים), אפשר לציין רק את הסוגים הספציפיים שרוצים להגביל. לדוגמה, אפשר לחסום פעולות של
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.מבצעים תיקון (patch) למשאב
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. בקשות של נושאים שהמאפיין שלהם לא תואם לאף אחד מהערכים המותרים נדחות.
כברירת מחדל, המדיניות חלה על כל מרחבי השמות באשכול. כדי להגדיר את היקף המדיניות למרחבי שמות או לפרויקטים ספציפיים, אפשר לעיין במאמר בנושא הגדרת היקף של מדיניות ארגונית באשכול.
בדוגמה הבאה, הגישה לשינוי משאבי
Bucketבמרחב השמותproject-fooמוגבלת לנושאים עם המאפייןcitizenship=USAאוcitizenship=UK: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"]