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

啊,我沒有建立集羣。看起來這是解決方案。謝啦! –