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>