在GCP中访问账号下所有项目及对应密钥的最佳实现方案
方案实现说明
服务账号是当前场景的最优选择
- 完全适配你后台无人工干预调用GCP API的需求,通过IAM分配最小必要权限即可覆盖项目查询、密钥管理等所有操作,安全性远高于使用普通用户账号进行授权
- 服务账号调用GCP官方API时,SDK会自动完成令牌的申请、刷新逻辑,不需要你额外维护长期令牌的生命周期,也不需要手动执行身份验证操作
具体实现步骤
1. 配置根管理服务账号
你需要先创建一个专属的根管理服务账号,专门用于管理所有用户创建的项目:
- 在你GCP账号下单独新建一个管理项目(不要和用户创建的业务项目混用),在该项目中创建服务账号
- 给该服务账号授予组织层级的权限,避免后续每个新项目都需要单独授权:
roles/resourcemanager.projectViewer:支持查询你账号下所有项目的基础信息roles/serviceaccount.keyAdmin:支持创建、查询指定项目下服务账号的访问密钥
2. 自动同步项目与密钥到你的数据库
用户通过网页端提交项目创建请求时,后台直接用根管理服务账号调用GCP API完成操作,全程无人工介入:
- 调用Resource Manager API创建用户项目,创建成功后立即调用
projects.serviceAccounts.create接口为该项目生成专用的业务服务账号,再调用projects.serviceAccounts.keys.create生成该业务服务账号的密钥 - 把项目ID、项目名称、创建用户信息、业务服务账号密钥内容、密钥过期时间等字段同步写入你的Restful API可访问的数据库即可
3. 移动端API访问鉴权逻辑
不要直接把长期服务账号密钥下发到移动端,避免密钥泄露:
- 移动端用户请求访问指定项目的GCP API时,先向你自己的后端接口发起请求,后端校验用户权限后从数据库拉取对应项目的业务服务账号密钥,生成短期访问令牌返回给移动端
- 移动端使用该短期令牌调用对应项目的GCP Restful API即可完成身份验证
补充说明
- 如果你需要拉取所有用户创建的项目列表,直接用根管理服务账号调用
GET https://cloudresourcemanager.googleapis.com/v3/projects接口即可获取全量项目信息 - 所有GCP官方SDK都内置了服务账号的身份验证逻辑,你初始化SDK时传入根管理服务账号的密钥文件即可,不需要手动处理令牌生成、刷新逻辑
内容的提问来源于stack exchange,提问作者SmiffyKmc
相关产品推荐
相关产品推荐

