WWDC Quick Look 💓 By SwiftGGTeam
Explore advances in declarative device management

Explore advances in declarative device management

观看原视频

Highlight

Apple 在 iOS 17、iPadOS 17 和 macOS Sonoma 中将声明式设备管理(Declarative Device Management)作为新协议功能的唯一载体,新增了软件更新管理、应用管理、系统服务锁定、证书安装和 Profile 迁移等能力,让设备可以自主执行管理策略并异步上报状态,无需服务器轮询。


核心内容

问题:传统 MDM 管理大规模设备 fleet 的痛点

企业 IT 管理员管理成千上万台 Apple 设备时,面临几个核心难题:

  1. 服务器轮询开销大:传统 MDM 需要服务器不断轮询设备获取状态,设备越多,服务器压力越大。
  2. 软件更新难以强制:管理员需要确保设备及时安装系统更新,但现有 MDM 命令方式反馈滞后,无法确认设备是否真正完成更新。
  3. 状态同步延迟:设备上的 FileVault 状态、证书安装情况等关键信息,管理员无法实时掌握。

对于大型组织,这些问题叠加起来,管理成本随设备数量线性增长。

Apple 的方案:声明式设备管理

声明式设备管理(DDM)在 WWDC21 首次推出,WWDC22 增强了基础能力,WWDC23 则将新协议功能的重心完全转移到 DDM 上。其核心思想是:服务器向设备下发”声明”(Declaration),设备自主评估并执行,完成后异步上报状态。

这意味着设备不再需要等待服务器命令,而是根据预设策略主动行动。服务器也不再需要轮询,而是被动接收状态报告。

WWDC23 新增了五个核心管理领域:

  • 软件更新管理:通过配置定义更新行为,设备主动执行并上报进度
  • 应用管理:安装、配置和监控企业应用
  • 系统服务锁定:限制系统服务,监控后台任务
  • 证书和身份凭证安装:自动部署设备所需的安全凭证
  • Profile 迁移简化:从传统 MDM Profile 迁移到 DDM 更加顺畅

详细内容

声明式软件更新管理(03:33

传统 MDM 中,管理员使用命令安装更新,通过轮询获取反馈。这种方式在大型 fleet 中效率低下。

DDM 的软件更新管理使用配置(Configuration)定义行为,设备自主执行:

{
  "Type": "com.apple.configuration.softwareupdate.enforcement.specific",
  "Identifier": "com.example.softwareupdate.ios17",
  "ServerToken": "abc123",
  "Payload": {
    "TargetOSVersion": "17.0",
    "TargetBuildVersion": "21A329",
    "DetailsURL": "https://example.com/update-info",
    "TargetLocalDateTime": "2023-10-01T10:00:00"
  }
}

关键点:

  • TargetOSVersion 指定目标系统版本
  • TargetBuildVersion 精确到 build 号,避免安装错误的 seed 或 GM 版本
  • TargetLocalDateTime 设置强制更新的截止时间,在此之前用户有自主选择的机会
  • DetailsURL 指向组织内部的更新说明页面
  • 设备会主动执行更新,并通过异步状态报告通知服务器进度

使用 Predicates 控制更新顺序(06:00

DDM 支持使用 Predicates 实现复杂的更新逻辑。例如,可以控制设备按特定顺序升级:

{
  "Type": "com.apple.configuration.softwareupdate.enforcement.specific",
  "Identifier": "com.example.softwareupdate.critical",
  "ServerToken": "def456",
  "Payload": {
    "TargetOSVersion": "17.0",
    "Predicate": "device.model.family == 'iPhone' AND device.os.version >= '16.5'"
  }
}

关键点:

  • Predicate 使用声明式语法描述条件
  • 可以基于设备型号、当前系统版本、 Rapid Security Response 可用性等条件
  • 设备自主评估 Predicate,只有满足条件才执行更新
  • 这允许管理员对不同类型的设备设置不同的更新策略

异步状态报告(06:14

DDM 的核心优势之一是异步状态报告。设备在状态变化时主动向服务器推送:

{
  "StatusItems": [
    {
      "Path": "softwareupdate.download",
      "Value": {
        "download-progress": 0.75,
        "download-state": "downloading"
      }
    },
    {
      "Path": "softwareupdate.install",
      "Value": {
        "install-state": "pending",
        "deadline": "2023-10-01T10:00:00"
      }
    }
  ]
}

关键点:

  • 状态报告包含 download-progressdownload-stateinstall-state 等字段
  • 管理员可以实时看到每台设备的更新进度
  • 不再需要服务器轮询,网络开销大幅降低
  • 状态报告是设备主动发起的,即使设备离线,也会在恢复连接后补发

FileVault 状态报告(03:45

macOS 的 FileVault 磁盘加密状态现在可以通过 DDM 异步报告:

{
  "StatusItems": [
    {
      "Path": "security.filevault",
      "Value": {
        "enabled": true,
        "personal-recovery-key-escrowed": true,
        "institutional-recovery-key-present": false
      }
    }
  ]
}

关键点:

  • enabled 表示 FileVault 是否已启用
  • personal-recovery-key-escrowed 表示个人恢复密钥是否已托管到服务器
  • 管理员可以确认合规性,无需手动检查每台设备

Profile 迁移简化(03:54

从传统 MDM Profile 迁移到 DDM 时,WWDC23 引入了新的行为让过渡更平滑。设备在收到 DDM 声明后,可以自动处理与现有 Profile 的冲突,减少管理员的手动干预。


核心启发

  1. 为 MDM 产品添加 DDM 支持:如果你正在开发或维护 MDM 解决方案,将软件更新管理从命令式迁移到声明式。为什么值得做:Apple 明确表示未来新协议功能只通过 DDM 提供,不支持 DDM 的产品将逐渐落后。怎么开始:阅读 Apple 在 GitHub 上公开的 Device Management Client Schema,实现 com.apple.configuration.softwareupdate.enforcement.specific 声明类型。

  2. 构建软件更新合规仪表板:利用 DDM 的异步状态报告,为 IT 管理员构建一个实时更新的仪表板,显示 fleet 中每台设备的更新进度。为什么值得做:传统 MDM 需要轮询,状态有延迟;DDM 的状态报告是实时的,可以做出更及时的响应。怎么开始:在 MDM 服务器端实现状态报告接收端点,解析 softwareupdate.downloadsoftwareupdate.install 路径的状态项,用 WebSocket 推送到前端仪表板。

  3. 实现分批次滚动更新策略:使用 Predicates 控制更新顺序,先让测试组的设备升级,验证兼容性后再推广到生产环境。为什么值得做:大规模 fleet 同时更新风险高,分批次可以降低故障影响面。怎么开始:定义两个 Predicate,一个匹配设备名包含 “test” 的设备,另一个匹配所有设备,设置不同的 TargetLocalDateTime 截止时间。

  4. 自动化 FileVault 合规检查:利用 FileVault 状态报告,自动标记未启用 FileVault 或恢复密钥未托管的设备。为什么值得做:安全合规是企业的硬性要求,手动检查效率低且容易遗漏。怎么开始:在 MDM 服务器中订阅 security.filevault 状态报告,当 enabled 为 false 或 personal-recovery-key-escrowed 为 false 时,自动触发告警或重新下发 FileVault 配置。


关联 Session

评论

GitHub Issues · utterances