【问题标题】:Setting up service accounts between two projects在两个项目之间设置服务帐号
【发布时间】:2019-09-09 14:42:51
【问题描述】:

我有两个 GCP 项目,一个用于持续集成构建,一个用于团队项目。

com-build : 包含

  • 代码库上的触发器
  • 码头图片

服务帐号:1234@cloudbuild.gserviceaccount.com 具有角色 service-account-administrator 和 cloudbuild-service-account

g iam service-accounts get-iam-policy 1234@cloudbuild.gserviceaccount.com --project=com-build

--> etag: ACAB

com-project: 包含

  • 虚拟机模板
  • 虚拟机

服务帐户:5678-compute@developer.gserviceaccount.com 具有角色 service-account-administrator 和 compute-instance-administrator

g iam service-accounts get-iam-policy 5678-compute@developer.gserviceaccount.com --project=com-project

--> etag: ACAB –

我设置了 cloudbuild.json 文件以在代码推送时更新其容器,如下所示:

{
  "steps": [
    {
      "name": "gcr.io/cloud-builders/docker",
      "args": [
        "build",
        "-t",
        "****:latest",
        "."
      ]
    },
    {
      "name": "gcr.io/cloud-builders/docker",
      "args": [
        "push",
        "***:latest"
      ]
    },
    {
      "name": "gcr.io/cloud-builders/gcloud",
      "args": [
        "compute",
        "instances",
        "update-container",
        "***",
        "--project=com-project",
        "--zone=somewhere"
      ]
    }
  ]
}

我收到以下错误:

错误:(gcloud.compute.instances.update-container)用户没有 有权访问服务帐户 '5678-compute@developer.gserviceaccount.com'。用户: '1234@cloudbuild.gserviceaccount.com'。要求项目所有者授予 您是服务帐户的 iam.serviceAccountUser 角色

但两个服务帐户都有角色(我在 iam 设置上检查了 20 次) 我错过了什么吗?

【问题讨论】:

  • @bhito - 这是不正确的。项目编辑/所有者不需要跨项目访问资源。
  • 请编辑您的问题并发布使用gcloud 命令(以及您使用的命令)分配的实际角色。
  • @JohnHanley 感谢您指出,我很困惑。这个question 可以回答您的类似问题。
  • 两个服务账户都没有任何 IAM 成员分配权限。添加权限(角色)时,您可以将它们添加到项目中或直接添加到服务帐户中。你需要后者。您需要将roles/iam.serviceAccountUser 添加到服务帐户。 cloud.google.com/iam/docs/…
  • 似乎1234@cloudbuild.gserviceaccount.com 服务帐户缺少更新容器映像的权限。在IAM & admin > Roles 搜索compute.images.update(可能是执行update-container 的权限)以选择具有此权限的可用角色之一

标签: google-cloud-platform service-accounts


【解决方案1】:

发现了我的问题:
1234@cloudbuild.gserviceaccount.com 必须有权访问 Editor 的角色,才能编辑其他项目中的资源

【讨论】:

  • 虽然它有效,但使用最小权限访问始终是一个好习惯。编辑器是一个原始角色,具有许多您不需要的权限。一个好的做法是使用一个与您想要的相关的权限 (update-container)。例如,检查 compute.images.update 是否参与您的场景
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-24
  • 1970-01-01
相关资源
最近更新 更多