Google cloud platform 从GCP计算实例复制到存储桶时的AccessDeniendException

Google cloud platform 从GCP计算实例复制到存储桶时的AccessDeniendException,google-cloud-platform,permissions,google-cloud-storage,service-accounts,gsutil,Google Cloud Platform,Permissions,Google Cloud Storage,Service Accounts,Gsutil,我想使用gsutil cp将一个对象从Google计算引擎实例复制到Google存储桶。两者都属于同一个所有者(我)和同一个项目。我想自动化整个机器,所以手动验证不是我想要的 我已激活,以便在计算实例上使用服务帐户(详细信息如下),但当我尝试gsutil cpbucket中的文件时,会得到一个AccessDeniedException 错误消息抱怨缺少storage.object.create或storage.object.list权限,具体取决于我的bucket目标路径是否以文件夹(gs://

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

我已激活,以便在计算实例上使用服务帐户(详细信息如下),但当我尝试
gsutil cp
bucket中的文件时,会得到一个
AccessDeniedException

错误消息抱怨缺少
storage.object.create
storage.object.list
权限,具体取决于我的bucket目标路径是否以文件夹(
gs:///test///code>)或文件(
gs:///test.txt
)结尾

我是如何获得权限的(我已经尝试了很多,包括创建多余的自定义角色,我也将这些角色分配给了服务帐户):

  • 启动实例:
gcloud实例创建[…]\
--服务--account@.iam.gserviceaccount.com\
--scopes云平台,存储已满
  • 为服务帐户授予创建权限
  • 之后还要授予服务帐户权限(为了安全起见):
gcloud项目添加iam策略绑定\
--会员服务帐户:@.iam.gserviceaccount.com\
--角色/storage.objectAdmin
  • 编辑服务帐户的存储桶权限:
gsutil iam ch\
serviceAccount:@.iam.gserviceaccount.com:roles/storage.objectAdmin\
一般事务://
  • 编辑存储桶访问控制列表(所有者权限):
gsutil acl ch-u@.iam.gserviceaccount.com:O gs://
  • 在某些情况下,启用了bucket级别的IAM策略,而不是每个对象的策略(为了安全起见)
  • 在实例上,使用
    gcloud auth activate service account--key file.json
    对帐户进行身份验证

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

除了确保您使用的服务帐户具有适当的权限外,您还需要确保您使用的实例具有访问Google云存储的适当作用域,他们通常不会默认。您可以将作用域设置为
允许完全访问所有云API
,也可以单独设置它们(如果愿意)。您可以找到如何操作的说明。

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

这不是我在使用scopes cloud platform,storage full启动实例时所做的吗?更改服务帐户后是否重新启动实例?
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>