אבטחת הגישה למשאבים באמצעות 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.

  1. יוצרים קובץ בשם 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 מנהל ממנו משאבים.

  2. כדי לוודא ש-pubsub-topic-service-account לא יכול ליצור משאבי PubSubTopic, בודקים שהפלט של הפקודה הבאה מכיל את no:

    kubectl auth can-i get pubsubtopics --as=system:serviceaccount:default:pubsub-topic-service-account
  3. לאחר מכן יוצרים 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 מנהל ממנו משאבים.

  4. לאחר מכן, יוצרים 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
    
  5. החלת pubsub-topic-editor-rolebinding.yaml על האשכול.

    kubectl apply -f pubsub-topic-editor-rolebinding.yaml --namespace CC_NAMESPACE

    מחליפים את CC_NAMESPACE במרחב השמות ש-Config Connector מנהל ממנו משאבים.

  6. כדי לוודא של-pubsub-topic-service-account יש הרשאה ליצור משאבי PubSubTopic, בודקים שהפלט של הפקודה הבאה הוא yes:

    kubectl auth can-i get pubsubtopics \
      --as=system:serviceaccount:default:pubsub-topic-service-account

סידור וארגון

משתמשים ב-kubectl delete כדי להסיר את חשבון השירות, תפקיד ה-IAM והקצאת התפקיד.

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.

  1. יוצרים קובץ בשם 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 מנהל ממנו משאבים.

  2. יוצרים קובץ בשם 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"
    
  3. מחילים את iampolicymember.yaml.

    kubectl apply -f iampolicymember.yaml  --namespace CC_NAMESPACE 

    מחליפים את CC_NAMESPACE במרחב השמות ש-Config Connector מנהל ממנו משאבים.

  4. כדי לוודא שהמדיניות הוחלה על 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

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

משתמשים בסודות כדי להעביר מידע בצורה מאובטחת למשאבי Google Cloud .