【发布时间】:2018-06-12 15:38:29
【问题描述】:
我想从 java api 授予新用户 bigquery.user 访问权限。但不知何故无法从documentation provided 做。关于 API 调用的内容不多。有人能指出我正确的方向吗?
我现在正在使用以下代码:
package com.infy.entitlement;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.googleapis.util.Utils;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.services.cloudresourcemanager.model.GetIamPolicyRequest;
import com.google.api.services.iam.v1.Iam;
import com.google.api.services.iam.v1.IamScopes;
import com.google.api.services.iam.v1.model.Binding;
import com.google.api.services.iam.v1.model.Policy;
import com.google.api.services.iam.v1.model.SetIamPolicyRequest;
final HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
final JsonFactory jsonFactory = Utils.getDefaultJsonFactory();
final GoogleCredential credential = GoogleCredential
.getApplicationDefault(httpTransport, jsonFactory)
.createScoped(IamScopes.all());
final Iam iam = new Iam.Builder(
httpTransport, jsonFactory, credential)
.setApplicationName("SS")
.build();
String[] myViewers = new String[] {"user:testviewer1@gmail.com",
"user:testviewer2@gmail.com"};
String targetRole = "projects/***/roles/bigquery.users";
Policy policy = iam.projects().serviceAccounts().getIamPolicy("projects/***/serviceAccounts/****").execute();
Binding targetBinding = null;
List<Binding> bindings = new ArrayList<Binding>();
if(policy.getBindings() != null){
bindings = policy.getBindings();
}
if(bindings != null){
for (Binding binding : bindings) {
if (binding.getRole().equals(targetRole)) {
targetBinding = binding;
break;
}
}
}
if (targetBinding == null) {
targetBinding = new Binding();
targetBinding.setMembers(Arrays.asList(myViewers));
targetBinding.setRole(targetRole);
bindings.add(targetBinding);
}
policy.setBindings(bindings);
iam.projects().serviceAccounts().setIamPolicy("projects/****/serviceAccounts/******", SetIamPolicyRequest.class.newInstance().setPolicy(policy)).execute();
System.out.println(targetBinding.getRole());
}
}
执行后出现以下错误: 线程“主”com.google.api.client.googleapis.json.GoogleJsonResponseException 中的异常:400 错误请求 { “代码”:400, “错误”:[{ “域”:“全球”, "message" : "资源层次结构中不存在角色 (projects/dazzling-byway-184414/roles/bigquery.users)。", “原因”:“错误请求” }], "message" : "资源层次结构中不存在角色 (projects/dazzling-byway-184414/roles/bigquery.users)。", “状态”:“INVALID_ARGUMENT” }
是否有任何特定的传递请求的格式?
【问题讨论】:
-
我什至尝试过 String targetRole = "roles/bigquery.user";在这种情况下,我得到一个不同的错误:线程“main”com.google.api.client.googleapis.json.GoogleJsonResponseException:400 Bad Request {“code”:400,“errors”:[{“domain”:“ global", "message" : "此资源不支持角色角色/bigquery.user。", "reason" : "badRequest" } ], "message" : "此资源不支持角色角色/bigquery.user .", "status" : "INVALID_ARGUMENT" }
-
来自sample code,String targetRole = "viewers" 不包括“projects/***/roles/”。你可以试试"bigquery.user" 吗?
标签: google-cloud-platform google-bigquery google-iam google-api-explorer