Tài khoản dịch vụ

Tài khoản dịch vụ là tài khoản được liên kết với một ứng dụng chứ không phải người dùng cuối. Bạn có thể cần sử dụng tài khoản dịch vụ để xác thực với Earth Engine nếu đang phát triển một ứng dụng hoặc sử dụng API REST. Tìm hiểu thêm về cách xác thực bằng tài khoản dịch vụ.

Tạo một tài khoản dịch vụ

Trước tiên, hãy tạo một dự án Google Cloud nếu bạn chưa làm.

Bạn có thể quản lý các tài khoản dịch vụ cho dự án trên đám mây bằng cách chuyển đến trình đơn bảng điều khiển Cloud () rồi chọn IAM và Quản trị > Tài khoản dịch vụ. (Chọn dự án nếu được nhắc.)

Để tạo một tài khoản dịch vụ mới, hãy nhấp vào đường liên kết + TẠO TÀI KHOẢN DỊCH VỤ.

Nếu đã tạo một dự án App Engine, thì bạn có thể đã có một tài khoản dịch vụ mặc định (Tài khoản dịch vụ mặc định của App Engine) cho dự án đó. Nếu bạn đang thiết lập một dự án App Engine, thì đối với tài khoản dịch vụ Vai trò, hãy chọn Dự án > Trình chỉnh sửa.

Định cấu hình tài khoản dịch vụ để sử dụng Earth Engine

Tất cả tài khoản dịch vụ đều được tạo trong một dự án trên đám mây. Dự án này có thể là dự án giống với dự án dùng cho ứng dụng App Engine hoặc Cloud VM. Đảm bảo rằng dự án Cloud đã được đăng ký để truy cập vào Earth Engine và Earth Engine API đã được bật trên dự án. Tất cả tài khoản dịch vụ trong dự án có quyền chính xác sẽ có quyền truy cập vào Earth Engine.

Xác thực với Earth Engine bằng Thông tin xác thực mặc định của ứng dụng

Thông tin xác thực mặc định của ứng dụng (ADC) là cách được đề xuất để xác thực trong các môi trường không có người giám sát (như Cloud Run hoặc Compute Engine) mà không cần quản lý khoá riêng tư theo cách thủ công.

import google.auth
import ee

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

Xác thực bằng khoá riêng tư

Nếu ứng dụng của bạn cần xác thực bằng khoá riêng tư của tài khoản dịch vụ (không nên dùng cho các môi trường sản xuất có thể sử dụng ADC):

  1. Tạo khoá riêng tư cho tài khoản dịch vụ:
    • Chuyển đến trang Tài khoản dịch vụ trong Cloud Console.
    • Nhấp vào trình đơn cho tài khoản (), sau đó chọn Tạo khoá > JSON.
    • Tải tệp khoá JSON xuống.
  2. Giữ an toàn cho tệp khoá. Tệp khoá là một tệp đặc biệt cho phép các chương trình truy cập vào API của Google thay mặt cho tài khoản dịch vụ của bạn. Không bao giờ lưu trữ khoá riêng tư ở nơi công cộng place. Nếu đặt nhầm khoá riêng tư, bạn có thể thu hồi quyền truy cập vào tài khoản dịch vụ và tạo một tài khoản mới bằng Cloud Console. Hãy xem bài viết Tạo và xoá khoá tài khoản dịch vụ để biết thông tin chi tiết.
  3. Kiểm thử mã Python sau đây từ bất cứ nơi nào bạn đặt tệp .private-key.json
    import ee
    service_account = 'my-service-account@...gserviceaccount.com'
    credentials = ee.ServiceAccountCredentials(service_account, '.private-key.json')
    ee.Initialize(credentials)

Nếu bạn có thể khởi chạy mà không gặp lỗi, thì tài khoản dịch vụ của bạn đã sẵn sàng sử dụng.

Sử dụng tài khoản dịch vụ mặc định trên Compute Engine

Nếu đang sử dụng tài khoản dịch vụ mặc định, trước tiên, bạn cần sửa đổi phạm vi truy cập của VM cho Tài khoản dịch vụ Compute Engine thành "Cho phép truy cập đầy đủ vào tất cả Cloud APIs". (Nếu đang sử dụng tài khoản dịch vụ mặc định trong Dataflow hoặc App Engine, thì bạn không cần thực hiện bước này.)

Để xác thực với Earth Engine bằng tài khoản dịch vụ mặc định, hãy sử dụng mã sau:

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

Thiết lập quyền truy cập vào API REST

Nếu tài khoản dịch vụ dùng để tính toán bằng API REST, thì bạn cần cấp cho tài khoản đó quyền ở cấp dự án, cụ thể là vai trò Trình xem tài nguyên Earth Engine. Tuỳ thuộc vào cấu hình dự án, bạn cũng có thể cần cấp cho tài khoản dịch vụ vai trò Người tiêu dùng sử dụng dịch vụ. Hãy xem trang Kiểm soát quyền truy cập để biết thêm thông tin về các quyền của dự án cần thiết để sử dụng Earth Engine.

Khắc phục sự cố

Lỗi: invalid_grant

OAuth2 có thể rất nhạy cảm với độ lệch đồng hồ. Nếu bạn chắc chắn đã thiết lập mọi thứ đúng cách, hãy kiểm tra xem đồng hồ của máy tính có được đồng bộ hoá với thời gian mạng hay không.

Lỗi: "Provided scope(s) are not authorized" (Phạm vi được cung cấp không được uỷ quyền) khi xuất sang Cloud Storage

Nếu bạn thấy lỗi này khi chạy trong một tác vụ Cloud Run, đừng đặt đối số scopes khi tạo thông tin xác thực (ví dụ: trong google.auth.default(scopes=...)). Việc chỉ định phạm vi có thể gây trở ngại cho các quyền mặc định trong môi trường này.