Bir python işlevinden Google Cloud Storage'a nasıl giriş yapılır?
Google bulut depolamada yeniyim ve günde bir kez bir blob indiren bir işlev kurmaya çalışıyorum. Şu anda Jupyter Not Defterimde çalışıyorum ama sonunda kod bir Azure İşlevi'nde çalışacak. Beni kovaya bağlayan müşteriyi kurmakla uğraşıyorum. Google'a bağlanmamı sağlayan bir JSON hizmet hesabı kimlik bilgim var.
Yerel olarak bir çözüm buldum:
from google.cloud import storage
client = storage.Client.from_service_account_json('<PATH_TO_SERVICE_ACCOUNT_JSON>')
Sorun şu ki JSON'umu bulutta sakladığım bir yolum yok ama onu anahtar kasasında saklıyorum. Aşağıdaki çözümü buldum:
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)
Parçaya ihtiyacım olup olmadığından tam olarak emin değilim, scoped_credentials = ...ancak yalnızca kova üzerinde okuma izinlerine sahibim. (eğer bölümü atlarsam hata aynı kalır)
Bu çözüme gittiğimde aşağıdaki hatayı alıyorum:
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
Neyi yanlış yaptığıma dair bir fikrim yok çünkü kimlik bilgilerini zaten açıkça belirlediğimi düşünüyorum.
En iyi P
Yanıtlar
Ortam değişkenini GOOGLE_APPLICATION_CREDENTIALSjson dosyasının yolu ile ayarlayabilir ve depolama istemcisini parametreler olmadan başlatarak işlevinizi doğrulayabilirsiniz.
client = storage.Client()
* varsayılan olarak, depolama istemcisi ortam değişkenindeki dosya yolunu kullanırGOOGLE_APPLICATION_CREDENTIALS
JSON kimlik bilgilerini kullanmanın en kolay yoludur ve Google Cloud python kitaplıklarının çoğu ile uyumludur.
Birkaç testten sonra eklemeyi kaçırdığımı öğrendim project = None. Eklerseniz, istemciyi oluşturmak için aşağıdaki komutu kullanın:
client = storage.Client(project = None, credentials = scoped_credentials)
Yardımınız ve düşünceniz için yemek için teşekkürler :-)
(Cevap kısmını kullanıyorum çünkü yorumdaki kod biçimlendirmesi berbat)
Bunu deneyip 2 erişim jetonunun basılı olup olmadığını söyleyebilir misin?
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)