תפקידים וזהויות בניהול זהויות והרשאות גישה (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 (GSA) שמשמש את השירות המנוהל של 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 ערב הסעודית (הפעלת מנהלי התקנים של Spark):
    serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/spark-driver]
  3. ‫spark-executor KSA (מריץ Spark executors):
    serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/spark-executor]

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

נותנים הרשאות לחשבון השירות של המכונה הווירטואלית של Managed Service for 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 on GKE משתמש ב-GKE workload identity כדי לקשר את חשבון השירות של מכונת ה-VM של 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: בדוגמאות מוגדר ומשמש DPGKE_GSA כשם המשתנה שמכיל את כתובת האימייל של ה-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. מקצים את התפקיד iam.workloadIdentityUser KSA agent כדי לאפשר לו לפעול בתור 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. נותנים ל-spark-driver בערב הסעודית את התפקיד iam.workloadIdentityUser כדי לאפשר לו לפעול כסוכן המכירות שלכם ב-Google:

      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}"