尝试从容器引擎 pod 将数据插入 BigQuery 失败
Trying to insert data into BigQuery fails from container engine pod
我有一个简单的 node.js 应用程序试图将一些数据插入 BigQuery。它使用提供的 gcloud node.js 库。
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 客户端 returns 一个 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 客户端库(如数据存储)在容器引擎 pod 上使用所描述的身份验证方案?
目前我发现的唯一可行的解决方案是创建一个 json 密钥文件并将其提供给 BigQuery 客户端,但我宁愿即时创建凭据,然后将它们放在代码旁边。
旁注:在 Compute Engine VM 上 运行 时,节点服务无需向 BigQuery 提供身份验证选项即可完美运行,因为身份验证由 Google 自动协商。
将 JSON-Keyfiles 烘焙到图像(容器)中是个坏主意(安全明智 [如您所说])。
您应该能够在 Kubernetes 集群创建期间将这些范围添加到它(之后无法调整)。
看看这个doc“--scopes”
我有一个简单的 node.js 应用程序试图将一些数据插入 BigQuery。它使用提供的 gcloud node.js 库。
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 客户端 returns 一个 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 客户端库(如数据存储)在容器引擎 pod 上使用所描述的身份验证方案?
目前我发现的唯一可行的解决方案是创建一个 json 密钥文件并将其提供给 BigQuery 客户端,但我宁愿即时创建凭据,然后将它们放在代码旁边。
旁注:在 Compute Engine VM 上 运行 时,节点服务无需向 BigQuery 提供身份验证选项即可完美运行,因为身份验证由 Google 自动协商。
将 JSON-Keyfiles 烘焙到图像(容器)中是个坏主意(安全明智 [如您所说])。
您应该能够在 Kubernetes 集群创建期间将这些范围添加到它(之后无法调整)。
看看这个doc“--scopes”