首页 > 解决方案 > 从 GCP 计算实例复制到存储桶时出现 AccessDeniendException

问题描述

我想将对象从 Google Compute Engine 实例复制到使用gsutil cp. 两者都属于同一个所有者(我)和同一个项目。我想自动化整台机器,所以手动验证不是我想要的。

我已经激活了在 Compute 实例上使用服务帐户的必要权限(详情如下),但是当我尝试将gsutil cp文件写入存储桶时,我得到一个AccessDeniedException.
错误消息抱怨丢失storage.object.createstorage.object.list权限取决于我的存储桶目标路径是否以文件夹 ( gs://<bucket>/test/) 或文件 ( gs://<bucket>/test.txt) 结尾。

我做了什么来获得权限(我已经尝试了很多,包括创建我也分配给服务帐户的冗余自定义角色):

gcloud instances create <instance> [...] \
    --service--account <name>@<project>.iam.gserviceaccount.com \
    --scopes cloud-platform,storage-full
gcloud projects add-iam-policy-binding <project> \
    --member serviceAccount:<name>@<project>.iam.gserviceaccount.com \
    --role roles/storage.objectAdmin
gsutil iam ch \
    serviceAccount:<name>@<project>.iam.gserviceaccount.com:roles/storage.objectAdmin \
    gs://<bucket>
gsutil acl ch -u <name>@<project>.iam.gserviceaccount.com:O gs://<bucket>

但是,无论我做什么,错误都不会改变,我无法写入存储桶。但是,我可以从存储桶中读取文件。我在使用服务帐户的本地机器上也遇到了同样的错误,所以问题与实例无关。

标签: google-cloud-platformpermissionsgoogle-cloud-storageservice-accountsgsutil

解决方案


我创建了一个新的服务帐户并执行了完全相同的步骤......现在它可以工作了。


推荐阅读