将服务帐户密钥文件传递给bigquery客户端

时间:2017-07-24 14:13:20

标签: go google-bigquery google-cloud-platform

我正在尝试使用服务帐户和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:

如何将服务密钥文件传入客户端?

1 个答案:

答案 0 :(得分:1)

您需要在项目中创建一个服务帐户并提供一个新的JSON私钥。

然后确保将GOOGLE_APPLICATION_CREDENTIALS环境变量设置为此文件的完整路径。例如,在Linux上:

GOOGLE_APPLICATION_CREDENTIALS=/home/user/Downloads/key.json go run main.go

顺便说一句,最佳做法是确保您保护对此私钥文件的访问权限,并确保服务帐户具有执行其角色所需的最低权限。