Google Cloud BigQuery Admin服务帐户获得“没有bigquery.jobs.create权限”

时间:2019-03-27 03:44:58

标签: java google-cloud-platform google-bigquery google-iam

我是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)

我所做的:

  1. 创建了新的Google Cloud帐户
  2. 创建了一个新项目,Google为其分配了项目ID airy-advantage-235802,项目名称为Kafka Learning。
  3. 创建了一个服务帐户kafka-learning@airy-advantage-235802.iam.gserviceaccount.com
  4. 授予该用户项目中的BigQuery Admin角色(我最初尝试使用BigQuery User和BigQuery Data Viewer)
  5. 我将JSON凭证文件保存到本地文件夹
  6. 我将环境变量GOOGLE_APPLICATION_CREDENTIALS设置为JSON文件的路径
  7. 我有一个tiny Java project to query a public dataset
  8. 收到上述错误
  9. 已启用验证的帐单(据我所知,请参阅下文)

我错过了一步吗?

Google Cloud Project setup

Service Account Setup

enter image description here

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();

2 个答案:

答案 0 :(得分:1)

通常,当您删除并创建与“新”服务帐户同名的服务帐户时,可能会绑定旧角色。因此,您可以:

  • 使用新的服务帐户
  • 明确删除将该角色授予服务帐户的所有绑定
  • 将这些角色重新授予“新”服务帐户。

有关更多信息,您可以检查此link

希望有帮助。

答案 1 :(得分:0)

我也遇到这个问题。阅读文档即可解决。

可以删除服务帐户,然后创建一个具有相同名称的新服务帐户。如果您重复使用已删除服务帐户的名称,则可能会导致意外行为。

删除服务帐户时,不会立即删除其角色绑定。如果使用与最近删除的服务帐户相同的名称创建一个新的服务帐户,则旧的绑定可能仍然存在;但是,即使两个帐户具有相同的电子邮件地址,它们也将不适用于新服务帐户。发生此现象的原因是,在创建服务帐户时,Cloud IAM中为其提供了唯一ID。在内部,所有角色绑定都是使用这些ID而不是服务帐户的电子邮件地址授予的。因此,已删除的服务帐户存在的任何角色绑定都不适用于使用相同电子邮件地址的新服务帐户。

为避免混淆,我们建议使用唯一的服务帐户名。如果无法做到这一点,则可以通过以下方式为新服务帐户授予角色:

明确删除所有将角色授予旧服务帐户的绑定。 将这些角色重新授予新的服务帐户。 您必须先删除角色绑定,然后才能重新添加它们。通过将角色授予旧的,已删除的服务帐户,再次简单地再次授予角色将无声地失败。 enter link description here