בדף הזה מוסבר איך לבדוק ולפתור בעיות שקשורות להרשאות ב-Dataflow.
כדי להריץ בהצלחה משימות ב-Dataflow, לחשבון המשתמש ולחשבונות השירות של Dataflow צריכה להיות גישה למשאבים הנדרשים. בדף האבטחה וההרשאות של Dataflow, בקטע אבטחה והרשאות לצינורות עיבוד נתונים ב-Google Cloud, מפורטים התפקידים הנדרשים והשלבים להקצאת התפקידים האלה.
בנוסף, כשצינורות עיבוד הנתונים של Apache Beam ניגשים למשאבי Google Cloud , חשבון השירות של ה-worker VM בפרויקט Dataflow צריך גישה למשאבים. בקטע דוגמה להקצאת תפקידים מפורטים התפקידים שחשבון השירות של ה-worker VM עשוי להזדקק להם.
אם חסר תפקיד אחד או יותר שנדרש להרצת משימה, יכול להיות שתופיע שגיאה ביומני המשימות או ביומני ה-worker. במאמר חיפוש מידע על כשלים בצינור עיבוד נתונים מוסבר איך למצוא שגיאות כשמשימה נכשלת.
כדי לפתור בעיות שקשורות להרשאות, צריך להבין איזו הרשאה חסרה ולאיזה חשבון צריך לתת אותה. כדי להבין איזו הרשאה חסרה, צריך לבדוק את ההרשאה שמופיעה בהודעת השגיאה ולמצוא את התפקיד שמכיל את ההרשאה הזו. בדרך כלל, אבל לא תמיד, צריך להקצות את התפקיד הרלוונטי לחשבון השירות של Dataflow worker.
כדי להוסיף הרשאות, לחשבון המשתמש שלכם צריכה להיות הרשאה לניהול הגישה. מידע נוסף זמין במאמרים ניהול הגישה לחשבונות שירות וניהול הגישה למשאבים אחרים.
למשתמש אין הרשאת כתיבה בפרויקט
כשמנסים להריץ משימה ב-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. למידע נוסף, קראו את המאמר הקצאת תפקיד יחיד במרכז העזרה של "ניהול זהויות והרשאות גישה". - מזהה המשימה שגוי. יכול להיות שיש טעות הקלדה, או שאתם משתמשים בשם המשימה כדי לבטל את המשימה במקום במזהה המשימה.
אימות ההרשאות של חשבון השירות של ה-worker VM נכשל
כשמנסים להריץ משימת 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@.
השגיאה הזו מתרחשת כשבחשבון השירות של ה-worker VM אין את התפקיד roles/dataflow.worker.
כדי לפתור את הבעיה, צריך להקצות לחשבון שירות של worker VM את התפקיד roles/dataflow.worker.
למידע נוסף, קראו את המאמר הקצאת תפקיד יחיד במרכז העזרה של "ניהול זהויות והרשאות גישה".
הבדיקה של הרשאות חשבון השירות של הבקר נכשלה
כשמריצים משימת Dataflow, מופיעה הודעת אזהרה ביומן שדומה לזו:
Failed to check Controller service account permissions in project PROJECT_ID.
האזהרה הזו מופיעה כששירות Dataflow לא יכול לאמת את ההרשאות של חשבון השירות של ה-worker VM (שנקרא בעבר "חשבון השירות של הבקר"). בדרך כלל זה קורה בגלל זמן אחזור זמני ב-API של ניהול הזהויות והרשאות הגישה (IAM) או תנודות זמניות ברשת ב-VPC Service Controls.
מכיוון שמדובר באזהרה ולא בשגיאה, זה לא בהכרח אומר שחסרות הרשאות או שהמשימה תיכשל. אם המשימה פועלת בהצלחה ולחשבון השירות של ה-worker VM יש את התפקיד roles/dataflow.worker, אתם לא צריכים לעשות שום דבר.
כדי לפתור את הבעיה, ודאו שלחשבון השירות של ה-worker VM (PROJECT_NUMBER-compute@) יש את התפקיד roles/dataflow.worker.
אם האזהרה הזו מופיעה שוב ושוב או אם יש גם כשלים במשימות, צריך לבדוק את הזמינות של Identity and Access Management API או בעיות ב-VPC Service Controls בפרויקט.
אימות צינור עיבוד הנתונים נכשל
לפני שמתחילים משימה חדשה ב-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, צריך לתקן את בעיות ההרשאות. במקורות המידע הבאים מוסבר איך לשנות תפקידים והרשאות.
אם אתם צריכים למצוא תפקיד שנותן הרשאה ספציפית, עיינו במאמר העזרה בנושא הרשאות IAM.
כדי להקצות תפקיד לחשבון משתמש בפרויקט, קראו את המאמר הקצאת תפקיד ב-IAM באמצעות מסוף Google Cloud .
כדי להוסיף הרשאה שחסרה לפרויקט, אדמינים ב-IAM יכולים להשתמש בפקודה
gcloud projects add-iam-policy-binding:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=PRINCIPAL --role=ROLEכדי להקצות או לשנות תפקידים ספציפיים, קראו את המאמר הקצאה או ביטול של תפקידים.
במאמר חשבון שירות של worker VM בדף האבטחה וההרשאות של Dataflow מפורטים התפקידים וההרשאות הנדרשים לחשבון השירות של worker VM ב-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@ exists and has sufficient permissions.
If you have deleted the default Compute Engine service account, you must specify a controller service account
השגיאה הזו מתקבלת כשחשבון השירות של ה-worker VM לא כולל את התפקיד roles/dataflow.worker או כש-Dataflow API לא מופעל.
קודם כל, מוודאים שלחשבון השירות של ה-worker VM יש את התפקיד roles/dataflow.worker. אם צריך, נותנים את התפקיד roles/dataflow.worker לחשבון השירות של ה-worker VM.
למידע נוסף, קראו את המאמר הקצאת תפקיד יחיד במרכז העזרה של "ניהול זהויות והרשאות גישה".
כדי להפעיל את Dataflow API, קראו את המאמר הפעלת API בפרויקט ב- Google Cloud .
נדרשת ההרשאה compute.subnetworks.get
כשמנסים להריץ משימת Dataflow ברשת 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 בפרויקט השירות יש את התפקידים הבאים:
roles/dataflow.serviceAgent-
roles/compute.networkUserברשת המשנה
השם של חשבון השירות של Dataflow מורכב מהתבנית הבאה: service-PROJECT_NUMBER@dataflow-service-producer-prod..
למידע נוסף, קראו את המאמר הנחיות להגדרת פרמטר של רשת משנה ל-VPC משותף ואת המאמר הקצאת תפקיד יחיד במרכז העזרה של ניהול זהויות והרשאות גישה.
ל-Dataflow runner אין גישה לקטגוריה
כשמנסים להציג רשימה של אובייקטים בקטגוריה של Cloud Storage, המשימה של Dataflow נכשלת ומופיעה הודעת שגיאה דומה לזו:
"dataflow-runner@project-id." does not have `storage.objects.list` access to the Google Cloud Storage Bucket
השגיאה הזו מתרחשת כשבחשבון השירות של ה-worker VM אין את התפקיד roles/storage.objectViewer.
כדי לפתור את הבעיה, צריך להקצות לחשבון המשתמש את התפקיד roles/storage.objectViewer. למידע נוסף, קראו את המאמר הקצאת תפקיד יחיד במרכז העזרה של "ניהול זהויות והרשאות גישה".
אין הרשאה למפתח 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.
השגיאה הזו מתרחשת כשחשבון השירות של ה-worker VM וחשבון השירות של Dataflow לא כוללים את התפקיד roles/cloudkms.cryptoKeyEncrypterDecrypter.
כדי לפתור את הבעיה, צריך להקצות את התפקיד roles/cloudkms.cryptoKeyEncrypterDecrypter לחשבון שירות של worker VM ולחשבון השירות של Dataflow.
מידע נוסף מופיע בקטע הענקת הרשאות הצפנה/פענוח בדף "שימוש במפתחות הצפנה בניהול הלקוח".
ההרשאה נדחתה במשאב
כשמנסים ליצור צינור עיבוד נתונים, הוא נכשל ומופיעה השגיאה הבאה:
Permission 'datapipelines.pipelines.create' denied on resource '//datapipelines.googleapis.com/projects/PROJECT_ID/locations/REGION' (or it may not exist).
השגיאה הזו מתרחשת אם לחשבון השירות של ה-worker VM בפרויקט אין גישה לקבצים ולמשאבים אחרים שמשויכים לצינור עיבוד הנתונים.
כדי לפתור את הבעיה, מקצים את התפקידים הבאים לחשבון השירות של ה-worker VM:
roles/dataflow.adminroles/dataflow.worker
מידע נוסף זמין בקטע חשבון שירות של worker VM במאמר "אבטחה והרשאות ב-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לא צוין בצורה נכונה.
התאמה אנכית לעומס לא פועלת
כשמשתמשים בהתאמה אוטומטית לעומס (scaling) אנכית, המשימה לא משתנה אוטומטית באופן אנכי, והשגיאה הבאה מופיעה ביומני המשימות:
{"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"}
השגיאה הזו מתרחשת כשבחשבון השירות של ה-worker VM אין את התפקיד Dataflow Worker (roles/dataflow.worker).
כדי לפתור את הבעיה, צריך להקצות לחשבון שירות של worker VM את התפקיד roles/dataflow.worker. למידע נוסף, קראו את המאמר הקצאת תפקיד יחיד במרכז העזרה של "ניהול זהויות והרשאות גישה".
אם אתם משתמשים בתפקיד בהתאמה אישית לחשבון השירות של ה-worker VM, הוסיפו לתפקיד את ההרשאות הבאות:
autoscaling.sites.readRecommendationsautoscaling.sites.writeMetricsautoscaling.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 הרשאה ליצור את המינוי למעקב. מידע נוסף זמין במאמר חותמות זמן וסימני מים.