我有两个 GCP 项目,用于 kubernetes 资源的 projectA 和用于 product-search-api 和 spanner 数据库的 projectB。我在 projectB 中创建了一个具有所需权限的服务帐户,并将其credentials.json
作为GOOGLE_APPLICATION_CREDENTIALS
env 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
。我有什么错误吗?