บัญชีบริการ

บัญชีบริการคือบัญชีที่เชื่อมโยงกับแอปพลิเคชัน ไม่ใช่ผู้ใช้ปลายทาง คุณอาจต้องใช้บัญชีบริการเพื่อตรวจสอบสิทธิ์ใน Earth Engine หากกำลังพัฒนาแอปหรือใช้ REST API ดูข้อมูลเพิ่มเติมเกี่ยวกับการตรวจสอบสิทธิ์ด้วยบัญชีบริการ

สร้างบัญชีบริการ

ก่อนอื่น ให้สร้างโปรเจ็กต์ Google Cloud หากยังไม่ได้ดำเนินการ

คุณจัดการบัญชีบริการสำหรับโปรเจ็กต์ที่อยู่ในระบบคลาวด์ได้โดยไปที่เมนู Cloud Console () แล้วเลือก IAM และผู้ดูแลระบบ > บัญชีบริการ (เลือกโปรเจ็กต์หากได้รับข้อความแจ้ง)

หากต้องการสร้างบัญชีบริการใหม่ ให้คลิกลิงก์ + สร้างบัญชีบริการ

หากสร้างโปรเจ็กต์ App Engine คุณอาจมีบัญชีบริการเริ่มต้น (บัญชีบริการเริ่มต้นของ App Engine) สำหรับโปรเจ็กต์นั้นอยู่แล้ว หากคุณกำลังตั้งค่าโปรเจ็กต์ App Engine ให้เลือกบทบาทของบัญชีบริการเป็นโปรเจ็กต์ > ผู้แก้ไข

กำหนดค่าบัญชีบริการเพื่อใช้ Earth Engine

ระบบจะสร้างบัญชีบริการทั้งหมดภายในโปรเจ็กต์ที่อยู่ในระบบคลาวด์ ซึ่งอาจเป็นโปรเจ็กต์เดียวกับที่ใช้สำหรับแอป App Engine หรือ VM ในระบบคลาวด์ ตรวจสอบว่าลงทะเบียนโปรเจ็กต์ที่อยู่ในระบบคลาวด์ เพื่อเข้าถึง Earth Engine และเปิดใช้ Earth Engine API ในโปรเจ็กต์แล้ว บัญชีบริการทั้งหมดในโปรเจ็กต์ที่มีสิทธิ์ที่ถูกต้องจะมีสิทธิ์เข้าถึง 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 ได้) ให้ทำดังนี้

  1. สร้างคีย์ส่วนตัวสำหรับบัญชีบริการโดยทำดังนี้
    • ไปที่หน้าบัญชีบริการใน Cloud Console
    • คลิกเมนูสำหรับบัญชี () จากนั้นคลิกสร้างคีย์ > JSON
    • ดาวน์โหลดไฟล์คีย์ JSON
  2. เก็บไฟล์คีย์ไว้อย่างปลอดภัย ไฟล์คีย์เป็นไฟล์พิเศษที่อนุญาตให้โปรแกรมเข้าถึง Google API ในนามของบัญชีบริการของคุณ อย่าเก็บคีย์ส่วนตัวไว้ในที่สาธารณะ หากทำคีย์ส่วนตัวหาย คุณสามารถเพิกถอนสิทธิ์เข้าถึงบัญชีบริการและ สร้างคีย์ใหม่โดยใช้ Cloud Console ได้ ดูรายละเอียดได้ที่ สร้างและลบคีย์บัญชีบริการ
  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

หากคุณใช้บัญชีบริการเริ่มต้น คุณจะต้อง แก้ไขขอบเขตการเข้าถึงของ VM สำหรับบัญชีบริการ 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)

ตั้งค่าการเข้าถึง REST API

หากบัญชีบริการจะทำการคำนวณโดยใช้ REST API คุณต้องให้สิทธิ์ระดับโปรเจ็กต์แก่บัญชีดังกล่าว โดยเฉพาะบทบาทผู้ดูทรัพยากร Earth Engine คุณอาจต้องให้บทบาทผู้ใช้การใช้บริการแก่บัญชีบริการด้วย ทั้งนี้ขึ้นอยู่กับการกำหนดค่าโปรเจ็กต์ ดูข้อมูลเพิ่มเติมเกี่ยวกับสิทธิ์ของโปรเจ็กต์ที่จำเป็นในการใช้ Earth Engine ได้ที่หน้าการควบคุมการเข้าถึง

การแก้ปัญหา

ข้อผิดพลาด: invalid_grant

OAuth2 อาจมีความไวต่อการเบี่ยงเบนเวลามาก หากคุณมั่นใจว่าได้ตั้งค่าทุกอย่าง อย่างถูกต้องแล้ว ให้ตรวจสอบว่านาฬิกาของคอมพิวเตอร์ซิงค์กับเวลาของเครือข่ายหรือไม่

ข้อผิดพลาด: "ขอบเขตที่ระบุไม่ได้รับอนุญาต" เมื่อส่งออกไปยัง Cloud Storage

หากคุณเห็นข้อผิดพลาดนี้เมื่อเรียกใช้ในงาน Cloud Run อย่าตั้งค่าอาร์กิวเมนต์ scopes เมื่อสร้างข้อมูลเข้าสู่ระบบ (เช่น ใน google.auth.default(scopes=...)) การระบุขอบเขตอาจรบกวนสิทธิ์เริ่มต้นในสภาพแวดล้อมนี้