עומסי עבודה של אצווה וסשנים אינטראקטיביים של Managed Service for Apache Spark פועלים עם פרטי כניסה של משתמש קצה או של חשבון שירות. כשמשתמשים בפרטי כניסה של חשבון שירות, חשבון השירות שמשמש להפעלת עומסי עבודה של אצווה או סשנים אינטראקטיביים תלוי בגרסת זמן הריצה של האצווה או הסשן.
חשבונות שירות של סביבת ריצה מגרסה 2.x ומטה
בגרסאות של Spark runtime שקודמות לגרסה 3.0 עם פרטי כניסה לחשבון שירות, נעשה שימוש בחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine או בחשבון שירות מותאם אישית שצוין על ידי המשתמש כדי לשלוח עומס עבודה של אצווה או ליצור סשן אינטראקטיבי.
חשבונות שירות של זמן ריצה בגרסה 3.0 ואילך
גרסאות Spark runtime 3.0 ואילך עם פרטי כניסה של חשבון שירות משתמשות בחשבון שירות מותאם אישית שצוין על ידי המשתמש כדי לשלוח עומס עבודה של אצווה או ליצור סשן אינטראקטיבי.
סביבות ריצה של Managed Service for Apache Spark מגרסה 3.0 ואילך יוצרות את חשבון השירות סוכן השירות של צומת מנהל המשאבים של Dataproc, service-project-number@gcp-sa-dataprocrmnode.iam.gserviceaccount.com, עם התפקיד סוכן השירות של צומת מנהל המשאבים של Dataproc בפרויקט של משתמש ב-Managed Service for Apache Spark Google Cloud . חשבון השירות הזה מבצע את פעולות המערכת הבאות במשאבים של Managed Service for Apache Spark שנמצאים בפרויקט שבו נוצר עומס עבודה:
- Cloud Logging ו-Cloud Monitoring
- פעולות בסיסיות של צומת מנהל המשאבים ב-Managed Service for Apache Spark, כמו
get,heartbeatו-mintOAuthToken
הצגה וניהול של תפקידים בחשבון שירות של IAM
כדי לראות ולנהל את התפקידים שהוקצו לחשבון השירות של עומס העבודה או של הסשן:
נכנסים לדף IAM במסוף Google Cloud .
לוחצים על Include Google-provided role grants (הכללת תפקידים שהוענקו על ידי Google).
צפייה בתפקידים שמופיעים עבור עומס העבודה של אצווה או עבור חשבון שירות שמוגדר כברירת מחדל או בהתאמה אישית עבור סשן.
בתמונה הבאה מוצג התפקיד הנדרש Managed Service for Apache Spark Worker שמופיע בחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine,
project_number-compute@developer.gserviceaccount.com, ש-Managed Service for Apache Spark משתמש בו כברירת מחדל כחשבון השירות של עומס העבודה או הסשן.
התפקיד Managed Service for Apache Spark Worker שהוקצה לחשבון השירות של Compute Engine שמוגדר כברירת מחדל בקטע IAM במסוף Google Cloud . כדי להעניק או להסיר תפקידים בחשבון שירות, לוחצים על סמל העיפרון שמוצג בשורה של חשבון השירות.
איך משתמשים בחשבון שירות חוצה-פרויקטים
אפשר לשלוח עומס עבודה של אצווה שמשתמש בחשבון שירות מפרויקט ששונה מפרויקט עומס העבודה של האצווה (הפרויקט שבו נשלחת האצווה). בקטע הזה, הפרויקט שבו נמצא חשבון השירות נקרא service account project, והפרויקט שבו מוגשת קבוצת הפעולות נקרא batch project.
למה כדאי להשתמש בחשבון שירות חוצה-פרויקטים כדי להפעיל עומס עבודה של אצווה? אחת הסיבות האפשריות היא שאולי הוקצו לחשבון השירות בפרויקט השני תפקידים של IAM שמעניקים גישה מפורטת למשאבים בפרויקט הזה.
שלבי ההגדרה
הדוגמאות בקטע הזה רלוונטיות לשליחת עומס עבודה של אצווה
שמופעל עם גרסת זמן ריצה שקודמת לגרסה 3.0.
בפרויקט של חשבון השירות:
מפעילים את Dataproc API.
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (
roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאהserviceusage.services.enable. איך מקצים תפקידיםנותנים לחשבון האימייל שלכם (המשתמש שיוצר את האשכול) את התפקיד Service Account User בפרויקט של חשבון השירות, או בחשבון השירות בפרויקט של חשבון השירות (אם רוצים שליטה מדויקת יותר).
מידע נוסף על הקצאת תפקידים ברמת הפרויקט זמין במאמר ניהול הגישה לפרויקטים, לתיקיות ולארגונים, ומידע על הקצאת תפקידים ברמת חשבון השירות זמין במאמר ניהול הגישה לחשבונות שירות.
דוגמאות ל-CLI של gcloud:
הפקודה לדוגמה הבאה מעניקה למשתמש את התפקיד Service Account User ברמת הפרויקט:
gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \ --member=USER_EMAIL \ --role="roles/iam.serviceAccountUser"
הערות:
-
USER_EMAIL: צריך לציין את כתובת האימייל בחשבון המשתמש, בפורמט:user:user-name@example.com.
הפקודה לדוגמה הבאה מעניקה למשתמש את התפקיד Service Account User ברמת חשבון השירות:
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.
-
מקצים לחשבון השירות את התפקיד 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"
בפרויקט של האצווה:
מעניקים לחשבון השירות של סוכן השירות Managed Service for Apache Spark את התפקידים Service Account User ו-Service Account Token Creator בפרויקט של חשבון השירות או בחשבון השירות בפרויקט של חשבון השירות, כדי לקבל שליטה מדויקת יותר. כך מאפשרים לחשבון השירות של סוכן השירות Managed Service for Apache Spark בפרויקט של אצווה ליצור אסימונים לחשבון השירות בפרויקט של חשבון השירות.
מידע נוסף על הקצאת תפקידים ברמת הפרויקט זמין במאמר ניהול הגישה לפרויקטים, לתיקיות ולארגונים, ומידע על הקצאת תפקידים ברמת חשבון השירות זמין במאמר ניהול הגישה לחשבונות שירות.
דוגמאות ל-CLI של gcloud:
הפקודות הבאות מעניקות לחשבון השירות של סוכן השירות Managed Service for Apache Spark בפרויקט של אצווה את התפקידים Service Account User ו-Service Account Token Creator ברמת הפרויקט:
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 בפרויקט של אצווה את התפקידים Service Account User ו-Service Account Token Creator ברמת חשבון השירות:
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"
מקצים לחשבון השירות של סוכן השירות של 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"
שליחת עומס העבודה באצווה
אחרי שמסיימים את שלבי ההגדרה, אפשר לשלוח עומס עבודה של אצווה. חשוב לציין את חשבון השירות בפרויקט של חשבון השירות כחשבון השירות שבו יש להשתמש לעומס העבודה של אצווה.
פתרון בעיות שקשורות להרשאות
הרשאות לא נכונות או לא מספיקות לחשבון השירות שבו נעשה שימוש בעומס העבודה או בסשן של אצווה עלולות לגרום לכשלים ביצירת אצווה או סשן, שיוצגו בהם הודעת השגיאה 'לא הייתה אפשרות לאתחל את צומת המחשוב של מנהל ההתקן עבור אצווה תוך 600 שניות'. השגיאה הזו מציינת שמנהל ההתקנים של 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: לחשבון השירות צריכות להיות הרשאות לכתוב יומנים ב-Cloud Logging כדי לבצע ניפוי באגים בצורה יעילה. בדרך כלל התפקיד
Logging Writer(roles/logging.logWriter) מספיק.
כשלים נפוצים שקשורים להרשאות או לגישה
חסר תפקיד
dataproc.worker: בלי תפקיד הליבה הזה, אי אפשר להקצות ולנהל את צומת הדרייבר בתשתית של Managed Service for Apache Spark.הרשאות לא מספיקות ב-Cloud Storage: אם אפליקציית Spark מנסה לקרוא נתוני קלט מקטגוריה של Cloud Storage או לכתוב נתוני פלט לקטגוריה כזו בלי הרשאות חשבון השירות הנדרשות, יכול להיות שהאתחול של מנהל ההתקן ייכשל כי אין לו גישה למשאבים קריטיים.
בעיות ברשת או בחומת האש: כללי חומת אש או VPC Service Controls עלולים לחסום בטעות את הגישה של חשבון שירות לממשקי API או למשאבים של Google Cloud .
כדי לאמת ולעדכן את ההרשאות של חשבון השירות:
- נכנסים לדף IAM & Admin > IAM במסוף Google Cloud .
- מוצאים את חשבון השירות שמשמש לעומסי העבודה או להפעלות של אצווה.
- מוודאים שהתפקידים הנדרשים הוקצו. אם לא, מוסיפים אותם.
רשימת ההרשאות ותפקידי ה-IAM של Managed Service for Apache Spark מופיעה במאמר הרשאות ותפקידי IAM של Managed Service for Apache Spark.