BigQuery Node.js API Permission Bug
我正在构建一个Node.js服务器以对BigQuery运行查询。出于安全原因,我希望该服务器为只读。例如,如果我用
为解决此问题,我决定使用具有" jobUser "级访问权限的服务帐户。根据BQ文档,这应该允许我运行查询,但是我不能"修改/删除表"。
因此,我使用Google Cloud Console UI创建了这样的服务帐户,并将该文件作为下面代码中的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | // Get service account key for .env file require( 'dotenv' ).config() const BigQuery = require( '@google-cloud/bigquery' ); // Query goes here const query = ` SELECT * FROM \\`dataset.table0\\` LIMIT 10 ` // Creates a client const bigquery = new BigQuery({ projectId: process.env.BQ_PROJECT, keyFilename: process.env.BQ_SERVICE_ACCOUNT }); // Use standard sql const query_options = { query : query, useLegacySql : false, useQueryCache : false } // Run query and log results bigquery .query( query_options ) .then( console.log ) .catch( console.log ) |
然后我在BigQuery中针对我的测试数据集/表运行以上代码。但是,运行此代码会导致以下错误消息(仅供参考:
1 | { ApiError: Access Denied: Project exemplary-city-194015: The user [email protected] does not have bigquery.jobs.create permission in project exemplary-city-194015. |
奇怪的是我的服务帐户(
实际上,我测试了所有可能的访问控制级别(dataViewer,dataEditor,...,admin),并且除" admin "角色以外的每个角色均收到错误消息。因此,我的服务帐户配置不正确,或者@ google-cloud / bigquery出现了一些错误。我不想使用具有\\'admin \\'级访问权限的服务帐户,因为这允许我运行
解决方案:
我创建了一个服务帐户,并为其分配了具有
我解决了自己的问题。要进行查询,您需要同时具有
如错误消息所示,您的服务帐户无权创建BigQuery Job
您需要向其授予role / bigquery.user或Roles / bigquery.jobUser访问权限,请参阅BigQuery访问控制角色,如本参考资料中所见,dataViewer和dataEditor没有创建作业/查询,但admin拥有,但是你不需要那个
要执行所需的角色,您可以按照为资源授予对服务帐户的访问权限中的指示
使用gcloud在命令行中运行
1 2 3 | gcloud projects add-iam-policy-binding $BQ_PROJECT \\ --member serviceAccount:$SERVICE_ACOUNT_EMAIL \\ --role roles/bigquery.user |
其中
或者在Google Cloud Platform控制台中搜索或添加您的服务帐户电子邮件/ ID,并为其提供所需的ACL