在 Go 应用程序中使用默认凭据时出现 GCP 权限问题

我的应用程序相当小:


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,它可以毫无缺陷地工作。


我究竟做错了什么?


梵蒂冈之花
浏览 142回答 3
3回答

qq_笑_17

当您使用 gcloud 命令进行测试时,您很可能不会使用服务帐户进行测试,而是使用个人帐户进行测试。这意味着您没有相同级别的许可,因此观察到的行为会受到尊重。执行 agcloud config list查看当前配置和用户。对于该权限compute.urlMaps.list,3 个策划角色包含该权限roles/compute.viewer roles/compute.networkViewer roles/compute.instanceAdmin.v1另外,不要忘记授予该角色roles/iam.serviceAccountUser将其中之一添加到您的服务帐户。

幕布斯7119047

我的同事发现了这个问题:我给的项目名称 my-prj错误。A404可能帮助我更快地发现问题。感谢其他答案,因为需要添加角色服务帐户用户。

一只斗牛犬

从 GCP 来看,我猜还需要启用 servceAccountUser 角色Roles/compute.admin 完全控制所有 Compute Engine 资源。如果用户将管理配置为作为服务帐户运行的虚拟机实例,您还必须授予 Roles/iam.serviceAccountUser 角色。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go