我的应用程序很小:
import (
"context"
"fmt"
"log"
"google.golang.org/api/compute/v1"
)
func main() {
ctx := context.Background()
computeService, err := compute.NewService(ctx)
urlMapCall := computeService.UrlMaps.List("my-prj")
urlMaps, err := urlMapCall.Do()
if err != nil {
log.Println(err)
return
}
for _, mp := range urlMaps.Items {
fmt.Println(mp.Name)
}
}
我得到了错误:
googleapi: Error 403: Required 'compute.urlMaps.list' permission for 'projects/my-prj', forbidden
我设置了环境变量GOOGLE_APPLICATION_CREDENTIALS=$HOME/.gcp/my-prj-aef233we.json
。 JSON表示的服务帐户具有项目编辑器和计算管理角色。
当我执行gcloud compute url-maps list
时,它可以正常工作。
我在做什么错了?
答案 0 :(得分:1)
在GCP中,还需要启用我猜的servceAccountUser角色
roles / compute.admin对Compute Engine所有资源的完全控制。
如果用户将要管理的虚拟机实例是 配置为作为服务帐户运行,您还必须授予 角色/iam.serviceAccountUser角色。
答案 1 :(得分:1)
使用gcloud命令进行测试时,很有可能您不是使用服务帐户而是使用个人帐户进行测试。这意味着您没有相同的权限级别,因此尊重所观察到的行为。执行gcloud config list
以查看当前配置和用户。
对于权限compute.urlMaps.list
,包含3个指定角色
roles/compute.viewer
roles/compute.networkViewer
roles/compute.instanceAdmin.v1
此外,别忘了授予角色roles/iam.serviceAccountUser
将其中之一添加到您的服务帐户中。
答案 2 :(得分:1)
我的同事发现了问题:我给项目名称 my-prj
输入了错误的代码。 404
可以帮助我更快地发现问题。
感谢其他答案,因为需要添加角色服务帐户用户。