如何配置GCP IAM策略 仅通过IAP访问指定VM且禁止控制台登录
GCP 跨供应商最小权限开放最优配置方案
核心思路是全程不授予项目级宽权限,所有权限绑定到单资源粒度,从根上砍掉控制台访问、跨资源查看的权限基础,具体配置步骤如下:
一、先堵死控制台访问路径
- 不要给外部供应商账号绑定任何项目级基础角色,尤其不能给
roles/owner、roles/editor、roles/viewer三个默认角色,这类角色自带项目资源枚举、控制台访问的基础权限。 - 不要给供应商账号授予
roles/resourcemanager.projects.get权限:这个权限是账号能在控制台检索到项目、进入项目视图的前置必要条件,没有该权限时,账号登录GCP控制台后完全看不到对应项目的存在,从入口层面堵死控制台登录可能。
二、IAP访问权限严格限定单台VM
所有IAP相关权限直接绑定到目标VM实例的资源级IAM策略上,绝对不要在项目层级授予:
- 找到目标无公网IP的VM实例,在该实例的IAM权限绑定页,给供应商账号仅添加
roles/iap.tunnelResourceAccessor角色,该角色仅允许用户通过IAP隧道建立到这台VM的连接,没有其他任何资源操作权限。 - 配套配置VPC防火墙规则,仅放行IAP官方服务网段
35.235.240.0/20访问目标VM的SSH(22端口)或RDP(3389端口),拒绝其他所有来源的访问请求,从网络层确保VM没有其他可被访问的路径。 - 不给供应商账号授予任何计算资源查看类权限,包括
roles/compute.viewer、roles/compute.instanceAdmin等,没有这类权限的用户无法枚举、查看项目内其他VM、网络等资源的信息。
三、服务账号权限兜底隔离
- 不要给供应商账号授予目标VM绑定服务账号的
roles/iam.serviceAccountUser、roles/iam.serviceAccountTokenCreator权限:用户登录VM操作系统后,可直接通过元数据服务获取VM绑定服务账号的凭据访问资源,不需要额外给用户本身授予服务账号模拟权限,避免用户在本地直接冒用服务账号身份绕过VM访问链路。 - 给VM绑定的服务账号配置最小权限:仅授予指定私有GKE集群所需的操作权限、指定GCS存储桶的对应读写权限,不要给项目级的存储、容器服务宽权限,把服务账号的权限范围严格限定在要求开放的三类资源内。
配置完成后必做校验
用供应商测试账号逐一验证以下场景,确保符合管控要求:
- 登录GCP控制台,确认无法检索到目标项目,无法进入项目管理视图
- 本地通过
gcloud compute ssh [目标VM名称] --zone [VM所在可用区] --tunnel-through-iap --project [项目ID]命令,确认可正常通过IAP连接目标VM - 尝试通过gcloud或API枚举项目下的VM实例、GKE集群、GCS存储桶列表,确认返回权限不足
- 登录到VM操作系统内部后,验证访问私有GKE集群、读写指定GCS路径的权限正常
避坑提醒:最常见的配置错误是图省事在项目级授予IAP访问角色、漏收回
resourcemanager.projects.get权限,这两个错误都会直接导致权限越界,配置时需要重点核查。
内容的提问来源于stack exchange,提问作者Vedant Shetty
相关产品推荐
相关产品推荐

