Làm cách nào để đăng nhập vào Google Cloud Storage từ một hàm python?
Tôi mới sử dụng lưu trữ đám mây của google và tôi cố gắng thiết lập một chức năng tải xuống một blob mỗi ngày một lần. Hiện tại tôi đang làm việc trong Máy tính xách tay Jupyter của mình nhưng cuối cùng, mã sẽ chạy trong Hàm Azure. Tôi đang đấu tranh với việc thiết lập ứng dụng khách kết nối tôi với nhóm. Tôi có thông tin xác thực tài khoản dịch vụ JSON cho phép tôi kết nối với google.
Tại địa phương, tôi đã tìm thấy một giải pháp:
from google.cloud import storage
client = storage.Client.from_service_account_json('<PATH_TO_SERVICE_ACCOUNT_JSON>')
Vấn đề là tôi không có đường dẫn nơi tôi lưu trữ JSON của mình trên đám mây nhưng tôi lưu trữ nó trong kho chìa khóa. Tôi đã đưa ra giải pháp sau:
from google.cloud import storage
import json
from google.oauth2 import service_account
string_key = get_key_from_key_vault()
service_account_info = json.loads(string_key)
google_credentials = service_account.Credentials.from_service_account_info(
service_account_info
)
scoped_credentials = google_credentials.with_scopes(
['https://www.googleapis.com/auth/cloud-platform.read-only'])
print(type(scoped_credentials))
client = storage.Client(credentials = scoped_credentials)
Tôi không hoàn toàn chắc chắn liệu mình có cần scoped_credentials = ...phần này hay không nhưng tôi chỉ có quyền đọc trên thùng. (nếu tôi bỏ qua phần, lỗi vẫn giữ nguyên)
Khi tôi sử dụng giải pháp này, tôi gặp lỗi sau:
DefaultCredentialsError: Could not automatically determine credentials. Please set
GOOGLE_APPLICATION_CREDENTIALS or explicitly create credentials and re-run the application. For
more information, please see https://cloud.google.com/docs/authentication/getting-started
Tôi không biết mình đang làm gì sai vì tôi nghĩ rằng tôi đã đặt thông tin xác thực rõ ràng.
P tốt nhất
Trả lời
bạn có thể đặt biến môi trường GOOGLE_APPLICATION_CREDENTIALSbằng đường dẫn của tệp json và xác thực hàm của bạn bằng cách khởi động ứng dụng khách lưu trữ mà không có tham số.
client = storage.Client()
* theo mặc định, máy khách lưu trữ sử dụng đường dẫn tệp trên biến môi trườngGOOGLE_APPLICATION_CREDENTIALS
Đây là cách dễ nhất để sử dụng thông tin đăng nhập JSON và nó tương thích với hầu hết các thư viện python của Google Cloud.
sau một số thử nghiệm khác, tôi phát hiện ra rằng tôi đã bỏ qua để thêm project = None. Nếu bạn thêm nó, hãy sử dụng lệnh sau để tạo ứng dụng khách mà nó hoạt động:
client = storage.Client(project = None, credentials = scoped_credentials)
Cảm ơn sự giúp đỡ của bạn và đồ ăn cho sự suy nghĩ :-)
(Tôi sử dụng phần câu trả lời vì định dạng mã trong nhận xét là khủng khiếp)
Bạn có thể thử điều này và cho tôi biết nếu bạn thấy 2 mã thông báo truy cập được in?
from google.cloud import storage
import json
from google.oauth2 import service_account
from google.auth.transport import requests as grequests
string_key = get_key_from_key_vault()
service_account_info = json.loads(string_key)
google_credentials = service_account.Credentials.from_service_account_info(
service_account_info
)
google_credentials.refresh(grequests.Request())
print(google_credentials.token)
scoped_credentials = google_credentials.with_scopes(
['https://www.googleapis.com/auth/cloud-platform.read-only'])
scoped_credentials.refresh(grequests.Request())
print(scoped_credentials.token)