4

我正在尝试像在 GoDoc 中一样插入一个简单的记录。但这又回来了,

rpc error: code = 7 desc = "User can't access project: tidy-groove"

当我搜索 grpc 代码时,它说..

PermissionDenied Code = 7

// Unauthenticated indicates the request does not have valid
// authentication credentials for the operation.

我在控制台中启用了大表并创建了一个集群和一个服务帐户并收到了 json。我在这里做错了什么?

package main

import (
"fmt"
"golang.org/x/net/context"
"golang.org/x/oauth2/google"
"google.golang.org/cloud"
"google.golang.org/cloud/bigtable"
"io/ioutil"
)

func main() {
fmt.Println("Start!")
put()
}

func getClient() *bigtable.Client {
jsonKey, err := ioutil.ReadFile("TestProject-7854ea9op741.json")
if err != nil {
    fmt.Println(err.Error())
}

config, err := google.JWTConfigFromJSON(
    jsonKey,
    bigtable.Scope,
) // or bigtable.AdminScope, etc.

if err != nil {
    fmt.Println(err.Error())
}

ctx := context.Background()
client, err := bigtable.NewClient(ctx, "tidy-groove", "asia-east1-b", "test1-bigtable", cloud.WithTokenSource(config.TokenSource(ctx)))

if err != nil {
    fmt.Println(err.Error())
}

return client
}

func put() {
ctx := context.Background()
client := getClient()
tbl := client.Open("table1")
mut := bigtable.NewMutation()
mut.Set("links", "maps.google.com", bigtable.Now(), []byte("1"))
mut.Set("links", "golang.org", bigtable.Now(), []byte("1"))
err := tbl.Apply(ctx, "com.google.cloud", mut)
if err != nil {
    fmt.Println(err.Error())
}
}
4

2 回答 2

3

我已经解决了这个问题。代码没有问题,但是配置json本身。因此,任何想要通过谷歌搜索进行身份验证并来到这里的人......这段代码是正确的并且运行良好。我做错了什么如下。

首先,我创建了一个服务帐户并获得了 json。但是谷歌警告我,我不是项目的所有者,因此它不会被添加到接受列表中,但无论如何它让我下载了 json。然后我从控制台中删除了该密钥并要求项目所有者为我创建一个密钥。在那里,他创建了另一个与我给定的名称相同的密钥。由于他是所有者,因此没有显示错误/警告消息,并且成功下载了 json 文件。

当我尝试这样做时……我的问题开始了。那是我发布这个问题的时候。之后没有解决方案。我要求所有者删除该密钥并创建另一个密钥但名称不同..

然后它起作用了!如果您尝试使用非所有者帐户创建一个密钥,然后再次使用相同的名称创建(当然是在删除原始帐户之后),似乎没有效果。希望这对大家有帮助:)

于 2015-12-16T04:12:27.987 回答
1

看一下:使用环境变量的helloworld.gosearch.go 。GOOGLE_APPLICATION_CREDENTIALS

对于大多数环境,您甚至不再需要设置GOOGLE_APPLICATION_CREDENTIALS. Google Cloud PlatformManaged VMsGoogle App Engine都为您设置了正确的东西。如果您使用过gcloud init或它的前身gcloud auth login后跟.,您的桌面环境也将是正确的gcloud config set project <projectID>

于 2015-12-15T01:55:18.090 回答