חשבונות שירות ב-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
- פעולות בסיסיות של צומת Resource Manager ב-Managed Service for Apache Spark, כמו
get,heartbeatו-mintOAuthToken
הצגה וניהול של תפקידים בחשבונות שירות של IAM
כדי לראות ולנהל את התפקידים שהוקצו לחשבון השירות של הסשן או של עומס העבודה באצווה:
נכנסים לדף IAM במסוף Google Cloud .
לוחצים על Include Google-provided role grants.
בודקים את התפקידים שמופיעים ברשימה של עומס העבודה ב-Batch, של ברירת המחדל של הסשן או של חשבון השירות המוגדר כברירת מחדל או בהתאמה אישית.
בתמונה הבאה מוצג התפקיד הנדרש 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.
בפרויקט של חשבון השירות:
מפעילים את Managed Service for Apache Spark API, אם הוא עדיין לא מופעל.
התפקידים שנדרשים כדי להפעיל ממשקי API
כדי להפעיל ממשקי API, צריך את ההרשאה
serviceusage.services.enable. אם אתם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד "בעלים" (roles/owner). אחרת, אתם יכולים לקבל את ההרשאה הזו דרך התפקיד "אדמין בממשק 'שימוש בשירות'" (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים?מקצים לחשבון האימייל שלכם (המשתמש שיוצר את האשכול) את התפקיד משתמש בחשבון שירות בפרויקט של חשבון השירות, או בחשבון השירות עצמו בפרויקט של חשבון השירות (כדי לקבל שליטה מדויקת יותר).
למידע נוסף, קראו את המאמרים ניהול הגישה לפרויקטים, לתיקיות ולארגונים כדי להקצות תפקידים ברמת הפרויקט, וניהול הגישה לחשבונות שירות כדי להקצות תפקידים ברמת חשבון השירות.
דוגמאות ל-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.
-
מקצים לחשבון השירות את התפקיד Managed Service for Apache Spark Worker בפרויקט של ה-Batch.
דוגמה ל-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"
בפרויקט של Batch:
מקצים לחשבון השירות של סוכן השירות של Managed Service for Apache Spark את התפקידים משתמש בחשבון שירות ויצירת אסימונים בחשבון שירות בפרויקט של חשבון השירות, או בחשבון השירות בפרויקט של חשבון השירות כדי לקבל שליטה ברמה יותר מפורטת. כך אתם מאפשרים לחשבון השירות של סוכן השירות של Managed Service for Apache Spark בפרויקט של Batch ליצור אסימונים לחשבון השירות בפרויקט של חשבון השירות.
למידע נוסף, קראו את המאמרים ניהול הגישה לפרויקטים, לתיקיות ולארגונים כדי להקצות תפקידים ברמת הפרויקט, וניהול הגישה לחשבונות שירות כדי להקצות תפקידים ברמת חשבון השירות.
דוגמאות ל-CLI של gcloud:
הפקודות הבאות מקצות לחשבון השירות של סוכן השירות של Managed Service for Apache Spark בפרויקט של Batch את התפקידים "משתמש בחשבון שירות" ו"יצירת אסימונים בחשבון שירות" ברמת הפרויקט:
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"
מקצים לחשבון השירות של סוכן השירות של 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 .
כדי לבדוק ולעדכן את ההרשאות של חשבון השירות:
- נכנסים לדף IAM & Admin > IAM במסוף Google Cloud .
- מאתרים את חשבון השירות שמשמש לעומסי העבודה או לסשנים של האצווה.
- מוודאים שהתפקידים הנדרשים הוקצו. אם לא, מוסיפים אותם.
רשימת ההרשאות והתפקידים של Managed Service for Apache Spark מופיעה במאמר הרשאות ותפקידי IAM ב-Managed Service for Apache Spark.