0

我有一个简单的node.js应用程序,它试图将一些数据插入到BigQuery中。它使用提供的gcloud node.js库。尝试从容器引擎窗格中插入数据到BigQuery失败

的BigQuery的客户端这样的创建,根据documentation

google.auth.getApplicationDefault(function(err, authClient) { 
    if (err) { 
    return cb(err); 
    } 
    let bq = BigQuery({ 
    auth: authClient, 
    projectId: "my-project" 
    }); 
    let dataset = bq.dataset("my-dataset"); 
    let table = dataset.table("my-table"); 
}); 

有了,我尝试将数据插入到BiqQuery。

table.insert(someRows).then(...) 

这会失败,因为BigQuery客户端返回403告诉我身份验证缺少所需的作用域。该文档告诉我使用以下代码片段:

if (authClient.createScopedRequired && 
    authClient.createScopedRequired()) { 
    authClient = authClient.createScoped([ 
    "https://www.googleapis.com/auth/bigquery", 
    "https://www.googleapis.com/auth/bigquery.insertdata", 
    "https://www.googleapis.com/auth/cloud-platform" 
    ]); 
} 

这也不起作用,因为if语句从不执行。我跳过了if并且每次都设置了示波器,但错误依然存在。

我在这里错过了什么?无论authClient配置如何,范围总是错误的?有没有人找到一种方法来获得这个或类似的gcloud客户端库(如Datastore)在Container Engine pod上使用所描述的身份验证方案?

我目前发现的唯一工作解决方案是创建一个json密钥文件并将其提供给BigQuery客户端,但我宁愿随时创建凭据,然后将它们放在代码旁边。

备注:当在Compute Engine虚拟机上运行时,节点服务完美无缺地为BigQuery提供验证选项,因为Google会自动协商身份验证。

回答

1

烘焙到图像(容器)的JSON-Keyfiles是个坏主意(安全智慧[正如你所说])。

您应该能够在创建Kubernetes群集时添加这些类型的范围(以后无法调整)。

看看这个doc“--scopes”

+0

啊,我没有建立集群。看起来这是解决方案。谢啦! –