从python(panda)写入云存储(GCP)所需的角色



我有一个问题要问你们中的GCP鉴赏家。

我有一个问题,我可以通过UI和gsutil上传到bucket中,但如果我尝试通过python 进行上传

df.to_csv('gs://BUCKET_NAME/test.csv')

我得到一个403权限不足错误。

我目前的猜测是,python是通过API实现这一点的,并且需要一个额外的角色-为了让事情变得更令人困惑,我已经是桶的项目的项目所有者,与其他团队成员相比,我并没有真正发现缺少这个特定桶的权限。

我通过pyenv和pandas‘1.4.2’使用python 3.9.1

有人有同样的问题/知道我缺了什么角色吗?

  1. 我检查了我是否拥有通过UI和gsutil上传的主体权限
  2. 我使用了相同的虚拟python环境从bigquery中读写,以检查我原则上可以在python中使用GCP数据——这很有效
  3. 我有以下角色存储管理员、存储对象管理器、存储对象创建者、存储对象查看器

gsutilgcloud共享凭据。

这些凭据不是与本地运行的其他代码共享的。

快速但次优的解决方案是:

gcloud auth application-default login

然后再次运行代码。

然后,它将使用您的gcloud(gsutil(用户凭据,该凭据配置为像使用服务帐户一样运行。

这些凭据(在Linux上(存储在${HOME}/.config/gcloud/application_default_credentials.json中。

更好的解决方案是专门为您的应用程序创建一个服务帐户,并授予它所需的最低IAM权限集(BigQuery、GCS…(。

出于测试目的(!(您可以在本地下载服务帐户密钥。

然后,您可以使用Google的应用程序默认凭据(ADC((在Linux上(对代码进行身份验证:

export GOOGLE_APPLICATION_CREDENTIALS=/path/to/your/key.json
python3 your_app.py

当您将利用ADC的代码部署到谷歌云计算服务(计算引擎、云运行…(时,它可以不更改地部署,因为计算资源的凭据将自动从元数据服务中获得。

你可以在谷歌上搜索,例如";Google IAM BigQuery";查找列出角色的文档:

  • BigQuery的IAM角色
  • 云存储的IAM角色

最新更新