Java &引用;“拒绝访问”;尝试访问GCE上的BigQuery时
我开发并构建了一个jar文件,用于处理从两个BigQuery表读取的数据,然后将其写入另一个BigQuery表。 (有三个GCP项目,每个项目都有自己的BigQuery表。) jar文件是Maven构建和打包的结果。我使用了数据流SDK依赖项 在构建了一个jar文件之后,我在Mac上对它进行了测试,并检查了它是否工作正常。 然后,我将一个jar文件上传到GCE并再次测试。我认为它会很好地工作,但会出现如下错误: com.google.api.client.googleapis.json.googlejson响应异常:403禁止 { “代码”:403, “错误”:[{ “域”:“全局”, “消息”:“拒绝访问:数据集${PROJECT\u ID}:${Dataset\u ID}:用户${MY\u ACCOUNT\u ID}没有数据集${PROJECT\u ID}:${Dataset\u ID}的bigquery.tables.list权限。”, “原因”:“拒绝访问” .... } 当我创建GCE实例时,我正确地设置了服务帐户。我确信这与此无关 我不明白为什么同一个jar运行方式不同,是否会出错 测试帐户是三个项目的成员或所有者。 在测试之前,我在Mac和GCE上使用以下命令:Java &引用;“拒绝访问”;尝试访问GCE上的BigQuery时,java,google-bigquery,dataflow,google-compute-engine,Java,Google Bigquery,Dataflow,Google Compute Engine,我开发并构建了一个jar文件,用于处理从两个BigQuery表读取的数据,然后将其写入另一个BigQuery表。 (有三个GCP项目,每个项目都有自己的BigQuery表。) jar文件是Maven构建和打包的结果。我使用了数据流SDK依赖项 在构建了一个jar文件之后,我在Mac上对它进行了测试,并检查了它是否工作正常。 然后,我将一个jar文件上传到GCE并再次测试。我认为它会很好地工作,但会出现如下错误: com.google.api.client.googleapis.json.goog
GoogleCredential credential = GoogleCredential.getApplicationDefault(HTTP_TRANSPORT, JSON_FACTORY);
Bigquery bigquery = new Bigquery.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential)
.setApplicationName("BdtAndroidGaSessionMigrator" + CalendarUtil.getYesterdayAsDateFormat()).build();
List<Tables> tableList = bigquery.tables().list("${PROJECT_ID}", "${DATASET_ID}").setMaxResults(9999999L).execute().getTables();
GoogleCredential credential=GoogleCredential.getApplicationDefault(HTTP_传输,JSON_工厂);
Bigquery Bigquery=new Bigquery.Builder(HTTP_传输、JSON_工厂、凭证)
.setApplicationName(“BdtAndroidGaSessionMigrator”+CalendarUtil.getYesterdayAsDateFormat()).build();
List tableList=bigquery.tables().List(“${PROJECT\u ID}”,“${DATASET\u ID}”).setMaxResults(9999999L.execute().getTables();
为了安全起见,我将项目id和数据集id替换为EL表达式
正如大家所知,Google Cloud SDK支持“gcloud init”命令。我也尝试了“gcloud init”命令,但结果并没有什么不同。
在我看来,根据GCP实例或本地计算机等环境的不同,上述命令的工作方式也有所不同
如何解决“拒绝访问”问题?请帮助解决此问题
附言。
请原谅我的英语不好。
我怀疑我的英语能准确地向你反映我的问题。我自己解决这个问题。 对于像我这样遇到同样问题的人 若要更正此问题,您可以检查每个项目是否设置了权限。每个帐户都设置了权限,即使它是服务帐户。我的意思是,您应该检查帐户GCP登录帐户和服务帐户是否作为成员添加到每个项目中。 在我的例子中,我添加了一个GCP登录帐户,但没有添加服务帐户
我希望这能帮助你我自己解决这个问题。 对于像我这样遇到同样问题的人 若要更正此问题,您可以检查每个项目是否设置了权限。每个帐户都设置了权限,即使它是服务帐户。我的意思是,您应该检查帐户GCP登录帐户和服务帐户是否作为成员添加到每个项目中。 在我的例子中,我添加了一个GCP登录帐户,但没有添加服务帐户 我希望这对你有帮助