无法为gcp中的服务帐户分配角色

时间:2020-03-03 12:46:32

标签: java google-cloud-platform service-accounts google-cloud-automl

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

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

// =================设置策略=======================

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

此代码没有给出任何错误,也没有为提供的服务帐户设置角色。

1 个答案:

答案 0 :(得分:0)

因为您正在呼叫projects.serviceAccounts.setIamPolicy,并且因为您专门传递了serviceAccount,所以您只授予了自己的服务帐户编辑者角色

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

正如约翰·汉利(John Hanley)所说,您还需要像described here那样以读-修改-写周期来完成此操作。