חשבונות שירות

חשבון שירות הוא חשבון שמשויך לאפליקציה ולא למשתמש קצה. יכול להיות שתצטרכו להשתמש בחשבון שירות כדי לבצע אימות ל-Earth Engine אם אתם מפתחים אפליקציה או משתמשים ב-API בארכיטקטורת REST. מידע נוסף על אימות באמצעות חשבונות שירות

יצירה של חשבון שירות

קודם כל, אם עדיין לא עשיתם זאת, אתם צריכים ליצור פרויקט ב-Google Cloud.

כדי לנהל את חשבונות השירות בפרויקט בענן, פותחים את תפריט מסוף Cloud ‏() ובוחרים באפשרות IAM & Admin ‏ > ‏Service accounts. (אם מתבקשים, בוחרים פרויקט).

כדי ליצור חשבון שירות חדש, לוחצים על הקישור + CREATE SERVICE ACCOUNT.

אם יצרתם פרויקט App Engine, יכול להיות שכבר יש לכם חשבון שירות שמוגדר כברירת מחדל (חשבון השירות של App Engine שמוגדר כברירת מחדל) עבור הפרויקט הזה. אם מגדירים פרויקט App Engine, בוחרים באפשרות Project > Editor בתפקיד Role של חשבון השירות.

הגדרת חשבון השירות לשימוש ב-Earth Engine

כל חשבונות השירות נוצרים בתוך פרויקט בענן, שיכול להיות אותו פרויקט שבו משתמשים לאפליקציית App Engine או למכונת VM ב-Cloud. מוודאים שפרויקט הענן רשום כדי לקבל גישה ל-Earth Engine, וש-Earth Engine API מופעל בפרויקט. לכל חשבונות השירות בפרויקט עם ההרשאות הנכונות תהיה גישה ל-Earth Engine.

אימות ב-Earth Engine באמצעות Application Default Credentials

הדרך המומלצת לאימות בסביבות לא מאוישות (כמו Cloud Run או Compute Engine) בלי לנהל מפתחות פרטיים באופן ידני היא באמצעות Application Default Credentials‏ (ADC). מאתחלים את הספרייה על ידי העברת מזהה הפרויקט בענן (מחליפים את my-project במזהה הפרויקט):

import google.auth
import ee

credentials, project_id = google.auth.default()
ee.Initialize(credentials, project='my-project')

אימות באמצעות מפתח פרטי

אם האפליקציה צריכה לעבור אימות באמצעות מפתח פרטי של חשבון שירות (לא מומלץ בסביבות ייצור שבהן אפשר להשתמש ב-ADC):

  1. יוצרים מפתח פרטי לחשבון השירות:
    • נכנסים לדף Service Accounts במסוף Cloud.
    • לוחצים על תפריט החשבון (), ואז על Create key (יצירת מפתח) > JSON.
    • מורידים את קובץ מפתח ה-JSON.
  2. חשוב לשמור את קובץ המפתח במקום בטוח. קובץ המפתח הוא קובץ מיוחד שמאפשר לתוכניות לגשת ל-Google APIs בשם חשבון השירות שלכם. אסור לשמור את המפתח הפרטי במקום ציבורי. אם איבדתם את המפתח הפרטי, אתם יכולים לבטל את הגישה לחשבון השירות וליצור מפתח חדש באמצעות מסוף Cloud. פרטים נוספים מופיעים במאמר יצירה ומחיקה של מפתחות של חשבון שירות.
  3. בודקים את קוד Python הבא מכל מקום שבו שמתם את הקובץ .private-key.json (מחליפים את my-project במזהה הפרויקט ב-Google Cloud):
    import ee
    service_account = 'my-service-account@...gserviceaccount.com'
    credentials = ee.ServiceAccountCredentials(service_account, '.private-key.json')
    ee.Initialize(credentials, project='my-project')

אם אתם מצליחים לבצע אתחול בלי שגיאה, חשבון השירות מוכן לשימוש.

שימוש בחשבון שירות שמוגדר כברירת מחדל ב-Compute Engine

אם אתם משתמשים בחשבון שירות שמוגדר כברירת מחדל, אתם צריכים קודם לשנות את היקפי הגישה של המכונה הווירטואלית לחשבון השירות של Compute Engine ל'מתן גישה מלאה לכל ממשקי Cloud API'. (אם אתם משתמשים בחשבונות שירות שמוגדרים כברירת מחדל ב-Dataflow או ב-App Engine, אין צורך לבצע את השלב הזה).

כדי לבצע אימות ל-Earth Engine באמצעות חשבון שירות שמוגדר כברירת מחדל, משתמשים בקוד הבא (מחליפים את my-project במזהה הפרויקט ב-Google Cloud):

from google.auth import compute_engine
import ee
credentials = compute_engine.Credentials(scopes=['https://www.googleapis.com/auth/earthengine'])
ee.Initialize(credentials, project='my-project')

הגדרת גישה ל-API בארכיטקטורת REST

אם חשבון השירות צריך לבצע חישובים באמצעות API בארכיטקטורת REST, צריך לתת לו הרשאה ברמת הפרויקט, ובאופן ספציפי את התפקיד Earth Engine Resource Viewer. בהתאם להגדרת הפרויקט, יכול להיות שתצטרכו גם להעניק לחשבון השירות את התפקיד 'Service Usage Consumer'. מידע נוסף על ההרשאות ברמת הפרויקט שנדרשות לשימוש ב-Earth Engine זמין בדף בקרת גישה.

פתרון בעיות

שגיאה: invalid_grant

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

שגיאה: 'ההיקפים שצוינו לא מורשים' כשמייצאים ל-Cloud Storage

אם השגיאה הזו מופיעה כשמריצים במשימה של Cloud Run, אל תגדירו את הארגומנט scopes כשיוצרים פרטי כניסה (למשל ב-google.auth.default(scopes=...)). ציון היקפי גישה עלול לשבש את הרשאות ברירת המחדל בסביבה הזו.