0

我有两个 GCP 项目,用于 kubernetes 资源的 projectA 和用于 product-search-api 和 spanner 数据库的 projectB。我在 projectB 中创建了一个具有所需权限的服务帐户,并将其credentials.json作为GOOGLE_APPLICATION_CREDENTIALSenv var安装到 projectA 中的服务,它运行良好

但正因为如此,使用 projectA 中的功能的服务还有一些其他权限问题,例如。堆栈驱动程序监控等。我可以将这些权限授予我创建的服务帐户,但后来我发现了一个ClientOption - withCredentialsFile.

我计划在不修改GOOGLE_APPLICATION_CREDENTIALS服务中的 env var 的情况下使用此选项,即继续使用 projectA 凭据。所以,我把它传递给了像下面这样的扳手客户端,它运行良好

client, err := spanner.NewClientWithConfig(context, dbn, spanner.ClientConfig{
        SessionPoolConfig: spanner.SessionPoolConfig{
            MaxIdle: 100,
        },
    }, option.WithCredentialsFile(cfg.CredsPathtoProjectB))

但是当我通过它vision.NewImageAnnotatorClient向 ProductSearchAPI 发出请求时,我得到Permission Denied.

c, err := vision.NewImageAnnotatorClient(context, option.WithCredentialsFile(cfg.CredsPathtoProjectB))
ictx := &pb.ImageContext{
    ProductSearchParams: &pb.ProductSearchParams{
        ProductSet:        fmt.Sprintf("projects/%s/locations/%s/productSets/%s", cfg.ProjectID, cfg.ProjectLocation, cfg.ProductSetID),
        ProductCategories: []string{cfg.ProductCategory},
        Filter:            filter,
    },
}
response, err := c.AnnotateImage(ctx, &pb.AnnotateImageRequest{
    Image:        img,
    ImageContext: ictx,
    Features:     []*pb.Feature{{Type: visionpb.Feature_PRODUCT_SEARCH, 
    MaxResults: int32(maxItems)}},
})
------------------------
<OUTPUT>
"response:":"error:{code:7 message:\"Permission denied.\"}"

覆盖时我可以使用相同的凭据来请求产品搜索 API GOOGLE_APPLICATION_CREDENTIALS。我有什么错误吗?

4

1 回答 1

0

您不需要拥有服务帐户的所有者权限。但是,如果产品搜索资源在 projectB 中,则您必须使用 projectB 中的服务帐户调用 Vision API。

于 2022-02-07T23:52:29.463 回答