GCP内部HTTPS负载均衡器IAM访问控制配置失效问题
GCP内部HTTPS负载均衡器访问权限控制问题解决
问题根源
你之前配置的roles/compute.loadBalancerAdmin是用于管理负载均衡器资源本身的权限(比如修改后端服务配置、删除负载均衡器),并非控制虚拟机能否访问后端服务的权限,所以服务账号B的实例仍能正常访问。
正确配置方法
1. 使用对应权限角色
控制虚拟机访问后端服务的正确角色是roles/compute.backendServiceUser,只有拥有该角色的主体,才能向后端服务发起请求。
2. 编写正确的IAM策略文件
要实现「仅允许服务账号A访问,拒绝服务账号B访问」,需编写如下策略文件,同时注意清理默认的宽松权限绑定(比如allUsers、allAuthenticatedUsers,否则会覆盖你的限制规则):
{ "bindings": [ // 允许服务账号A访问后端服务 { "role": "roles/compute.backendServiceUser", "members": ["serviceAccount:A@developer.gserviceaccount.com"] }, // 拒绝服务账号B访问后端服务 { "role": "roles/compute.backendServiceUser", "members": ["serviceAccount:B@developer.gserviceaccount.com"], "condition": { "title": "block-service-account-b", "expression": "false" } } ], "etag": "替换为当前后端服务的IAM策略ETAG" }
提示:ETAG可通过
gcloud compute backend-services get-iam-policy https-backend命令获取,避免覆盖策略时出现冲突。
3. 应用IAM策略
执行以下命令使配置生效:
gcloud compute backend-services set-iam-policy https-backend policy.json
4. 验证配置
- 确认防火墙规则允许虚拟机访问内部负载均衡器的IP段
- 使用服务账号B的虚拟机发起请求,检查是否被拒绝
关键逻辑说明
GCP IAM中允许权限默认优先级更高,但给服务账号B添加带expression: false的绑定,相当于直接拒绝其访问权限。另外必须确保现有策略中没有allUsers或allAuthenticatedUsers这类宽范围权限绑定,否则所有实例都能访问,你的限制规则会失效。
内容的提问来源于stack exchange,提问作者prospect
相关产品推荐
相关产品推荐

