问题:我正在尝试使用google笔记本在一个存储在我项目的云存储桶中的.gz JSON文件中读取,我一直收到这个错误:
HttpError: Anonymous caller does not have storage.objects.get access to the Google Cloud Storage object., 401
我的代码:
fs = gcsfs.GCSFileSystem(project='my-project')
with fs.open('bucket/path.json.gz') as f:
gz = gzip.GzipFile(fileobj=f)
file_as_string = gz.read()
json_a = json.loads(file_as_string)
--我尝试过所有这些身份验证方法,但仍然得到相同的401错误:
!gcloud auth login
!gcloud auth list
!gcloud projects list
!gcloud config set project 'myproject-id'
from google.colab import auth
auth.authenticate_user()
!gcloud config set account 'my GCP email'
!gcloud auth activate-service-account
!gcloud auth application-default login
!gsutil config
!gcloud config set pass_credentials_to_gsutil false
!gsutil config -a
我还将我的GCP权限设置为:
发布于 2022-03-17 00:08:05
你的问题还不完全清楚,但:
gcloud
和Google都使用谷歌的身份验证平台,但它们并不共享状态。你通常(!)不能使用gcloud
登录,也不能期望使用SDK的代码也能通过身份验证gcloud
和使用Google的代码之间共享状态的一种方法(经常令人困惑)是使用gcloud auth application-default-login
。但是,这只是因为gcloud
在本地写入其状态,并且在同一主机上以相同用户的身份运行时,使用Google编写的代码将能够访问此状态。我想(?)这将不适用于基于浏览器的collab。gcsfs.GCSFileSystem
,但它是而不是Google的。除非它的开发人员特别周到,否则它将无法利用Google使用auth.authenticate_user()
完成的身份验证。所以..。
我觉得你应该:
you@gmail.com
或其他任何帐户)具有roles/storage.objectAdmin
(或任何允许storage.objects.get
的预定义角色 )。google.collab.auth
和auth.authenticate_user()
获取浏览器登录用户(即you@gmail.com
)的凭据。google-cloud-storage
来访问GCS对象。Google库可以利用上一步获得的凭据。更新
这是一个示例。
备注:它使用的是API,而不是Client,但它们在功能上是等价的。
https://stackoverflow.com/questions/71505271
复制相似问题