חשבונות שירות של Managed Service for Apache Spark

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

חשבונות שירות בסביבת זמן ריצה לפני גרסה 3.0

בגרסאות של סביבת זמן הריצה של Spark שקודמות ל-3.0, עם פרטי כניסה לחשבון שירות, נעשה שימוש בחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine או בחשבון שירות בהתאמה אישית שצוין על ידי המשתמש כדי לשלוח עומס עבודה באצווה או ליצור סשן אינטראקטיבי.

חשבונות שירות בסביבת זמן ריצה בגרסה 3.0 ומעלה

בגרסאות 3.0 ואילך של סביבת זמן הריצה של Spark, עם פרטי כניסה לחשבון שירות, נעשה שימוש בחשבון שירות בהתאמה אישית שצוין על ידי המשתמש כדי לשלוח עומס עבודה באצווה או ליצור סשן אינטראקטיבי.

בזמן הריצה של Managed Service for Apache Spark בגרסה 3.0 ואילך, נוצר חשבון השירות Dataproc Resource Manager Node Service Agent,‏ service-project-number@gcp-sa-dataprocrmnode.iam.gserviceaccount.com, עם התפקיד Dataproc Resource Manager Node Service Agent בפרויקט Google Cloud של המשתמש ב-Managed Service for Apache Spark. חשבון השירות הזה מבצע את פעולות המערכת הבאות במשאבים של Managed Service for Apache Spark שנמצאים בפרויקט שבו נוצר עומס העבודה:

  • ‫Cloud Logging ו-Cloud Monitoring
  • פעולות בסיסיות בצומת של Managed Service for Apache Spark Resource Manager, כמו get,‏ heartbeat ו-mintOAuthToken

הצגה וניהול של תפקידים בחשבונות שירות של IAM

כדי לראות ולנהל את התפקידים שהוקצו לחשבון השירות של הסשן או של עומס העבודה באצווה:

  1. נכנסים לדף IAM במסוף Google Cloud .

    כניסה לדף "ניהול זהויות והרשאות גישה (IAM)"'

  2. לוחצים על Include Google-provided role grants.

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

    בתמונה הבאה מוצג התפקיד הנדרש Managed Service for Apache Spark Worker שמופיע בחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine,‏ project_number-compute@developer.gserviceaccount.com, שבו Managed Service for Apache Spark משתמש כברירת מחדל כחשבון השירות של עומס העבודה או הסשן.

    התפקיד Dataproc Worker לחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine במסוף IAM
    התפקיד Managed Service for Apache Spark Worker שהוקצה לחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine, בקטע IAM במסוף Google Cloud .
  4. כדי להקצות או להסיר תפקידים של חשבון שירות, לוחצים על סמל העיפרון שמוצג בשורה של חשבון השירות.

איך משתמשים בחשבון שירות בפרויקטים שונים

אתם יכולים לשלוח עומס עבודה של Batch שמשתמש בחשבון שירות מפרויקט שונה מהפרויקט של עומס העבודה של Batch (הפרויקט שבו נשלח ה-Batch). בקטע הזה, הפרויקט שבו נמצא חשבון השירות נקרא service account project, והפרויקט שבו נשלחת המשימה נקרא batch project.

למה כדאי להשתמש בחשבון שירות בפרויקטים שונים כדי להריץ עומס עבודה באצווה? סיבה אפשרית אחת היא אם לחשבון השירות בפרויקט השני הוקצו תפקידי IAM שמספקים גישה מפורטת למשאבים באותו פרויקט.

שלבי ההגדרה

הדוגמאות בקטע הזה רלוונטיות לשליחת עומס עבודה באצווה שמופעל עם גרסת זמן ריצה שקודמת ל-3.0.

  1. בפרויקט של חשבון השירות:

    1. הפעלה של צירוף חשבונות שירות בין פרויקטים.

    2. מפעילים את Managed Service for Apache Spark API, אם הוא עדיין לא מופעל.

      התפקידים שנדרשים כדי להפעיל ממשקי API

      כדי להפעיל ממשקי API, צריך את ההרשאה serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד "בעלים" (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד "אדמין בממשק 'שימוש בשירות'" (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים

      להפעלת ה-API

    3. מקצים לחשבון האימייל שלכם (המשתמש שיוצר את האשכול) את התפקיד משתמש בחשבון שירות בפרויקט של חשבון השירות, או בחשבון השירות עצמו בפרויקט של חשבון השירות (כדי לקבל שליטה מדויקת יותר).

      למידע נוסף, קראו את המאמרים ניהול הגישה לפרויקטים, לתיקיות ולארגונים כדי להקצות תפקידים ברמת הפרויקט, וניהול הגישה לחשבונות שירות כדי להקצות תפקידים ברמת חשבון השירות.

      דוגמאות ל-CLI של gcloud:

      הפקודה הבאה לדוגמה מקצה למשתמש את התפקיד "משתמש בחשבון שירות" ברמת הפרויקט:

      gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
          --member=USER_EMAIL \
          --role="roles/iam.serviceAccountUser"
      

      הערות:

      • ‫USER_EMAIL: כתובת האימייל של חשבון המשתמש, בפורמט: user:user-name@example.com.

      הפקודה הבאה לדוגמה מקצה למשתמש את התפקיד "משתמש בחשבון שירות" ברמת חשבון השירות:

      gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \
          --member=USER_EMAIL \
          --role="roles/iam.serviceAccountUser"
      

      הערות:

      • ‫USER_EMAIL: כתובת האימייל של חשבון המשתמש, בפורמט: user:user-name@example.com.
    4. מקצים לחשבון השירות את התפקיד Managed Service for Apache Spark Worker בפרויקט של המשימה באצווה.

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

      gcloud projects add-iam-policy-binding BATCH_PROJECT_ID \
          --member=serviceAccount:SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \
          --role="roles/dataproc.worker"
      
  2. בפרויקט של Batch:

    1. מקצים לחשבון השירות של סוכן השירות של Managed Service for Apache Spark את התפקידים משתמש בחשבון שירות ויצירת אסימונים בחשבון שירות בפרויקט של חשבון השירות, או בחשבון השירות בפרויקט של חשבון השירות כדי לקבל שליטה ברמה יותר מפורטת. כך אתם מאפשרים לחשבון השירות של סוכן השירות של Managed Service for Apache Spark בפרויקט של Batch ליצור אסימונים לחשבון השירות בפרויקט של חשבון השירות.

      למידע נוסף, קראו את המאמרים ניהול הגישה לפרויקטים, לתיקיות ולארגונים כדי להקצות תפקידים ברמת הפרויקט, וניהול הגישה לחשבונות שירות כדי להקצות תפקידים ברמת חשבון השירות.

      דוגמאות ל-CLI של gcloud:

      הפקודות הבאות מקצות לחשבון השירות של סוכן השירות של Managed Service for Apache Spark בפרויקט האצווה את התפקידים "משתמש בחשבון שירות" ו"יצירת אסימונים בחשבון שירות" ברמת הפרויקט:

      gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
          --member=serviceAccount:service-BATCH_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
          --role="roles/iam.serviceAccountUser"
      
      gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
          --member=serviceAccount:service-BATCH_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
          --role="roles/iam.serviceAccountTokenCreator"
      

      הפקודות לדוגמה הבאות מעניקות לחשבון השירות של סוכן השירות של Managed Service for Apache Spark בפרויקט האצווה את התפקידים "משתמש בחשבון שירות" ו"יצירת אסימונים בחשבון שירות" ברמת חשבון השירות:

      gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \
          --member=serviceAccount:service-BATCH_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
          --role="roles/iam.serviceAccountUser"
      
      gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \
          --member=serviceAccount:service-BATCH_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
          --role="roles/iam.serviceAccountTokenCreator"
      
    2. מקצים לחשבון השירות של סוכן השירות של Compute Engine בפרויקט של Batch את התפקיד יצירת אסימונים בחשבון שירות בפרויקט של חשבון השירות, או בחשבון השירות בפרויקט של חשבון השירות (כדי לקבל שליטה ברזולוציה גבוהה יותר). כך אתם נותנים לחשבון השירות של סוכן השירות של Compute Agent בפרויקט של Batch את היכולת ליצור אסימונים לחשבון השירות בפרויקט של חשבון השירות.

      למידע נוסף, קראו את המאמרים ניהול הגישה לפרויקטים, לתיקיות ולארגונים כדי להקצות תפקידים ברמת הפרויקט, וניהול הגישה לחשבונות שירות כדי להקצות תפקידים ברמת חשבון השירות.

      דוגמאות ל-CLI של gcloud:

      הפקודה הבאה לדוגמה מקצה לחשבון השירות של סוכן השירות של Compute Engine בפרויקט של Batch את התפקיד "יצירת אסימונים בחשבון שירות" ברמת הפרויקט:

      gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
          --member=serviceAccount:service-BATCH_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \
          --role="roles/iam.serviceAccountTokenCreator"
      

      הפקודה לדוגמה הבאה מקצה לחשבון השירות של סוכן השירות של Compute Engine בפרויקט של האשכול את התפקיד "יצירת אסימונים בחשבון שירות" ברמת חשבון השירות:

      gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \
          --member=serviceAccount:service-BATCH_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \
          --role="roles/iam.serviceAccountTokenCreator"
      

שליחת עומס העבודה של Batch

אחרי שמסיימים את שלבי ההגדרה, אפשר לשלוח עומס עבודה באצווה. חשוב לציין את חשבון השירות בפרויקט של חשבון השירות בתור חשבון השירות שבו משתמשים לעומס העבודה באצווה.

פתרון בעיות שקשורות להרשאות

אם לחשבון השירות שמשמש את עומס העבודה או הסשן של ה-Batch אין הרשאות מתאימות, יכול להיות שהיצירה של ה-Batch או הסשן תיכשל ותופיע הודעת השגיאה "Driver compute node failed to initialize for batch in 600 seconds". השגיאה הזו מציינת שמנהל ההתקן של Spark לא הצליח להתחיל בתוך פרק הזמן שהוקצב, בדרך כלל בגלל חוסר גישה למשאבי Google Cloud .

כדי לפתור את הבעיה, ודאו שלחשבון השירות יש את התפקידים או ההרשאות המינימליים הבאים:

  • התפקיד Managed Service for Apache Spark Worker‏ (roles/dataproc.worker): התפקיד הזה נותן את ההרשאות שנדרשות ל-Managed Service for Apache Spark כדי לנהל ולהריץ סשנים ועומסי עבודה של Spark.
  • צפייה באובייקטים באחסון (roles/storage.objectViewer), יצירת אובייקטים באחסון (roles/storage.objectCreator) או אדמין של אובייקטים באחסון (roles/storage.admin): אם אפליקציית Spark קוראת מקטגוריות של Cloud Storage או כותבת אליהן, חשבון השירות צריך הרשאות מתאימות כדי לגשת לקטגוריות. לדוגמה, אם נתוני הקלט נמצאים בקטגוריה של Cloud Storage, צריך את ההרשאה Storage Object Viewer. אם האפליקציה כותבת פלט לקטגוריה של Cloud Storage, צריך את התפקיד Storage Object Creator או Storage Object Admin.
  • עריכת נתונים ב-BigQuery ‏ (roles/bigquery.dataEditor) או צפייה בנתונים ב-BigQuery ‏ (roles/bigquery.dataViewer): אם אפליקציית Spark מקיימת אינטראקציה עם BigQuery, צריך לוודא שלחשבון השירות יש את התפקידים המתאימים ב-BigQuery.
  • הרשאות ב-Cloud Logging: כדי לבצע ניפוי באגים בצורה יעילה, חשבון השירות צריך הרשאות לכתיבת יומנים ב-Logging. בדרך כלל מספיק התפקיד Logging Writer (roles/logging.logWriter).
  • חסר התפקיד dataproc.worker: בלי תפקיד הליבה הזה, התשתית של Managed Service for Apache Spark לא יכולה להקצות ולנהל כמו שצריך את צומת הדרייבר.

  • הרשאות לא מספיקות ב-Cloud Storage: אם אפליקציית Spark מנסה לקרוא נתוני קלט מקטגוריה של Cloud Storage או לכתוב פלט לקטגוריה כזו בלי הרשאות מתאימות של חשבון השירות, יכול להיות שהמנהל לא יצליח לבצע אתחול כי אין לו גישה למשאבים קריטיים.

  • בעיות ברשת או בחומת האש: יכול להיות ש-VPC Service Controls או כללי חומת האש חוסמים בטעות את הגישה של חשבון השירות לממשקי ה-API או למשאבים של Google Cloud .

כדי לבדוק ולעדכן את ההרשאות של חשבון השירות:

  1. נכנסים לדף IAM & Admin > IAM במסוף Google Cloud .
  2. מאתרים את חשבון השירות שמשמש לעומסי העבודה או לסשנים של האצווה.
  3. מוודאים שהתפקידים הנדרשים הוקצו. אם לא, מוסיפים אותם.

במאמר הרשאות ותפקידי IAM ב-Managed Service for Apache Spark מפורטת רשימה של ההרשאות והתפקידים ב-Managed Service for Apache Spark.