Bigquery IAM доступ из Java - PullRequest
0 голосов
/ 12 июня 2018

Я хочу предоставить новому пользователю bigquery.user доступ из Java API.Но как-то не получается сделать из документации, предоставленной .В отношении вызовов 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());
        }
    }

После выполнения я получаю следующую ошибку: Исключение в потоке "main" com.google.api.client.googleapis.json.GoogleJsonResponseException: 400 Bad Request {"code": 400, "errors": [{"domain": "global", "message": "Role (projects / dazzling-byway-184414 / role / bigquery.users) не существует в иерархии ресурса. "," Reason ":" badRequest "}]," message ":" Role (projects / dazzling-byway-184414 / role / bigquery.users) существуетне существует в иерархии ресурса. "," status ":" INVALID_ARGUMENT "}

Существует ли какой-либо конкретный формат передачи запроса?

1 Ответ

0 голосов
/ 15 июня 2018

Я согласен с комментарием, оставленным Xiaoxia, что вы должны попытаться использовать «bigquery.user» в качестве целевой роли.

Чтобы ответить на ваш другой вопрос о поиске дополнительной документации по API Java для доступа к IAM, я бы посмотрел эту ссылку для получения политики IAM и эту ссылку для настройки политики IAM.В верхней части примера кода Java вы найдете инструкции по настройке среды для использования API Java для доступа к IAM.Пример кода Java также служит ссылкой на то, что вы хотите сделать.

...