我是Google Cloud&BigQuery的新手。我查看了似乎相关的其他十二个问题,但没有看到这些答案中缺少的内容。我正在尝试查询公共数据集。
错误:
Caused by: com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
{
"code" : 403,
"errors" : [ {
"domain" : "global",
"message" : "Access Denied: Project airy-advantage-235802: The user kafka-learning@airy-advantage-235802.iam.gserviceaccount.com does not have bigquery.jobs.create permission in project airy-advantage-235802.",
"reason" : "accessDenied"
} ],
"message" : "Access Denied: Project airy-advantage-235802: The user kafka-learning@airy-advantage-235802.iam.gserviceaccount.com does not have bigquery.jobs.create permission in project airy-advantage-235802."
}
at com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:150)
at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:113)
at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:40)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest$1.interceptResponse(AbstractGoogleClientRequest.java:401)
at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1132)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:499)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:432)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:549)
at com.google.cloud.bigquery.spi.v2.HttpBigQueryRpc.create(HttpBigQueryRpc.java:183)
我所做的:
GOOGLE_APPLICATION_CREDENTIALS
设置为JSON文件的路径我错过了一步吗?
var bigquery = BigQueryOptions.getDefaultInstance().getService();
var query = "SELECT * FROM `bigquery-public-data.google_analytics_sample.ga_sessions_20160801` LIMIT 10";
var queryConfig = QueryJobConfiguration.newBuilder(query).build();
var table = bigquery.query(queryConfig);
我还尝试通过将构建器更改为此来显式设置项目ID(也在json文件中):
var bigquery = BigQueryOptions.newBuilder().setProjectId("airy-advantage-235802").build().getService();
答案 0 :(得分:1)
通常,当您删除并创建与“新”服务帐户同名的服务帐户时,可能会绑定旧角色。因此,您可以:
有关更多信息,您可以检查此link
希望有帮助。
答案 1 :(得分:0)
我也遇到这个问题。阅读文档即可解决。
可以删除服务帐户,然后创建一个具有相同名称的新服务帐户。如果您重复使用已删除服务帐户的名称,则可能会导致意外行为。
删除服务帐户时,不会立即删除其角色绑定。如果使用与最近删除的服务帐户相同的名称创建一个新的服务帐户,则旧的绑定可能仍然存在;但是,即使两个帐户具有相同的电子邮件地址,它们也将不适用于新服务帐户。发生此现象的原因是,在创建服务帐户时,Cloud IAM中为其提供了唯一ID。在内部,所有角色绑定都是使用这些ID而不是服务帐户的电子邮件地址授予的。因此,已删除的服务帐户存在的任何角色绑定都不适用于使用相同电子邮件地址的新服务帐户。
为避免混淆,我们建议使用唯一的服务帐户名。如果无法做到这一点,则可以通过以下方式为新服务帐户授予角色:
明确删除所有将角色授予旧服务帐户的绑定。 将这些角色重新授予新的服务帐户。 您必须先删除角色绑定,然后才能重新添加它们。通过将角色授予旧的,已删除的服务帐户,再次简单地再次授予角色将无声地失败。 enter link description here