使用服务帐号上传大文件时Gcloud权限错误

问题描述 投票:0回答:2

我正在尝试将 gzipped postgres 转储文件上传到 gcp 存储。我在带有图像的 docker 容器中运行它

google/cloud-sdk:alpine
(我也尝试过本地 gcloud 安装):

gcloud storage mv file.dump.gz gs://my-bucket/

我通过将

gcloud
环境变量指向 json 密钥文件来使用
CLOUDSDK_AUTH_CREDENTIAL_FILE_OVERRIDE
的服务帐户身份验证(我也尝试过
GOOGLE_APPLICATION_CREDENTIALS
GOOGLE_GHA_CREDS_PATH
)。

服务帐户具有“存储对象管理员”角色。

该存储桶具有“Nearline”存储类别,生命周期删除时间为 5 天。

当我尝试上传一个小文件(我测试的最大文件是 14MB)时,它可以工作,但是当我尝试上传一个大文件(我测试失败的最小文件是 201MB)时,它会失败并出现错误

错误:(gcloud.storage.mv)用户[无]无权访问b实例[my-bucket](或者可能不存在):没有storage.buckets.get访问Google Cloud Storage存储桶的权限。资源上的权限“storage.buckets.get”被拒绝(或者它可能不存在)。

如何上传大文件而不出现权限错误?

google-cloud-platform google-cloud-storage gcloud
2个回答
2
投票

看来您需要“存储管理员”角色才能上传大文件!

对于任何测试者来说,添加权限(例如从“存储对象管理”到“存储管理”)似乎会立即发生,而删除权限(例如从“存储管理”到“存储对象管理”)可能会立即发生几分钟即可应用。


0
投票

gcloud 使用称为“并行复合上传”的机制来加速文件传输到 GCS,如下所述:https://cloud.google.com/storage/docs/parallel-composite-uploads gcloud 在使用前会检查存储桶的默认存储类别和保留期限与并行复合上传的兼容性。因此,它向存储桶执行

GET

请求。此请求需要调用者服务帐户的

storage.buckets.get
权限。
选项1

向服务帐户添加诸如

roles/storage.admin

之类的角色,其中包括

storage.buckets.get
权限。
选项2

禁用 gcloud 并行复合上传:

gcloud config set parallel_composite_upload_enabled false

选项3

禁用兼容性检查:

gcloud config set parallel_composite_upload_compatibility_check false

这些是我找到的选项,列表可能并不详尽。

© www.soinside.com 2019 - 2024. All rights reserved.