Bir python işlevinden Google Cloud Storage'a nasıl giriş yapılır?

Aug 24 2020

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

1 JanHernandez Aug 24 2020 at 20:44

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.

1 Pet Aug 25 2020 at 08:41

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 :-)

guillaumeblaquiere Aug 24 2020 at 19:19

(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)