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

GCP中Windows VM通过VM Manager创建OS Policy Assignment的YAML问题

GCP VM Manager 下 Windows Server 2022 OS Policy 配置实操

我在生产环境给200多台Windows Server 2022虚机配过VM Manager的OS Policy,覆盖脚本执行、安全代理安装、基线配置几个场景,下面是直接能用的配置逻辑和踩过的坑,不用找零散的官方示例了。

核心适配规则(Windows环境专属)

  • 所有PowerShell执行逻辑必须用exec资源,显式指定interpreter: POWERSHELL,默认的SHELL解释器只适配Linux环境,Windows下用会直接报错
  • 脚本、安装包这类远程文件统一用file资源拉取,源可以直接指定GCS存储桶路径,提前给虚机绑定的服务账号开存储对象查看权限即可,不用在脚本里写gcloud认证逻辑
  • MSI格式的安装包优先用pkg资源部署,比手写exec跑msiexec命令的幂等性更好,OS Config会自动检测软件是否已安装,不会重复触发安装
  • 所有路径必须写绝对路径,OS Config代理以SYSTEM权限运行,没有普通用户的环境变量、路径映射配置,写相对路径100%找不到文件

可直接复用的YAML示例

示例1:PowerShell脚本执行配置(含文件拉取+认证参数传递)

这个示例覆盖文件拷贝、脚本运行、身份认证场景:

osPolicies:
- id: run-custom-powershell-config
  mode: ENFORCEMENT
  resourceGroups:
  - resources:
    # 第一步:从GCS拉取配置脚本到本地临时目录
    - id: pull-ps1-script
      file:
        path: 'C:\Windows\Temp\instance-security-config.ps1'
        state: PRESENT
        gcs:
          bucket: your-org-private-bucket
          object: vm-scripts/instance-security-config.ps1'
          # 脚本更新后修改这个generation值,会触发重新拉取、重新执行
          generation: 1718000000000000
    # 第二步:执行脚本,带幂等校验
    - id: execute-config-script
      exec:
        validate:
          # 校验逻辑:脚本执行成功后会留下标记文件,存在就不重复执行
          interpreter: POWERSHELL
          args:
          - -ExecutionPolicy
          - Bypass
          - -Command
          - Test-Path 'C:\ProgramData\config-complete-v1.flag'
        enforce:
          interpreter: POWERSHELL
          args:
          - -ExecutionPolicy
          - Bypass
          - -File
          - 'C:\Windows\Temp\instance-security-config.ps1'
          - -WorkspaceId
          - "your-security-workspace-id"
          - -ApiKey
          # *不要硬编码敏感参数*,用OS Policy的变量替换功能传入
          - ${security_api_key}

示例2:安全代理静默安装配置

osPolicies:
- id: deploy-endpoint-security-agent
  mode: ENFORCEMENT
  resourceGroups:
  - resources:
    # 拉取MSI安装包
    - id: pull-agent-installer
      file:
        path: 'C:\Windows\Temp\endpoint-agent-v3.5.msi'
        state: PRESENT
        gcs:
          bucket: your-org-private-bucket
          object: installers/endpoint-agent-v3.5.msi
    # 安装MSI包
    - id: install-agent
      pkg:
        desiredState: INSTALLED
        msi:
          source: 'C:\Windows\Temp\endpoint-agent-v3.5.msi'
          # 静默安装参数,按你用的安全代理文档替换即可
          properties:
          - /qn
          - REBOOT=ReallySuppress
          - SERVER_ADDRESS=sec-collector.internal:9443

实操踩坑汇总

  • 所有PowerShell命令必须加-ExecutionPolicy Bypass参数,SYSTEM账号默认执行策略是Restricted,不加参数脚本根本跑不起来
  • exec资源一定要写validate校验段,不然OS Config每10分钟轮询一次就会重复跑enforce里的逻辑,很容易把业务脚本跑挂
  • 不要在脚本里写当前登录管理员的用户目录、用户注册表路径,SYSTEM账号的用户上下文和登录账号完全隔离,读不到对应路径的内容
  • 往系统目录写文件不用单独提权,SYSTEM账号本身有最高权限
  • 如果脚本需要走内网代理,直接在enforce的PowerShell命令里先设置系统级代理,不要依赖用户级的代理配置
  • YAML里写Windows路径的时候用单引号包裹就行,不用给反斜杠加转义符,用双引号转义反而容易出格式解析错误
  • 脚本运行的日志可以直接在虚机的C:\Program Files\Google\OSConfig\log\目录下看,排错直接翻这个目录的日志就行,不用去云控制台找零散的报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 19:15:28