Google Cloud VM单用户隔离配置:限制用户仅访问自身分配VM
实现单用户单VM隔离的操作指南
我来帮你梳理下解决这个问题的具体步骤,针对你提到的「用户能通过控制台SSH到其他VM」以及「Datalab VM的命令访问限制」需求,我们从权限回收、细粒度授权到安全加固一步步落地:
一、先回收过宽的默认权限
首先得砍掉用户/ServiceAccount身上可能存在的项目级宽权限——这是他们能看到并访问所有VM的核心原因:
- 进入IAM & Admin > IAM页面,找到对应的用户或ServiceAccount
- 移除所有包含
compute.instances.*权限的项目级角色,比如roles/compute.instanceAdmin.v1、roles/compute.admin甚至roles/editor这类大权限角色 - 注意:如果用户需要能在控制台导航项目,保留最基础的
roles/compute.viewer即可,但后续我们会通过条件权限把这个角色的范围缩窄到仅用户自己的VM
二、分配针对特定VM的细粒度权限
Google Cloud的条件权限是实现单VM隔离的关键,它能让权限仅作用于指定的VM资源。我们需要给每个用户/ServiceAccount配置两类权限:普通VM的SSH权限,以及Datalab VM的命令访问权限。
1. 普通VM的SSH访问权限
你需要给用户分配以下权限,并且通过条件限制到他们的专属VM:
compute.instances.get:允许查看自己VM的详情compute.instances.list:允许在控制台看到自己的VM(可选,根据需求调整)compute.instances.osLogin:通过OS Login实现SSH访问(推荐用这个替代传统SSH密钥,避免密钥跨VM复用)compute.projects.get:基础项目访问权限,用于控制台导航
操作步骤:
- 进入IAM & Admin > 角色,创建一个自定义角色(比如命名为
Single-VM-User-Access),把上面的权限加进去 - 回到IAM页面,给目标用户/ServiceAccount添加这个自定义角色,然后点击角色旁边的添加条件
- 条件规则设置为:
资源名称等于projects/[你的项目ID]/zones/[VM所在区域]/instances/[用户的VM名称];如果用户有多个VM,也可以用通配符,比如projects/xxx/zones/*/instances/user1-*
2. Datalab VM的命令访问权限
针对datalab命令的访问,需要额外添加以下权限,同样用条件限制到用户的Datalab VM:
compute.instances.getSerialPortOutput:Datalab连接需要读取VM串口输出compute.instances.setMetadata:用于更新Datalab相关的元数据(如果需要)compute.firewalls.list:检查Datalab所需的防火墙规则(可选)
你可以把这些权限加到刚才的自定义角色里,或者单独创建一个Datalab-Single-User-Access角色,再绑定同样的资源条件。
另外,用户执行datalab命令时,要确保他们使用自己绑定的ServiceAccount,命令示例:
datalab connect [你的DatalabVM名称] --service-account=[用户的ServiceAccount邮箱]
三、强制启用OS Login杜绝跨VM密钥访问
如果你们还在使用传统SSH密钥,用户可能会把自己的密钥加到其他VM上,绕开权限限制。所以强制启用OS Login是必要的:
- 进入Compute Engine > 设置页面,开启OS Login功能
- 确保所有VM的元数据里
enable-oslogin设置为TRUE(可以在项目级元数据统一配置,也可以单独给每个VM设置) - 这样用户只能通过自己的身份(或绑定的ServiceAccount)SSH到授权的VM,无法用通用密钥访问其他VM
四、限制控制台的VM可见范围
默认情况下,用户如果有项目级的compute.instances.list权限,会看到所有VM。要让他们只能看到自己的VM:
- 移除用户的项目级
compute.instances.list权限 - 给用户的自定义角色添加
compute.instances.list权限,并加上和之前一样的资源条件(仅匹配自己的VM)
这样用户在控制台的Compute Engine页面只会显示自己的VM,完全看不到其他用户的资源
五、验证配置是否生效
完成上述步骤后,一定要验证效果:
- 用目标用户账号登录控制台,尝试访问其他用户的VM,应该会弹出「权限不足」的提示
- 尝试SSH连接其他VM,会提示无法找到资源或没有权限
- 用
datalab connect命令连接其他用户的Datalab VM,同样会报错权限不足
六、额外的安全加固(可选)
如果需要更高的安全级别,可以做这些:
- 启用VPC Service Controls,把Compute Engine资源纳入服务边界,防止跨资源的未授权访问
- 定期审计IAM权限,用IAM Analyzer检查是否有过宽的权限配置
- 给ServiceAccount设置密钥轮换周期,确保密钥不会泄露被滥用
内容的提问来源于stack exchange,提问作者Majico
相关产品推荐
相关产品推荐

