0

일부 데이터를 BigQuery에 삽입하려고하는 간단한 node.js 애플리케이션이 있습니다. 제공된 gcloud node.js 라이브러리를 사용합니다.컨테이너 엔진 포드에서 BigQuery에 데이터를 삽입하지 못했습니다.

BigQuery의 클라이언트는 documentation에 따라, 다음과 같이 생성됩니다 : 나는 BiqQuery에 데이터를 삽입하려고 그와

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"); 
}); 

.

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

BigQuery 클라이언트가 인증에 필요한 범위가 누락되었음을 알리는 403을 반환하기 때문에 실패합니다. 은 if 문이 실행되지 않기 때문에이이 중 하나가 작동하지 않았다

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를 건너 뛰고 매번 범위를 설정했지만 오류가 남아 있습니다.

무엇이 여기에 있습니까? authClient 구성에 관계없이 범위가 항상 잘못된 이유는 무엇입니까? 컨테이너 엔진 포드에 설명 된 인증 방식을 사용하여이 또는 유사한 gcloud 클라이언트 라이브러리 (Datastore와 같은)를 얻을 수있는 방법을 찾은 사람이 있습니까?

지금까지 발견 한 유일한 해결책은 json 키 파일을 생성하여 BigQuery 클라이언트에 제공하는 것입니다.하지만 코드 바로 옆에 자격 증명을 작성하는 것이 좋습니다.

사이드 노트 : Google에서 자동으로 인증을 협상하기 때문에 Compute Engine VM에서 실행할 때 노드 서비스가 BigQuery에 auth 옵션을 제공하지 않아도 완벽하게 작동합니다.

답변

1

이미지 (컨테이너)에 JSON-Keyfiles를 베이킹하는 것은 좋지 않습니다 (보안 현명한 [말한대로]).

Kubernetes Cluster를 만들 때이 종류의 범위를 추가 할 수 있어야합니다 (나중에 조정할 수 없음).

doc를 살펴 보자는

+0

아, 내가 클러스터를 구축하지 않았다 "--scopes". 그게 해결책 인 것 같습니다. 고마워, 친구! –