【发布时间】: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