通过部署管理器创建GCP项目

3

我正在尝试使用Google云端部署管理器创建一个项目,我将设置大致如下:

# Structure
Org -> Folder1 -> Seed-Project(Location where I am running deployment manager from)

Organization:
  IAM:
    -> {Seed-Project-Number}@cloudservices.gserviceaccount.com:
        - Compute Network Admin
        - Compute Shared VPC Admin
        - Organisation Viewer
        - Project Creator

# DeploymentManager Resource:
type    cloudresourcemanager.v1.project
name    MyNewProject
parent  
  id: '{folder1-id}'
  type: folder
projectId: MyNewProject


期望结果是MyNewProject应该在Folder1下创建。 然而,似乎部署管理器服务账户没有足够的权限:
$ CLOUDSDK_CORE_PROJECT=Seed-Project gcloud deployment-manager deployments \
  create MyNewDeployment \
  --config config.yaml \
  --verbosity=debug

错误消息:

- code: RESOURCE_ERROR
  location: /deployments/MyNewDeployment/resources/MyNewProject
  message: '{"ResourceType":"cloudresourcemanager.v1.project",
             "ResourceErrorCode":"403","ResourceErrorMessage":{"code":403,"message":"The
    caller does not have permission","status":"PERMISSION_DENIED","statusMessage":"Forbidden","requestPath":"https://cloudresourcemanager.googleapis.com/v1/projects/MyNewProject","httpMethod":"GET"}}'

我进行了一些调查,似乎是在调用 resourcemanager.projects.get 方法;根据这里的文档,'Compute Shared VPC Admin (roles/compute.xpnAdmin)' 角色 应该 提供此权限: https://cloud.google.com/iam/docs/understanding-roles 但实际情况并非如此,发生了什么?

编辑

我想添加一些从调试努力中收集到的附加信息:

这些是来自部署经理的API请求(来自种子项目)。

您可以看到调用者是匿名服务帐户,这不是我期望看到的。(我希望在这里看到 {Seed-Project-Number}@cloudservices.gserviceaccount.com 作为调用帐户)

screenshot

编辑-2

config.yaml

imports:
  - path: composite_types/project/project.py
    name: project.py

resources:
  - name: MyNewProject
    type: project.py
    properties:
      parent:
        type: folder
        id: "{folder1-id}"
      billingAccountId: billingAccounts/REDACTED
      activateApis:
        - compute.googleapis.com
        - deploymentmanager.googleapis.com
        - pubsub.googleapis.com
      serviceAccounts: []

composite_types/project/* 是这里找到的模板的精确副本:

https://github.com/GoogleCloudPlatform/deploymentmanager-samples/tree/master/community/cloud-foundation/templates/project


3
您需要使用 resourcemanager.projects.create 权限,或者拥有预定义角色 roles/ownerroles/editor 中的一个。这些权限需要在组织或文件夹级别上授予。 - John Hanley
很难在没有看到(已编辑)config.yaml文件的情况下确定。作为参考,这里详细解释了它。 - Martin Zeitler
嗨,马丁,谢谢你提供的链接。我已经在遵循同一仓库的指示(但是在不同的位置 - 它们似乎基本相同); 我已添加了已编辑的config.yaml文件和我正在使用的项目模板的链接。 - Chronojam
1
你在哪里执行了你的部署代码?是在Cloud Shell还是本地Shell? - howie
如果你愿意使用v2版本,看起来这里有一个不同的样例:https://github.com/GoogleCloudPlatform/deploymentmanager-samples/tree/master/examples/v2/project_creation - afed
显示剩余6条评论
2个回答

2

关键是这是一个GET操作,而不是创建项目的尝试。这是为了验证所请求的项目ID的全局唯一性,如果不唯一,则会抛出PERMISSION_DENIED。

糟糕的错误消息,浪费了许多开发人员的时间!


0

可能有点晚了,但是我想分享一下今天遇到的类似问题。我仔细检查了Readme中提到的服务帐户的每个权限,这些权限是在部署管理器作业运行的帐户下(问题中的{Seed-Project-Number}@cloudservices.gserviceaccount.com),结果发现与我之前想象的相反,Billing Account User角色没有被分配。授予该角色并再次运行即可解决问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接