Google cloud platform 部署管理器无法更新存储桶名称
我使用与示例完全相同的模板。 我首先使用bucket名称X部署模板:Google cloud platform 部署管理器无法更新存储桶名称,google-cloud-platform,google-deployment-manager,Google Cloud Platform,Google Deployment Manager,我使用与示例完全相同的模板。 我首先使用bucket名称X部署模板: imports: - path: templates/gcs_bucket/gcs_bucket.py name: gcs_bucket.py resources: - name: X type: gcs_bucket.py properties: name: X location: us-east1 versioning: enabled:
imports:
- path: templates/gcs_bucket/gcs_bucket.py
name: gcs_bucket.py
resources:
- name: X
type: gcs_bucket.py
properties:
name: X
location: us-east1
versioning:
enabled: True
labels:
env: development
它运行成功
接下来,我尝试使用相同的模板进行部署,但将bucket名称更改为:Y
imports:
- path: templates/gcs_bucket/gcs_bucket.py
name: gcs_bucket.py
resources:
- name: Y
type: gcs_bucket.py
properties:
name: Y
location: us-east1
versioning:
enabled: True
labels:
env: development
使用update命令
gcloud deployment-manager deployments create s3-sample --config gcs_bucket.yaml
它以失败告终
Waiting for update [operation-1596317964460-5abd7bd3863a0-46f678bb-c6e8f7f7]...failed.
ERROR: (gcloud.deployment-manager.deployments.update) Error in Operation [operation-1596317964460-5abd7bd3863a0-46f678bb-c6e8f7f7]: errors:
- code: RESOURCE_ERROR
location: /deployments/s3-sample/resources/X
message: '{"ResourceType":"gcp-types/storage-v1:buckets","ResourceErrorCode":"403","ResourceErrorMessage":{"code":403,"errors":[{"domain":"global","message":"XXX@cloudservices.gserviceaccount.com
does not have storage.buckets.get access to the Google Cloud Storage bucket.","reason":"forbidden"}],"message":"XXX@cloudservices.gserviceaccount.com
does not have storage.buckets.get access to the Google Cloud Storage bucket.","statusMessage":"Forbidden","requestPath":"https://storage.googleapis.com/storage/v1/b/X","httpMethod":"GET","suggestion":"Consider
granting permissions to XXX@cloudservices.gserviceaccount.com"}}'
但是bucket Y创建成功,bucket X没有被删除?
我做错了什么?
删除X bucket后,我再次尝试了update命令,它成功了。在云存储中,对象是不可变的,这意味着上载或创建的对象在其存储生命周期内无法更改。这意味着不能重命名存储桶 :
- bucket name只能在创建过程中分配。无法更改现有存储桶的名称。相反,您应该使用所需的名称创建一个新的bucket,并从中移动内容 旧桶换新桶。看一看 循序渐进的指导
- 如果旧bucket中没有数据,请删除该bucket并使用新名称创建另一个bucket
项目编辑器
角色:
CloudShell:$ gcloud projects get-iam-policy my-project --flatten="bindings[].members" --format='table(bindings.role)' --filter="bindings.members:111111111111@cloudservices.gserviceaccount.com"
ROLE
roles/editor
CloudShell:$ gcloud iam roles describe roles/editor | grep storage.buckets
- storage.buckets.create
- storage.buckets.delete
- storage.buckets.list
如您所见,项目编辑器
角色包括对bucket的创建
和删除
权限,但不包括获取
。这就是为什么第一次部署正常并创建一个新bucketX。但是第二次部署失败,因为它无法删除以前的bucketX,而成功创建了新bucketY。这也解释了当您手动删除bucketX时,第二次部署成功的原因
要使其正常工作,您应该遵循cloud foundation toolkit上的文档。: 先决条件
- 将
IAM角色授予部署管理器服务帐户storage.admin
Storage Admin
角色包括所有Storage.bucket.
角色,包括get
:
根据描述判断,您正试图再次为bucket Y创建一个名为s3 sample的部署。您实际想要实现的是:1)创建两个bucket X和Y;或者2)更新bucket X的现有部署s3示例,以便将bucket名称更改为Y?您使用的帐户是否被授予了
storage.admin
IAM角色?@mebius99 2)我想将bucket名称X更新为Y。我相信这是因为部署管理器使用的服务帐户没有足够的权限删除存储桶。重命名一个bucket只是创建一个新bucket,移动内容并删除旧bucket
CloudShell:$ gcloud projects get-iam-policy my-project --flatten="bindings[].members" --format='table(bindings.role)' --filter="bindings.members:111111111111@cloudservices.gserviceaccount.com"
ROLE
roles/editor
CloudShell:$ gcloud iam roles describe roles/editor | grep storage.buckets
- storage.buckets.create
- storage.buckets.delete
- storage.buckets.list