บัญชีบริการคือ บัญชีที่เชื่อมโยงกับแอปพลิเคชัน ไม่ใช่ผู้ใช้ปลายทาง คุณอาจต้องใช้บัญชีบริการ เพื่อตรวจสอบสิทธิ์กับ Earth Engine หากคุณกำลังพัฒนาแอปหรือใช้ REST API ดูข้อมูลเพิ่มเติมเกี่ยวกับการตรวจสอบสิทธิ์ด้วยบัญชีบริการ
สร้างบัญชีบริการ
ขั้นแรก ให้สร้างโปรเจ็กต์ Google Cloud หากยังไม่ได้สร้าง
คุณสามารถจัดการบัญชีบริการสำหรับโปรเจ็กต์ที่อยู่ในระบบคลาวด์ได้โดยไปที่เมนู Cloud Console () แล้วเลือก IAM และผู้ดูแลระบบ > บัญชีบริการ (เลือกโปรเจ็กต์หากระบบแจ้ง)
หากต้องการสร้างบัญชีบริการใหม่ ให้คลิกที่ลิงก์ + สร้างบัญชีบริการ
หากคุณสร้างโปรเจ็กต์ App Engine คุณอาจมีบัญชีบริการเริ่มต้น (บัญชีบริการเริ่มต้นของ App Engine) สำหรับโปรเจ็กต์นั้นอยู่แล้ว หากคุณกำลังตั้งค่าโปรเจ็กต์ App Engine ให้เลือก บทบาทของบัญชีบริการเป็น โปรเจ็กต์ > ผู้แก้ไข
กำหนดค่าบัญชีบริการให้ใช้ Earth Engine
ระบบจะสร้างบัญชีบริการทั้งหมดภายในโปรเจ็กต์ที่อยู่ในระบบคลาวด์ ซึ่งอาจเป็นโปรเจ็กต์เดียวกับที่ใช้สำหรับแอป App Engine หรือ Cloud VM ตรวจสอบว่าได้ลงทะเบียนโปรเจ็กต์ Cloud เพื่อเข้าถึง Earth Engine แล้ว และได้เปิดใช้ Earth Engine API ในโปรเจ็กต์แล้ว บัญชีบริการทั้งหมดในโปรเจ็กต์ที่มี สิทธิ์ที่ถูกต้องจะเข้าถึง Earth Engine ได้
ตรวจสอบสิทธิ์กับ Earth Engine โดยใช้ข้อมูลรับรองเริ่มต้นของแอปพลิเคชัน
ข้อมูลรับรองเริ่มต้นของแอปพลิเคชัน (ADC) เป็นวิธีที่แนะนำในการตรวจสอบสิทธิ์ในสภาพแวดล้อมที่ไม่มีผู้ดูแล (เช่น Cloud Run หรือ Compute Engine) โดยไม่ต้องจัดการคีย์ส่วนตัวด้วยตนเอง
เริ่มต้นไลบรารีโดยส่งรหัสโปรเจ็กต์ที่อยู่ในระบบคลาวด์ (แทนที่ my-project ด้วย
รหัสโปรเจ็กต์)
import google.auth import ee credentials, project_id = google.auth.default() ee.Initialize(credentials, project='my-project')
ตรวจสอบสิทธิ์ด้วยคีย์ส่วนตัว
หากแอปพลิเคชันต้องตรวจสอบสิทธิ์โดยใช้คีย์ส่วนตัวของบัญชีบริการ (ไม่แนะนำ สำหรับสภาพแวดล้อมการใช้งานจริงที่ใช้ ADC ได้) ให้ทำดังนี้
-
สร้างคีย์ส่วนตัวสำหรับบัญชีบริการโดยทำดังนี้
- ไปที่ หน้าบัญชีบริการ ใน Cloud Console
- คลิกเมนูสำหรับบัญชี () แล้วเลือกสร้างคีย์ > JSON
- ดาวน์โหลดไฟล์คีย์ JSON
- เก็บไฟล์คีย์ไว้ในที่ปลอดภัย ไฟล์คีย์เป็นไฟล์พิเศษที่อนุญาตให้โปรแกรมเข้าถึง Google API ในนามของบัญชีบริการของคุณ อย่าเก็บคีย์ส่วนตัวไว้ในที่สาธารณะ หากทำคีย์ส่วนตัวหาย คุณสามารถเพิกถอนสิทธิ์เข้าถึงบัญชีบริการและ สร้างบัญชีใหม่ได้โดยใช้ Cloud Console ดูรายละเอียดได้ที่ สร้างและลบคีย์บัญชีบริการ
-
ทดสอบโค้ด 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
หากใช้ บัญชีบริการเริ่มต้น คุณต้อง แก้ไขขอบเขตการเข้าถึงของ VM สำหรับบัญชีบริการ 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')
ตั้งค่าการเข้าถึง REST API
หากบัญชีบริการจะทำการคำนวณโดยใช้ REST API คุณต้องให้สิทธิ์ระดับโปรเจ็กต์แก่บัญชีดังกล่าว โดยเฉพาะบทบาทผู้ดูทรัพยากร Earth Engine นอกจากนี้ คุณอาจต้องให้บทบาทผู้ใช้บริการแก่บัญชีบริการด้วย ทั้งนี้ขึ้นอยู่กับการกำหนดค่าโปรเจ็กต์ ผู้ใช้บริการ ดูข้อมูลเพิ่มเติมเกี่ยวกับสิทธิ์ของโปรเจ็กต์ที่จำเป็นในการใช้ Earth Engine ได้ที่หน้า การควบคุมการเข้าถึง
การแก้ปัญหา
ข้อผิดพลาด: invalid_grant
OAuth2 อาจมีความไวต่อความคลาดเคลื่อนของนาฬิกามาก หากคุณมั่นใจว่าได้ตั้งค่าทุกอย่างถูกต้องแล้ว ให้ตรวจสอบว่านาฬิกาของคอมพิวเตอร์ซิงค์กับเวลาของเครือข่ายหรือไม่
ข้อผิดพลาด: "ขอบเขตที่ระบุไม่ได้รับอนุญาต" เมื่อส่งออกไปยัง Cloud Storage
หากคุณเห็นข้อผิดพลาดนี้เมื่อเรียกใช้ในงาน Cloud Run ให้งดเว้นการตั้งค่าอาร์กิวเมนต์
scopes เมื่อสร้างข้อมูลเข้าสู่ระบบ (เช่น ใน
google.auth.default(scopes=...)) การระบุขอบเขตอาจรบกวนสิทธิ์เริ่มต้นในสภาพแวดล้อมนี้