我正在尝试使用服务帐户和bigquery客户端。出于某种原因,在制作客户端时,没有关于如何传递服务文件的Go示例。我在这里看到https://cloud.google.com/docs/authentication/production,但这种模式并没有显示任何显示的内容。它也没有显示在https://godoc.org/cloud.google.com/go/bigquery
我有
//bigquery_caller.go
package main
import "C"
import "fmt"
import "cloud.google.com/go/bigquery"
import "golang.org/x/net/context"
func main() {
ctx := context.Background()
client, err := bigquery.NewClient(ctx, "project-name")
if err != nil {
fmt.Println("Had an error")
}
q := client.Query(`
select * from mytables
`)
it, err := q.Read(ctx)
fmt.Println(it)
fmt.Println(err)
}
代码有效,我得
googleapi: Error 403: Access Denied: Project project-name:
如何将服务密钥文件传入客户端?
答案 0 :(得分:1)
您需要在项目中创建一个服务帐户并提供一个新的JSON私钥。
然后确保将GOOGLE_APPLICATION_CREDENTIALS
环境变量设置为此文件的完整路径。例如,在Linux上:
GOOGLE_APPLICATION_CREDENTIALS=/home/user/Downloads/key.json go run main.go
顺便说一句,最佳做法是确保您保护对此私钥文件的访问权限,并确保服务帐户具有执行其角色所需的最低权限。