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

בדף הזה מוסבר איך לחקור ולפתור בעיות שקשורות להרשאות ב-Dataflow.

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

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

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

כדי לפתור בעיות שקשורות להרשאות, צריך להבין איזו הרשאה חסרה ובאיזה חשבון היא צריכה להיות. כדי להבין איזו הרשאה חסרה, צריך לעיין בהרשאה שמופיעה בהודעת השגיאה ולמצוא את התפקיד שכולל את ההרשאה הזו. לרוב, אבל לא תמיד, צריך להקצות את התפקיד הרלוונטי לחשבון השירות של העובד (worker) ב-Dataflow.

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

למשתמש אין הרשאת כתיבה לפרויקט

כשמנסים להריץ משימת Dataflow, המשימה נכשלת ומוצגת שגיאה דומה לזו שבהמשך:

PERMISSION_DENIED: (Could not create workflow; user does not have write access to project: $PROJECT_ID Causes: (...): Permission 'dataflow.jobs.create' denied on project: '$PROJECT_ID'

השגיאה הזו מתרחשת אם לחשבון המשתמש שלכם אין את התפקיד roles/dataflow.developer.

כדי לפתור את הבעיה, צריך להקצות לחשבון המשתמש את התפקיד roles/dataflow.developer. בנוסף, חשוב לוודא שלחשבון המשתמש שלכם יש את התפקיד roles/iam.serviceAccountUser. מידע נוסף זמין במאמר הקצאת תפקיד יחיד במאמרי העזרה בנושא ניהול זהויות והרשאות גישה.

למשתמש אין הרשאות מספיקות בפרויקט

כשמנסים לבטל עבודת Dataflow, מופיעה שגיאה בדומה לזו:

Could not cancel workflow; user does not have sufficient permissions on project:PROJECT_ID, or the job does not exist in the project. Causes: (...): Permission 'dataflow.jobs.cancel' denied on project: 'PROJECT_ID' Please ensure you have permission to access the job

שגיאות דומות עשויות להתרחש כשמנסים לנקז או לעדכן עבודה.

השגיאה הזו מתרחשת בגלל אחת מהסיבות הבאות:

  • לחשבון המשתמש שלכם אין את התפקיד roles/dataflow.developer. כדי לפתור את הבעיה, צריך להקצות לחשבון המשתמש את התפקיד roles/dataflow.developer. בנוסף, חשוב לוודא שלחשבון המשתמש שלכם יש את התפקיד roles/iam.serviceAccountUser. מידע נוסף זמין במאמר הקצאת תפקיד יחיד במאמרי העזרה בנושא ניהול זהויות והרשאות גישה.
  • מזהה העבודה שגוי. יכול להיות שיש שגיאת הקלדה, או שאתם משתמשים בשם המשימה כדי לבטל את המשימה במקום במזהה המשימה.

אימות ההרשאות של חשבון השירות של העובד נכשל

כשמנסים להריץ עבודת Dataflow, מופיעה שגיאה דומה לזו שמופיעה בהמשך:

Workflow failed. Causes: Permissions verification for controller service account failed. All permissions in IAM role roles/dataflow.worker should be granted to controller service account PROJECT_NUMBER-compute@developer.gserviceaccount.com.

השגיאה הזו מתרחשת כשאין לחשבון השירות של העובד את התפקיד roles/dataflow.worker.

כדי לפתור את הבעיה הזו, צריך להעניק לחשבון השירות של העובד את התפקיד roles/dataflow.worker. מידע נוסף זמין במאמר הקצאת תפקיד יחיד במאמרי העזרה בנושא ניהול זהויות והרשאות גישה.

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

כשמריצים עבודת Dataflow, מופיעה הודעת אזהרה ביומן שדומה להודעה הבאה:

Failed to check Controller service account permissions in project PROJECT_ID.

האזהרה הזו מופיעה כששירות Dataflow לא מצליח לאמת את ההרשאות של חשבון שירות של עובד (שנקרא בעבר חשבון שירות של בקר). הסיבה לכך היא לרוב חביון זמני ב-Identity and Access Management (IAM) API או תנודות זמניות ברשת ב-VPC Service Controls.

מכיוון שמדובר באזהרה ולא בשגיאה, זה לא בהכרח אומר שההרשאות חסרות או שהעבודה תיכשל. אם המשימה פועלת בהצלחה ולחשבון השירות של העובד יש את התפקיד roles/dataflow.worker, לא צריך לבצע פעולה מיידית.

כדי לפתור את הבעיה הזו, צריך לוודא שלחשבון השירות של העובד (PROJECT_NUMBER-compute@developer.gserviceaccount.com) יש את התפקיד roles/dataflow.worker. אם האזהרה הזו מופיעה שוב ושוב או אם יש גם כשלים בעבודות, כדאי לבדוק את הזמינות של Identity and Access Management API או בעיות ב-VPC Service Controls בפרויקט.

אימות צינור נכשל

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

אם בדיקת האימות של צינור העיבוד מזהה בעיות בהרשאות, יכול להיות שתופיע השגיאה הבאה ביומני העבודות:

[The preflight pipeline validation failed for job JOB_ID.] Missing permissions
PERMISSION when accessing RESOURCE_PATH as Dataflow worker service account WORKER_SERVICE_ACCOUNT.

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

לפני שמנסים לשלוח מחדש את עבודת Dataflow, צריך לפתור את בעיות ההרשאות. במקורות המידע הבאים אפשר לקרוא על שינוי תפקידים והרשאות.

אם רוצים לבטל את אימות צינור עיבוד הנתונים ולהפעיל את העבודה עם שגיאות אימות, משתמשים באפשרות הבאה של צינור עיבוד הנתונים:

--experiment=enable_ppv_effect=false

הייתה בעיה ברענון פרטי הכניסה

כשמנסים להריץ עבודת Dataflow, מופיעה שגיאה דומה לזו שמופיעה בהמשך:

Workflow failed. Causes: There was a problem refreshing your credentials.
Please check: 1. The Dataflow API is enabled for your project.
2. Make sure both the Dataflow service account and the controller service account have sufficient permissions.
If you are not specifying a controller service account, ensure the default Compute Engine service account PROJECT_NUMBER-compute@developer.gserviceaccount.com exists and has sufficient permissions.
If you have deleted the default Compute Engine service account, you must specify a controller service account

השגיאה הזו מתרחשת כשחשבון השירות של העובד לא כולל את התפקיד roles/dataflow.worker או כש-Dataflow API לא מופעל.

קודם כל, מוודאים שלחשבון השירות של העובד יש את התפקיד roles/dataflow.worker. אם צריך, מעניקים את roles/dataflow.worker לחשבון השירות של העובד. מידע נוסף זמין במאמר הקצאת תפקיד יחיד במאמרי העזרה בנושא ניהול זהויות והרשאות גישה.

הוראות להפעלת Dataflow API מופיעות במאמר בנושא הפעלת API בפרויקט. Google Cloud

נדרשת הרשאה מסוג compute.subnetworks.get

כשמנסים להריץ עבודת Dataflow ברשת Shared VPC, מופיעה שגיאה שדומה לאחת מהשגיאות הבאות:

Required 'compute.subnetworks.get' permission for 'projects/project-id/regions/region/subnetworks/subnet-name' HTTP Code: 403
Required 'compute.subnetworks.use' permission for 'projects/project-id/regions/region/subnetworks/subnet-name' HTTP Code: 403

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

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

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

חשבון השירות של Dataflow פועל לפי תבנית השמות הבאה: service-PROJECT_NUMBER@dataflow-service-producer-prod.iam.gserviceaccount.com.

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

ל-Dataflow runner אין גישה לדלי

כשמנסים להציג רשימה של אובייקטים בקטגוריה של Cloud Storage, עבודת Dataflow נכשלת ומוצגת שגיאה שדומה לזו:

"dataflow-runner@project-id.iam.gserviceaccount.com" does not have `storage.objects.list` access to the Google Cloud Storage Bucket

השגיאה הזו מתרחשת כשחשבון השירות של העובד לא מקבל את התפקיד roles/storage.objectViewer.

כדי לפתור את הבעיה, צריך להעניק לחשבון המשתמש את התפקיד roles/storage.objectViewer. מידע נוסף זמין במאמר הקצאת תפקיד יחיד במרכז העזרה בנושא ניהול זהויות והרשאות גישה (IAM).

הגישה למשאב מפתח Cloud KMS נדחתה

כשמשתמשים במפתחות הצפנה בניהול הלקוח ומנסים ליצור משימת Dataflow, המשימה נכשלת ומוצגת שגיאה דומה לזו:

Cloud KMS key permission 'cloudkms.cryptoKeyVersions.useToEncrypt' denied on resource
'projects/project-id/locations/location/keyRings/keyRingName/cryptoKeys/keyname' (or it may not exist). cannot be validated.
Please confirm the full key path is used (starts with projects) and that there are no typos.

השגיאה הזו מתרחשת כשחשבון השירות של העובד וחשבון השירות של Dataflow לא מקבלים את roles/cloudkms.cryptoKeyEncrypterDecrypter התפקיד.

כדי לפתור את הבעיה, צריך להעניק את התפקיד roles/cloudkms.cryptoKeyEncrypterDecrypter לחשבון השירות של העובד ולחשבון השירות של Dataflow. מידע נוסף מופיע במאמר בנושא הענקת הרשאות הצפנה/פענוח בדף בנושא שימוש במפתחות הצפנה בניהול הלקוח.

ההרשאה נדחתה במשאב

כשמנסים ליצור צינור, הוא נכשל ומופיעה השגיאה הבאה:

Permission 'datapipelines.pipelines.create' denied on resource '//datapipelines.googleapis.com/projects/PROJECT_ID/locations/REGION' (or it may not exist).

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

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

  • roles/dataflow.admin
  • roles/dataflow.worker

מידע נוסף זמין במאמר חשבון שירות של Worker בקטע 'אבטחה והרשאות ב-Dataflow'.

תהליך העבודה נכשל

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

Workflow failed

השגיאה הזו יכולה להתרחש מהסיבות הבאות:

  • המפתח ועבודת Dataflow לא נמצאים באותו אזור, או שנעשה שימוש במפתח רב-אזורי. אין תמיכה במפתחות גלובליים ובמפתחות מרובי-אזורים. האזור של ה-CMEK והאזור של עבודת Dataflow חייבים להיות זהים.
  • שם המפתח לא צוין בצורה נכונה. יכול להיות שהמפתח לא קיים או שיש שגיאת הקלדה בשם.

מפתח Cloud KMS לא יכול להגן על משאבים בעבודה הזו

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

Cloud KMS key can't protect resources for this job. Please make sure the KMS key's region matches the Dataflow region

השגיאה הזו יכולה להתרחש מהסיבות הבאות:

  • המפתח ועבודת Dataflow לא נמצאים באותו אזור, או שנעשה שימוש במפתח רב-אזורי. אין תמיכה במפתחות גלובליים ובמפתחות מרובי-אזורים. האזור של ה-CMEK והאזור של עבודת Dataflow חייבים להיות זהים.
  • הפרמטר dataflowKMSKey לא צוין בצורה נכונה.

המידרוג האוטומטי האנכי לא פועל

כשמשתמשים בשינוי גודל אוטומטי אנכי, המשימה לא משנה את הגודל שלה באופן אוטומטי בצורה אנכית, והשגיאה הבאה מופיעה ביומני המשימות:

{"level":"error","ts":1708815877.1246133,"caller":"exporter/exporter.go:232","msg":"failed to get response from UAS: %v","error":"rpc error: code = PermissionDenied desc = The caller does not have permission","stacktrace":"google3/autoscaler/vitor/external/go/exporter/exporter.receiver\n\tautoscaler/vitor/external/go/exporter/exporter.go:232"}

השגיאה הזו מתרחשת כשחשבון השירות של העובד לא כולל את התפקיד Dataflow Worker ‏ (roles/dataflow.worker).

כדי לפתור את הבעיה הזו, צריך להעניק לחשבון השירות של העובד את התפקיד roles/dataflow.worker. מידע נוסף זמין במאמר הקצאת תפקיד יחיד במאמרי העזרה בנושא ניהול זהויות והרשאות גישה.

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

  • autoscaling.sites.readRecommendations
  • autoscaling.sites.writeMetrics
  • autoscaling.sites.writeState

אין הרשאה ליצור מינוי למעקב ב-Pub/Sub

כשעבודת Dataflow קוראת מ-Pub/Sub באמצעות חותמות זמן מותאמים אישית של אירועים, השגיאה הבאה מופיעה ביומני העבודה:

Creating watermark tracking pubsub subscription projects/PROJECT_ID/subscriptions/SUBSCRIPTION __df_internal[16 HEX CHARACTERS] to topic projects/PROJECT_ID/topics/TOPIC failed with error: User not authorized to perform this action

אפשר להגדיר את Dataflow כך שיקרא את חותמות הזמן של האירועים ממאפיין בהודעה ב-Pub/Sub. במקרה כזה, Dataflow יוצר מינוי Pub/Sub שני שנקרא מינוי מעקב.

השגיאה הזו מתרחשת כשאין ל-Dataflow הרשאה ליצור את מינוי המעקב. מידע נוסף זמין במאמר בנושא חותמות זמן וסימני מים.