תפקידים וזהויות בניהול זהויות והרשאות גישה (IAM) ב-Google Kubernetes Engine

זהות במישור הנתונים

‫Managed Service for Apache Spark on GKE משתמש ב-GKE workload identity כדי לאפשר ל-Pods באשכול Managed Service for Apache Spark on GKE לפעול עם ההרשאה של חשבון השירות של מכונת ה-VM שמוגדר כברירת מחדל ב-Managed Service for Apache Spark (זהות מישור הנתונים).

כדי לעדכן את מדיניות ה-IAM בחשבון השירות של Google שמשמש את האשכול הווירטואלי של Managed Service for Apache Spark ב-GKE, נדרשות ההרשאות הבאות ל-Workload Identity:

  • compute.projects.get
  • iam.serviceAccounts.getIamPolicy
  • iam.serviceAccounts.setIamPolicy

‫Workload Identity ב-GKE מקשר בין חשבונות השירות הבאים של GKE‏ (KSA) לבין חשבון השירות של המכונה הווירטואלית של Managed Service for Apache Spark:‏

  1. agent ערב הסעודית (אינטראקציה עם מישור הבקרה של Managed Service for Apache Spark):
    serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/agent]
  2. ‫spark-driver KSA (מריץ מנהלי התקנים של Spark):
    serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/spark-driver]
  3. ‫spark-executor KSA (runs Spark executors):
    serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/spark-executor]

הקצאת תפקידים

נותנים הרשאות לחשבון השירות של המכונה הווירטואלית של השירות המנוהל ל-Apache Spark כדי לאפשר ל-spark-driver ול-spark-executor לגשת למשאבי הפרויקט, למקורות נתונים, ליעדי נתונים ולכל שירות אחר שנדרש לעומס העבודה.

דוגמה:

הפקודה הבאה מקצה תפקידים לחשבון השירות שמוגדר כברירת מחדל למכונות וירטואליות של Managed Service for Apache Spark, כדי שעומסי עבודה של Spark שפועלים ב-Managed Service for Apache Spark במכונות וירטואליות באשכול GKE יוכלו לגשת לקטגוריות של Cloud Storage ולמערכי נתונים של BigQuery בפרויקט.

gcloud projects add-iam-policy-binding \
    --role=roles/storage.objectAdmin \
    --role=roles/bigquery.dataEditor \
    --member="project-number-compute@developer.gserviceaccount.com" \
    "${PROJECT}"

הגדרת IAM בהתאמה אישית

ב-Managed Service for Apache Spark ב-GKE, משתמשים ב-Workload Identity ב-GKE כדי לקשר את חשבון השירות של מכונות וירטואליות ב-Managed Service for Apache Spark (זהות במישור הנתונים) לשלושת חשבונות השירות של GKE‏ (KSA).

כדי ליצור חשבון שירות אחר ב-Google ‏ (GSA) ולהשתמש בו לקישור ל-KSA:

  1. יוצרים את חשבון השירות (ראו יצירה וניהול של חשבונות שירות).

    דוגמה ל-CLI של gcloud:

    gcloud iam service-accounts create "dataproc-${USER}" \
        --description "Used by Managed Service for Apache Spark on GKE workloads."
    
    הערות:

    • בדוגמה, שם ה-GSA מוגדר כ-dataproc-${USER}, אבל אפשר להשתמש בשם אחר.
  2. מגדירים משתני סביבה:

    PROJECT=project-id \
      DPGKE_GSA="dataproc-${USER}@${PROJECT}.iam.gserviceaccount.com"
      DPGKE_NAMESPACE=GKE namespace
    
    הערות:

    • ‫DPGKE_GSA: בדוגמאות, המשתנה שמכיל את כתובת האימייל של חשבון השירות ב-Google מוגדר בשם DPGKE_GSA. אפשר להגדיר ולהשתמש בשם משתנה אחר.
    • ‫DPGKE_NAMESPACE: מרחב השמות שמוגדר כברירת מחדל ב-GKE הוא השם של אשכול Managed Service for Apache Spark ב-GKE.
  3. כשיוצרים את Managed Service for Apache Spark באשכול GKE, מוסיפים את המאפיינים הבאים כדי ש-Managed Service for Apache Spark ישתמש ב-GSA במקום ב-GSA שמוגדר כברירת מחדל:

    --properties "dataproc:dataproc.gke.agent.google-service-account=${DPGKE_GSA}" \
    --properties "dataproc:dataproc.gke.nodepool.google-service-account=${DPGKE_GSA}" \
    --properties "dataproc:dataproc.gke.spark.driver.google-service-account=${DPGKE_GSA}" \
    --properties "dataproc:dataproc.gke.spark.executor.google-service-account=${DPGKE_GSA}" \
    

  4. מריצים את הפקודות הבאות כדי להקצות את ההרשאות הנדרשות של Workload Identity לחשבונות השירות:

    1. מקצים ל-GSA את התפקיד dataproc.worker כדי לאפשר לו לפעול כסוכן:
      gcloud projects add-iam-policy-binding \
          --role=roles/dataproc.worker \
          --member="serviceAccount:${DPGKE_GSA}" \
          "${PROJECT}"
      
    2. מקצים ל-KSA של agent את התפקיד iam.workloadIdentityUser כדי לאפשר לו לפעול בתור GSA:

      gcloud iam service-accounts add-iam-policy-binding \
          --role=roles/iam.workloadIdentityUser \
          --member="serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/agent]" \
          "${DPGKE_GSA}"
      

    3. מקצים ל-KSA של spark-driver את התפקיד iam.workloadIdentityUser כדי לאפשר לו לפעול בתור GSA:

      gcloud iam service-accounts add-iam-policy-binding \
          --role=roles/iam.workloadIdentityUser \
          --member="serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/spark-driver]" \
          "${DPGKE_GSA}"
      

    4. נותנים ל-spark-executor בערב הסעודית את התפקיד iam.workloadIdentityUser כדי לאפשר לו לפעול כסוכן המכירות שלכם ב-Google:

      gcloud iam service-accounts add-iam-policy-binding \
          --role=roles/iam.workloadIdentityUser \
          --member="serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/spark-executor]" \
          "${DPGKE_GSA}"