Node.js 尝试从容器引擎盒向BigQuery插入数据失败

Node.js 尝试从容器引擎盒向BigQuery插入数据失败,node.js,google-bigquery,gcloud,google-kubernetes-engine,google-authentication,Node.js,Google Bigquery,Gcloud,Google Kubernetes Engine,Google Authentication,我有一个简单的node.js应用程序,它试图将一些数据插入BigQuery。它使用提供的gcloud node.js库 BigQuery客户端的创建方式如下所示: 有了它,我尝试将数据插入BiqQuery table.insert(someRows).then(...) 这失败了,因为BigQuery客户端返回403,告诉我身份验证缺少所需的作用域。文档告诉我使用以下代码段: if (authClient.createScopedRequired && authClie

我有一个简单的node.js应用程序,它试图将一些数据插入BigQuery。它使用提供的gcloud node.js库

BigQuery客户端的创建方式如下所示:

有了它,我尝试将数据插入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客户端库(如数据存储)在容器引擎吊舱上使用所描述的身份验证方案

到目前为止,我找到的唯一可行的解决方案是创建一个json密钥文件并将其提供给BigQuery客户端,但我更愿意动态创建凭据,然后将它们放在代码旁边


旁注:当在计算引擎VM上运行时,节点服务在没有为BigQuery提供auth选项的情况下工作得完美无缺,因为在那里,身份验证是由Google自动协商的。

将JSON密钥文件烘焙到图像(容器)中是一个坏主意(安全方面[如您所说])

您应该能够在Kubernetes集群创建期间将此类作用域添加到该集群中(以后不能进行调整)


看看这个“-scopes”

啊,我没有构建集群。看来这就是解决办法。谢谢,伙计!
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"
  ]);
}