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

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

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

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

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

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

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

הגדרת חשבון השירות לשימוש ב-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).

import google.auth
import ee

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

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

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

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

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

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

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

כדי לבצע אימות ל-Earth Engine באמצעות חשבון שירות שמוגדר כברירת מחדל, משתמשים בקוד הבא:

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

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

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

פתרון בעיות

שגיאה: invalid_grant

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

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

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