אבטחת הגישה למשאבים באמצעות IAM
משתמשים וחשבונות שירות של Kubernetes צריכים הרשאות כדי לנהל משאבים של Config Connector. באמצעות Config Connector, אפשר לנהל את מישור הבקרה של הפרויקט באמצעות זהויות שמשתמשות בבקרת גישה מבוססת-תפקידים (RBAC) של Kubernetes. אפשר גם לעיין במדיניות של ניהול זהויות והרשאות גישה (IAM).
המשאבים שיכולים להפנות ל-IAMPolicy ול-IAMPolicyMember מפורטים בהפניה למשאבים. למשאבים האלה יש את המאפיין "Can Be Referenced by IAMPolicy/IAMPolicyMember".
במאמר הזה מוסבר איך לאבטח את הגישה למשאבי Google Cloud באמצעות ניהול זהויות והרשאות גישה (IAM).
לפני שמתחילים
מתקינים את Config Connector באשכול.
אבטחת הגישה למישור הבקרה באמצעות RBAC
בדוגמה הזו, תיצרו חשבון שירות ותתנו לו הרשאות לנהל PubSubTopic. חשבון השירות הזה לא יכול לנהל סוגים אחרים של משאבי Config Connector.
יוצרים קובץ בשם
pubsub-topic-service-account.yamlעם התוכן הבא:apiVersion: v1 kind: ServiceAccount metadata: name: pubsub-topic-service-account namespace: defaultמחילים את הקובץ כדי ליצור את חשבון השירות
pubsub-topic-service-account:kubectl apply -f pubsub-topic-service-account.yaml --namespace CC_NAMESPACE
מחליפים את
CC_NAMESPACEבמרחב השמות שבו Config Connector מנהל את המשאבים.כדי לוודא ש-
pubsub-topic-service-accountלא יכול ליצור משאבים מסוגPubSubTopic, מריצים את הפקודה הבאה ובודקים שהפלט מכיל את הערךno:kubectl auth can-i get pubsubtopics --as=system:serviceaccount:default:pubsub-topic-service-account
אחר כך יוצרים
ClusterRoleשמאפשרת ליצור נושא Pub/Sub.ה-ClusterRole יכול לנהל רק משאבים שיש להם ערכים שצוינו ב-
rules.apiGroupsוב-rules.resources. כדי למצוא ערכים ל-apiGroupsול-resources, עיינו בחומר העזר של המשאבים.יוצרים קובץ בשם
pubsub-topic-editor-role.yamlעם התוכן הבא:apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: creationTimestamp: null name: pubsub-topic-editor rules: - apiGroups: - pubsub.cnrm.cloud.google.com resources: - pubsubtopics verbs: - get - list - watch - create - update - patch - deleteמפעילים את
pubsub-topic-editor.yamlכדי ליצור אתClusterRole:kubectl apply -f pubsub-topic-editor-role.yaml --namespace CC_NAMESPACE
מחליפים את
CC_NAMESPACEבמרחב השמות שבו Config Connector מנהל את המשאבים.אחר כך יוצרים RoleBinding בין ClusterRole לבין חשבון השירות. יוצרים קובץ בשם
pubsub-topic-editor-rolebinding.yamlעם התוכן הבא:apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: pubsub-topic-editor-rolebinding. subjects: - kind: ServiceAccount name: pubsub-topic-service-account roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: pubsub-topic-editorמחילים את
pubsub-topic-editor-rolebinding.yamlעל האשכול.kubectl apply -f pubsub-topic-editor-rolebinding.yaml --namespace CC_NAMESPACE
מחליפים את
CC_NAMESPACEבמרחב השמות שבו Config Connector מנהל את המשאבים.כדי לוודא של-
pubsub-topic-service-accountיש הרשאה ליצור משאביPubSubTopic, מריצים את הפקודה הבאה ובודקים שהפלט הואyes:kubectl auth can-i get pubsubtopics \ --as=system:serviceaccount:default:pubsub-topic-service-account
סידור וארגון
משתמשים ב-kubectl delete כדי להסיר את חשבון השירות, את תפקיד ה-IAM ואת ה-Rolebinding.
kubectl delete -f pubsub-topic-editor-rolebinding.yaml --namespace CC_NAMESPACE
kubectl delete -f pubsub-topic-editor-role.yaml --namespace CC_NAMESPACE
kubectl delete -f pubsub-topic-service-account.yaml --namespace CC_NAMESPACE
מחליפים את CC_NAMESPACE במרחב השמות שבו Config Connector מנהל את המשאבים.
אבטחת מישור הנתונים באמצעות מדיניות IAM
בדוגמה הזו, אתם משתמשים בהרשאות שניתנו קודם כדי ליצור PubSubTopic ולהגביל את הגישה אליו באמצעות משאב IAMPolicyMember.
יוצרים קובץ בשם
pubsub-topic-sample.yamlעם התוכן הבא:apiVersion: pubsub.cnrm.cloud.google.com/v1beta1 kind: PubSubTopic metadata: name: pubsubtopic-sampleהחלת
pubsub-topic-sample.yamlעםkubectl:kubectl apply -f pubsub-topic-sample.yaml --namespace CC_NAMESPACE
מחליפים את
CC_NAMESPACEבמרחב השמות שבו Config Connector מנהל את המשאבים.יוצרים קובץ בשם
iampolicymember.yamlעם התוכן הבא, ומחליפים אתEMAIL_ADDRESSבכתובת האימייל של חשבון Google Cloud :apiVersion: iam.cnrm.cloud.google.com/v1beta1 kind: IAMPolicyMember metadata: name: iampolicymember-sample spec: resourceRef: apiVersion: pubsub.cnrm.cloud.google.com/v1beta1 kind: PubSubTopic name: pubsubtopic-sample role: roles/pubsub.admin member: "user:EMAIL_ADDRESS"מחילים את
iampolicymember.yaml.kubectl apply -f iampolicymember.yaml --namespace CC_NAMESPACE
מחליפים את
CC_NAMESPACEבמרחב השמות שבו Config Connector מנהל את המשאבים.כדי לוודא שהמדיניות הוחלה על Google Cloud , מריצים את הפקודה הבאה ומחפשים את כתובת האימייל בפלט. מחליפים את
PROJECT_IDבמזהה הפרויקט:gcloud beta pubsub topics get-iam-policy projects/PROJECT_ID/topics/pubsubtopic-sample
הגישה לנושאי Pub/Sub מוגנת עכשיו באמצעות IAMPolicyMember.
סידור וארגון
משתמשים ב-kubectl delete כדי להסיר את נושא Pub/Sub ואת IAMPolicyMember מהפרויקט ב- Google Cloud .
kubectl delete -f iampolicymember.yaml --namespace CC_NAMESPACE
kubectl delete -f pubsub-topic-sample.yaml --namespace CC_NAMESPACE
שיטות מומלצות לאבטחה בבידוד של מספר דיירים
כדי למנוע הרחבת הרשאות לא מורשית ולאכוף בידוד דיירים, מומלץ לפעול לפי השיטות המומלצות הבאות:
אכיפת מצב מרחב שמות: הימנעו ממצב אשכול בסביבות עם כמה דיירים. במצב אשכול, כל מרחבי השמות משתפים חשבון שירות אחד ב-IAM. כל משתמש שיכול ליצור משאבים של Config Connector בכל מרחב שמות יכול לפעול עם הרשאות ה-IAM המלאות של אותו חשבון שירות.
הגבלת RBAC למשאבי IAM: הגבלת הרשאות היצירה והשינוי של משאבי
IAMPolicy,IAMPartialPolicyו-IAMPolicyMemberבאמצעות בקרת גישה מבוססת-תפקידים (RBAC) של Kubernetes. אם למפתחים יש גישת כתיבה רחבה למשאבים האלה, הם יכולים לשנות את הקישורים של Google Cloud ל-IAM.היקף הקישורים של IAM לאיחוד זהויות של עומסי עבודה ל-GKE: מגדירים את הקישורים האלה רק לחשבונות שירות ייעודיים של Kubernetes במרחבי שמות ספציפיים. במצב מרחב שמות, מקשרים כל חשבון שירות של IAM רק ל-Config Connector Kubernetes ServiceAccount של מרחב השמות שלו:
gcloud iam service-accounts add-iam-policy-binding \ GSA_NAME@PROJECT_ID.iam.gserviceaccount.com \ --member="serviceAccount:PROJECT_ID.svc.id.goog[cnrm-system/cnrm-controller-manager-CC_NAMESPACE]" \ --role="roles/iam.workloadIdentityUser"מחליפים את מה שכתוב בשדות הבאים:
-
GSA_NAME: השם של חשבון השירות ב-IAM שבו Config Connector משתמש למרחב השמות. -
PROJECT_ID: מזהה הפרויקט שמכיל את האשכול ואת חשבון השירות ב-IAM. -
CC_NAMESPACE: מרחב השמות שבו Config Connector מנהל את המשאבים.
אל תקצו את התפקיד
roles/iam.workloadIdentityUserלקבוצת חשבונות משתמשים, כמו כל ה-Pods במרחב השמותcnrm-system. במצב מרחב שמות, הבקרים של Config Connector לכל מרחבי השמות פועלים ב-cnrm-system, כך שסוג הקישור הזה מאפשר לבקר של כל מרחב שמות להתחזות לחשבון השירות של IAM.-
המאמרים הבאים
אפשר להשתמש בסודות כדי להעביר מידע בצורה מאובטחת למשאבי Google Cloud .