You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何限制GCP VM实例中用户拉取及运行Docker容器的权限?

GCP VM实例上Docker操作的特定用户权限限制方案

一、基础方案:通过sudoers限制命令范围

这是最直接易用的方式,适合仅需要限制用户执行docker pull和docker run操作的场景:

  1. 确认/创建目标系统用户

    • 如果用户已存在,跳过此步;若需新建用户,执行:
      sudo useradd -m docker-limited-user
      sudo passwd docker-limited-user
      
    • 若使用GCP OS Login功能,GCP IAM用户会自动在VM中创建系统用户,直接使用该用户名即可。
  2. 配置sudoers规则

    • 必须用visudo编辑sudoers文件(避免语法错误导致sudo失效):
      sudo visudo
      
    • 在文件末尾添加以下规则(替换docker-limited-user为你的目标用户名,/usr/bin/docker为VM中Docker的实际路径,可通过which docker确认):
      docker-limited-user ALL=(ALL) NOPASSWD: /usr/bin/docker pull *, /usr/bin/docker run *
      
      • 若要求用户执行命令时需输入密码,移除NOPASSWD:即可。
      • 规则含义:允许该用户以root身份执行指定的Docker命令,禁止其他sudo操作。
  3. 验证权限

    • 切换到目标用户:
      su - docker-limited-user
      
    • 测试允许的命令:sudo docker pull nginx,应正常执行
    • 测试禁止的命令(如sudo docker rm $(docker ps -aq)),会收到权限拒绝提示

二、进阶方案:用OPA实现精细化镜像控制

如果需要更严格的限制(比如仅允许拉取GCR仓库的镜像、仅运行特定镜像),可以使用Open Policy Agent(OPA)作为Docker授权插件:

  1. 安装并启动OPA服务

    wget https://github.com/open-policy-agent/opa/releases/latest/download/opa_linux_amd64
    chmod +x opa_linux_amd64
    sudo mv opa_linux_amd64 /usr/local/bin/opa
    opa run --server
    
  2. 编写OPA策略文件(如docker-policy.rego)
    示例规则:仅允许拉取gcr.io仓库的镜像,仅运行该仓库的镜像

    package docker.authz
    
    allow {
      input.Action == "pull"
      contains(input.Request.Parameters[0], "gcr.io/")
    }
    
    allow {
      input.Action == "run"
      contains(input.Request.Parameters[0], "gcr.io/")
    }
    
  3. 加载策略到OPA

    curl -X PUT http://localhost:8181/v1/policies/docker-authz --data-binary @docker-policy.rego
    
  4. 配置Docker daemon使用OPA授权

    • 编辑/etc/docker/daemon.json,添加:
      {
        "authorization-plugins": ["opa-http://localhost:8181/v1/data/docker/authz/allow"]
      }
      
    • 重启Docker服务:sudo systemctl restart docker
  5. 验证策略

    • 尝试拉取非GCR镜像(如docker pull nginx)会被拒绝
    • 拉取gcr.io/google-containers/busybox则正常执行

注意事项

  • 确保目标用户无法通过其他途径获取root权限(如禁止用户执行sudo bash、su root等)
  • 若使用GCP OS Login,需确保IAM用户拥有roles/compute.osLogin或roles/compute.osAdminLogin权限才能登录VM
  • 定期检查sudoers规则和Docker配置,避免权限泄露

内容的提问来源于stack exchange,提问作者chickenman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 00:06:00