یک حساب کاربری سرویس ، حسابی است که به جای یک کاربر نهایی، به یک برنامه مرتبط است. اگر در حال توسعه یک برنامه یا استفاده از REST API هستید، ممکن است برای احراز هویت در Earth Engine به یک حساب کاربری سرویس نیاز داشته باشید. درباره احراز هویت با حسابهای کاربری سرویس بیشتر بدانید.
ایجاد حساب کاربری سرویس
ابتدا، اگر قبلاً یک پروژه Google Cloud ایجاد نکردهاید، آن را ایجاد کنید .
شما میتوانید حسابهای سرویس را برای پروژه ابری خود با رفتن به منوی کنسول ابری ( ) و انتخاب IAM & Admin > Service accounts مدیریت کنید. (در صورت درخواست، پروژه را انتخاب کنید.)
برای ایجاد یک حساب سرویس جدید، روی پیوند + ایجاد حساب سرویس کلیک کنید.
اگر یک پروژه App Engine ایجاد کردهاید، ممکن است از قبل یک حساب سرویس پیشفرض ( حساب سرویس پیشفرض App Engine ) برای آن پروژه داشته باشید. اگر در حال راهاندازی یک پروژه App Engine هستید، برای حساب سرویس Role ، Project > Editor را انتخاب کنید.
حساب سرویس را برای استفاده از Earth Engine پیکربندی کنید
همه حسابهای سرویس در یک پروژه ابری ایجاد میشوند، که ممکن است همان پروژهای باشد که برای برنامه App Engine یا Cloud VM شما استفاده میشود. اطمینان حاصل کنید که پروژه ابری برای دسترسی به Earth Engine ثبت شده است و API Earth Engine در پروژه فعال است . همه حسابهای سرویس در پروژه با مجوزهای صحیح به Earth Engine دسترسی خواهند داشت.
با استفاده از اعتبارنامههای پیشفرض برنامه، به Earth Engine اعتبارسنجی کنید
اعتبارنامههای پیشفرض برنامه (ADC) روش پیشنهادی برای احراز هویت در محیطهای بدون نظارت (مانند Cloud Run یا Compute Engine) بدون مدیریت دستی کلیدهای خصوصی است.
import google.auth import ee credentials, project_id = google.auth.default() ee.Initialize(credentials, project='my-ee-project')
احراز هویت با کلید خصوصی
اگر برنامه شما نیاز به احراز هویت با استفاده از کلید خصوصی حساب کاربری سرویس دارد (برای محیطهای عملیاتی که در آنها میتوان از ADC استفاده کرد، توصیه نمیشود):
- یک کلید خصوصی برای حساب سرویس ایجاد کنید:
- به صفحه حسابهای سرویس در کنسول ابری بروید.
- روی منوی حساب کاربری ( ) کلیک کنید، سپس Create key > JSON را انتخاب کنید.
- فایل کلید JSON را دانلود کنید.
- فایل کلید خود را ایمن نگه دارید. فایل کلید، فایل ویژهای است که به برنامهها اجازه میدهد از طرف حساب سرویس شما به APIهای گوگل دسترسی داشته باشند. هرگز کلید خصوصی خود را در مکانی عمومی ذخیره نکنید. اگر کلید خصوصی خود را گم کردید، میتوانید دسترسی به یک حساب سرویس را لغو کرده و با استفاده از کنسول ابری، یک حساب جدید ایجاد کنید. برای جزئیات بیشتر به بخش ایجاد و حذف کلیدهای حساب سرویس مراجعه کنید.
- کد پایتون زیر را از هر جایی که فایل
.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 Service Account) به «اجازه دسترسی کامل به همه 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)
تنظیم دسترسی REST API
اگر قرار است حساب کاربری سرویس با استفاده از REST API محاسبات انجام دهد، باید به آن مجوز سطح پروژه ، به ویژه نقش Earth Engine Resource Viewer ، بدهید. بسته به پیکربندی پروژه شما، ممکن است لازم باشد به حساب کاربری سرویس ، نقش Service Usage Consumer نیز بدهید. برای اطلاعات بیشتر در مورد مجوزهای مورد نیاز پروژه برای استفاده از Earth Engine، به صفحه کنترل دسترسی مراجعه کنید.
عیبیابی
خطا: invalid_grant
OAuth2 میتواند به انحراف ساعت بسیار حساس باشد. اگر مطمئن هستید که همه چیز را به درستی تنظیم کردهاید، بررسی کنید که آیا ساعت رایانه شما با زمان شبکه همگامسازی شده است یا خیر.
خطا: "دامنه(های) ارائه شده مجاز نیستند" هنگام صادرات به فضای ابری
اگر هنگام اجرای یک وظیفه Cloud Run با این خطا مواجه شدید، هنگام ایجاد اعتبارنامهها، آرگومان scopes را تنظیم نکنید (مثلاً در google.auth.default(scopes=...) ). تعیین scopes میتواند با مجوزهای پیشفرض در این محیط تداخل داشته باشد.