Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法将角色分配给gcp中的服务帐户_Java_Google Cloud Platform_Service Accounts_Google Cloud Automl - Fatal编程技术网

Java 无法将角色分配给gcp中的服务帐户

Java 无法将角色分配给gcp中的服务帐户,java,google-cloud-platform,service-accounts,google-cloud-automl,Java,Google Cloud Platform,Service Accounts,Google Cloud Automl,我能够创建服务帐户,但在为服务帐户分配角色时遇到问题。这是我正在使用的方法 CloudResourceManager cloudResourceManagerService = createCloudResourceManagerService(clientId, clientSecret); GetIamPolicy getrequest = cloudResourceManagerService.projects().getIamPolicy

我能够创建服务帐户,但在为服务帐户分配角色时遇到问题。这是我正在使用的方法

CloudResourceManager cloudResourceManagerService = createCloudResourceManagerService(clientId,
                clientSecret);

        GetIamPolicy getrequest = cloudResourceManagerService.projects().getIamPolicy(projectId,
                new GetIamPolicyRequest());

        Policy response = getrequest.execute();

//Modification to policy        

        List<String> members = response.getBindings().get(0).getMembers();
        members.add("serviceAccount:name@my-project.iam.gserviceaccount.com");
        response.getBindings().get(0).setMembers(members);
此代码没有给出任何错误,但也没有为所提供的服务帐户设置角色。

因为您正在调用,并且因为您正在传递服务帐户,所以您只在自身上授予服务帐户编辑器角色

如果希望服务帐户成为项目的编辑器,则必须调用,并且要指定的资源应该是项目本身


正如John Hanley所说,您还需要以读-修改-写循环的方式执行此操作。

策略不能直接分配给项目资源。必须首先读取现有策略(即使为空),更新策略,然后更新项目资源。
         String resource = "projects/" + projectId + "/serviceAccounts/" +
                 "name@my-project.iam.gserviceaccount.com";

        SetIamPolicyRequest requestBody = new SetIamPolicyRequest().setPolicy(response);
        SetIamPolicy setrequest = cloudResourceManagerService.projects().setIamPolicy(resource, requestBody);
        Policy newResponse = setrequest.execute();