הגבלת הפריסה למרחב שמות ב-GKE

כשפורסים ב-Google Kubernetes Engine‏ (GKE), לחשבון השירות לביצוע שמוגדר כברירת מחדל ב-Cloud Deploy יש גישה לכל מרחבי השמות באשכול היעד. אפשר להגדיר את חשבון השירות כך שפריסה תתבצע רק במרחב שמות אחד.

  1. מוודאים שלחשבון השירות של ההרצה לא מוקצה התפקיד roles/container.developer ב-IAM.

  2. מקצים לחשבון השירות את התפקיד roles/container.clusterViewer.

    gcloud projects add-iam-policy-binding PROJECT_ID \
     --member="serviceAccount:SERVICE_ACCOUNT" \
     --role="roles/container.clusterViewer"
    

    התפקיד הזה מאפשר לחשבון השירות לבצע אימות באשכול, אבל לא מאפשר לו לבצע פעולות אחרות.

  3. יצירת תפקיד RBAC ב-Kubernetes שמעניק גישת אדמין למרחב השמות.

    לתפקיד RBAC בדוגמה הזו יש הרשאות רחבות, ששקולות לתפקיד clouddeploy.developer ב-IAM. כדי לצמצם את הסיכון להרחבת הרשאות, מומלץ לשנות את ההרשאות האלה להרשאות המינימליות שנדרשות לאפליקציות שלכם. הוראות מפורטות זמינות במסמכי התיעוד בנושא RBAC ל-GKE.

    kind: Role
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: admin
      namespace: NAMESPACE
    rules:
    - apiGroups: ["", "extensions", "apps"]
      resources: ["*"]
      verbs: ["*"]
    
  4. יוצרים RoleBinding שמאגד את תפקיד ה-RBAC במרחב השמות שבחרתם לחשבון השירות של שירות הביצוע של Cloud Deploy:

    kind: RoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: admin
      namespace: NAMESPACE
    subjects:
    # Google Cloud user account
    - kind: User
      name: SERVICE_ACCOUNT
    roleRef:
      kind: Role
      name: admin
      apiGroup: rbac.authorization.k8s.io
    

    קובץ המניפסט הזה מגדיר קישור של מדיניות RBAC לתפקיד admin בחשבון השירות של ההרצה. ‫NAMESPACE הוא מרחב השמות שרוצים להעניק לחשבון השירות גישה אליו. לחשבון השירות אין גישה למרחבי שמות אחרים באשכול.

  5. מחילים את מניפסט ה-RBAC על האשכול:

    kubectl apply -f YAML_NAME