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