Google cloud get bucket - 适用于 cli 但不适用于 python

我被要求与外部谷歌存储桶进行集成,我收到了一个凭据 json,


在尝试这样做时 gsutil ls gs://bucket_name(在使用 creds json 配置自己之后)我收到了有效的响应,以及当我尝试将文件上传到存储桶中时。


尝试使用 Python3 执行此操作时,它不起作用:


在使用google-cloud-storage==1.16.0(也尝试过较新的版本)时,我正在做:


project_id = credentials_dict.get("project_id")

credentials = service_account.Credentials.from_service_account_info(credentials_dict)

client = storage.Client(credentials=credentials, project=project_id)


bucket = client.get_bucket(bucket_name)

但是get_bucket在线上,我得到:


google.api_core.exceptions.Forbidden: 403 GET https://www.googleapis.com/storage/v1/b/BUCKET_NAME?projection=noAcl: USERNAME@PROJECT_ID.iam.gserviceaccount.com does not have storage.buckets.get access to the Google Cloud Storage bucket.

与我集成的外部合作伙伴说用户设置正确,并证明他们表明我可以使用gsutil.


你能帮忙吗?知道可能是什么问题吗?


犯罪嫌疑人X
浏览 94回答 2
2回答

ibeautiful

答案是信誉确实是错误的,但是当我尝试在客户端client.bucket(bucket_name)而不是client.get_bucket(bucket_name).

萧十郎

请按照以下步骤正确设置适用于 Python 的 Cloud Storage 客户端库。通常,云存储库可以使用应用程序默认凭据或环境变量进行身份验证。请注意,推荐使用的方法是使用环境变量设置身份验证(即,如果您使用的是 Linux:export GOOGLE_APPLICATION_CREDENTIALS="/path/to/[service-account-credentials].json"应该可行)并完全避免使用该service_account.Credentials.from_service_account_info()方法:from google.cloud import storagestorage_client = storage.Client(project='project-id-where-the-bucket-is')bucket_name = "your-bucket"bucket = client.get_bucket(bucket_name)应该可以简单地工作,因为身份验证是由客户端库通过环境变量处理的。现在,如果您有兴趣显式使用服务帐户而不是使用service_account.Credentials.from_service_account_info()方法,您可以通过from_service_account_json()以下方式直接使用该方法:from google.cloud import storage# Explicitly use service account credentials by specifying the private key# file.storage_client = storage.Client.from_service_account_json(    '/[service-account-credentials].json')bucket_name = "your-bucket"bucket = client.get_bucket(bucket_name)在此处查找有关如何向您的应用程序提供凭据的所有相关详细信息。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python