多项目场景下使用GCP-IAM认证接入Spring Cloud Vault的报错问题
问题根因
该403报错并非发起登录请求的业务服务账号权限不足导致,而是Vault服务自身运行所使用的GCP服务账号,没有权限访问其他目标GCP项目下的服务账号元数据:
Vault处理GCP-IAM登录请求时,默认会主动调用GCP IAM接口校验请求对应的服务账号合法性、所属项目等信息,该操作需要Vault自身的服务账号拥有目标项目下的iam.serviceAccounts.get权限,你此前仅为Vault服务账号在其部署的本地项目配置了权限,未配置跨项目的访问权限,因此触发报错。
解决方案
- 先确认Vault部署所用服务账号的完整ID,格式为
<vault-sa-name>@<vault-deploy-project-id>.iam.gserviceaccount.com
- 先确认Vault部署所用服务账号的完整ID,格式为
- 为Vault服务账号在所有需要对接的其他GCP项目中授予
Service Account Viewer内置角色,该角色自带iam.serviceAccounts.get权限,权限范围符合需求无过度授权,可通过以下gcloud命令配置:
gcloud projects add-iam-policy-binding <target-business-project-id> \ --member="serviceAccount:<vault-sa-full-id>" \ --role="roles/iam.serviceAccountViewer"- 为Vault服务账号在所有需要对接的其他GCP项目中授予
- (可选适配严格权限管控场景)如果你不想配置跨项目的服务账号访问权限,可直接关闭Vault GCP认证的服务账号存在性校验逻辑,执行以下Vault命令即可:
vault write auth/gcp/config disable_service_account_validation=true注意:关闭校验后Vault不会再调用GCP IAM接口查询服务账号信息,你需要保证Vault侧配置的角色
bound_projects、bound_service_accounts等约束参数完全准确,否则会出现非法请求绕过校验的安全风险。- 配置完成后重新执行登录命令验证即可,你此前给业务服务账号分配的
Service Account Token Creator角色配置正确,无需修改。
- 配置完成后重新执行登录命令验证即可,你此前给业务服务账号分配的
- (可选权限优化)你此前给Vault服务账号分配的
Browser、Service Account Key Admin角色和本次登录校验逻辑无关,如果没有服务账号密钥生成等额外需求,可回收上述权限避免过度授权。
- (可选权限优化)你此前给Vault服务账号分配的
内容的提问来源于stack exchange,提问作者Rafik Alimardanov
相关产品推荐
相关产品推荐

