我有一个问题要问你们中的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
有人有同样的问题/知道我缺了什么角色吗?
- 我检查了我是否拥有通过UI和gsutil上传的主体权限
- 我使用了相同的虚拟python环境从bigquery中读写,以检查我原则上可以在python中使用GCP数据——这很有效
- 我有以下角色存储管理员、存储对象管理器、存储对象创建者、存储对象查看器
gsutil
和gcloud
共享凭据。
这些凭据不是与本地运行的其他代码共享的。
快速但次优的解决方案是:
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角色