You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Java编程获取GCP服务账号的权限

获取GCP服务账号已分配权限的Java实现方法

所需Maven依赖

首先在你的pom.xml中引入GCP IAM客户端库:

<dependency>
    <groupId>com.google.cloud</groupId>
    <artifactId>google-cloud-iam</artifactId>
    <version>2.27.0</version> <!-- 使用最新稳定版本即可 -->
</dependency>

核心逻辑说明

GCP服务账号的权限通过IAM角色绑定或直接权限分配实现。要获取已分配权限,分为两步:

  1. 获取目标服务账号的IAM政策,从中提取已绑定的所有角色;
  2. (可选)获取每个角色对应的具体权限列表(因为角色是权限的集合)。

代码示例

1. 获取服务账号的IAM政策(已绑定角色)

import com.google.cloud.iam.v1.IamClient;
import com.google.cloud.iam.v1.Policy;
import com.google.cloud.iam.v1.ServiceAccountName;
import java.io.IOException;

public class ServiceAccountRoleBindings {
    public static void main(String[] args) {
        String projectId = "你的项目ID";
        String serviceAccountEmail = "你的服务账号邮箱@你的项目ID.iam.gserviceaccount.com";
        
        try (IamClient iamClient = IamClient.create()) {
            // 构建服务账号的资源名称
            ServiceAccountName saResourceName = ServiceAccountName.of(projectId, serviceAccountEmail);
            // 获取服务账号的IAM政策
            Policy policy = iamClient.getIamPolicy(saResourceName);
            
            // 遍历所有角色绑定关系
            policy.getBindingsList().forEach(binding -> {
                System.out.printf("绑定角色: %s%n", binding.getRole());
                System.out.printf("关联成员: %s%n", binding.getMembersList());
                System.out.println("---");
            });
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

2. 获取角色对应的具体权限列表

如果需要知道某个角色包含哪些具体权限,可使用以下代码:

import com.google.cloud.iam.v1.IamClient;
import com.google.cloud.iam.v1.Role;
import com.google.cloud.iam.v1.RoleName;
import java.io.IOException;

public class RolePermissionDetails {
    public static void main(String[] args) {
        String roleId = "roles/storage.admin"; // 目标角色ID
        
        try (IamClient iamClient = IamClient.create()) {
            // 全局角色的项目ID传空字符串
            RoleName roleResourceName = RoleName.of("", roleId);
            Role role = iamClient.getRole(roleResourceName);
            
            System.out.printf("角色名称: %s%n", role.getTitle());
            System.out.println("包含的权限:");
            role.getIncludedPermissionsList().forEach(permission -> System.out.printf("- %s%n", permission));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

注意事项

  • 权限要求:运行代码的身份需要具备roles/iam.serviceAccountAdmin或roles/iam.securityReviewer权限才能读取服务账号的IAM政策;读取角色权限需要roles/iam.roleViewer权限。
  • 认证方式:本地开发可通过gcloud auth application-default login获取默认凭证;生产环境建议使用服务账号密钥或工作负载身份认证。
  • 有效权限验证:如果需要检查服务账号对特定资源的实际有效权限(而非已分配的角色),可使用testIamPermissions方法,传入资源和目标权限进行验证。

内容的提问来源于stack exchange,提问作者Deepak Singh Rajput

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 17:56:17