资讯详情

资讯详情

Fleet 4.71.0 技术解读:IdP 标签、用户证书部署与软件安装状态改进

Fleet 4.71.0 技术解读IdP 标签、用户证书部署与软件安装状态改进【免费下载链接】fleetOpen device management项目地址: https://gitcode.com/GitHub_Trending/fl/fleet本篇文章围绕 Fleet 4.71.0开源设备管理平台 Fleet 的月度版本的核心更新展开重点解读四大特性基于身份提供者IdP组与部门的动态标签、IdP 外部指标foreign vitals在配置描述文件变量中的落地、面向登录用户钥匙串的用户证书部署以及软件安装状态判定与展示的改进。读完本文你将掌握这些新能力的配置入口、底层实现依据含源码路径与升级注意事项能够直接在 Fleet 控制台中落地对应方案。Fleet 4.71.0 的完整变更清单见仓库内版本发布说明 articles/fleet-4.71.0.md升级方式参见 Fleet 官方升级指南。本文以该版本说明为骨架结合仓库内配套指南与 Go 源码展开深入讲解。亮点概览HighlightsFleet 4.71.0 的四大核心能力基于 IdP 组与部门的标签LabelsIT 管理员可以根据用户的 IdP 组和部门构建动态标签从而针对不同组/部门应用不同的应用、操作系统设置、查询等策略。IdP 外部指标Foreign vitals在配置描述文件变量中引入用户部门信息使第三方工具如 Munki能够基于部门数据自动执行动作。用户证书部署Deploy user certificates直接从 Microsoft NDES、DigiCert 以及自定义 SCEP 证书颁发机构CA签发并续期证书到用户的登录钥匙串简化员工接入需要用户级证书的第三方工具。软件安装状态改进VPPApp Store 批量购买应用在通过 Apple MDM 清单可见时即标记为已安装而非 MDM 命令刚被确认时就标记同时成功的安装/卸载会自动触发 host vitals 重新抓取加快软件清单与策略状态的刷新。下文逐一展开。基于身份提供者IdP组与部门的标签从 4.71.0 起Fleet 支持将用户的IdP 组groups与部门department作为标签label的判定依据。这带来的直接价值是不同业务组、不同部门的设备可以获得差异化的应用分发、OS 设置、查询库与自动化而无需手工维护标签成员。标签的能力建立在“将 IdP 用户信息映射到主机”这一基础设施之上完整操作步骤见 articles/foreign-vitals-map-idp-users-to-hosts.mdFleet Premium 功能。其要点包括Fleet 支持 Okta、Microsoft Entra IDAzure AD、Google Workspace、authentik以及其他支持 SCIM 协议的任何 IdP。Fleet 在以下场景中自动采集 IdP 外部指标ApplemacOS、iOS、iPadOS与 Windows 主机的自动注册ABM / 自动注册Apple、Android、Windows、Linux 主机的手动注册。也可以在 Host details 页面手动添加/更新主机的 IdP 用户名Fleet 会自动将其映射到其他 IdP 外部指标。以Okta为例接入过程分为三步在 Okta 中创建应用Okta 管理后台 → Applications → Create App Integration选择SAML 2.0由于 Okta 要求先配置 SAML 才能启用 SCIMSSO URL 与 Audience URI 可填任意合法 URL如https://example.fleetdm.com随后在应用的 General 选项卡中将 Provisioning 设置为SCIM。连接 Okta 与 Fleet在 Provisioning 选项卡中配置 SCIM Connection——SCIM connector base URLhttps://你的fleet服务器地址/api/v1/fleet/scimUnique identifier field for usersuserNameSupported provisioning actionsPush New Users、Push Profile Updates、Push GroupsAuthentication ModeHTTP Header使用 Fleet API-only 用户令牌。需要特别注意的是Fleet 目前要求 SCIM 属性中必须包含userName、givenName、familyName可选支持department其他属性若未移除payload 会被 Fleet 拒绝。将用户与组映射到 Fleet 主机创建“Fleet human-device mapping”组用规则Rules把目标用户划入该组然后将该组 Assign 到 SCIM 应用最后在Push Groups中按名称推送所有相关组勾选 Push group memberships immediatelyFleet 便能在 SCIM 侧同步组与用户的隶属关系。对于Microsoft Entra ID流程同样分三步创建企业应用Non-gallery→ 在 Provisioning 中将 Tenant URL 设为https://fleet服务器/api/v1/fleet/scim?aadOptscim062020、填入 Fleet API token → 配置用户与组的属性映射保留userName、givenName、familyName、department、active、externalId并 Assign 用户/组后 Start provisioning。Entra 向 Fleet 推送数据可能长达 40 分钟可用 Provision on demand 加速。Google Workspace不支持 SCIMFleet 改为通过 Google Cloud 服务账号 域级授权domain-wide delegation直接调用 Admin SDK Directory API 定时拉取用户、组与部门。配置时需在 Fleet 的Settings Integrations Identity provider (IdP)填入服务账号 JSON 密钥、主域名与要模拟的管理员邮箱并确认在服务账号所属的 Google Cloud 项目中启用了 Admin SDK API否则同步会报 403SERVICE_DISABLED。从仓库源码看4.71.0 为“SCIM 接收部门”提供了数据库层支撑迁移文件 server/datastore/mysql/migrations/tables/20250626130239_SCIMAddDepartment.go 在scim_users表上新增department VARCHAR(255)列并在fleet_variables表中注册了FLEET_VAR_HOST_END_USER_IDP_DEPARTMENT变量——这印证了“部门信息经 SCIM 入库、并作为可解析变量使用”的完整链路。IdP 外部指标把部门信息注入配置描述文件变量4.71.0 的另一项能力是IdP 外部指标foreign vitals允许在配置描述文件configuration profile变量中使用终端用户的IdP 部门信息。典型场景是通过配置描述文件部署一个属性列表property list让 Munki 等第三方工具依据部门数据自动执行动作。对应的变量名为$FLEET_VAR_HOST_END_USER_IDP_DEPARTMENT。在 server/fleet/mdm.go 中可以看到与 IdP 相关的全部主机变量常量定义变量名含义$FLEET_VAR_HOST_END_USER_EMAIL_IDPIdP 邮箱遗留变量新方案避免使用$FLEET_VAR_HOST_END_USER_IDP_USERNAMEIdP 用户名$FLEET_VAR_HOST_END_USER_IDP_USERNAME_LOCAL_PARTIdP 用户名中的本地部分$FLEET_VAR_HOST_END_USER_IDP_GROUPSIdP 组$FLEET_VAR_HOST_END_USER_IDP_DEPARTMENTIdP 部门4.71.0 新增$FLEET_VAR_HOST_END_USER_IDP_FULL_NAMEIdP 全名这些变量以$FLEET_VAR_或${FLEET_VAR_}两种形式出现在 profile 中由正则表达式如FleetVarHostEndUserIDPDepartmentRegexp见 server/fleet/mdm.go识别并在 profile 下发到主机前按主机替换为实际值。替换失败的场景也有明确反馈在 server/mdm/apple/profile_processor_test.go 的测试用例中当主机没有 IdP 部门时profile 的 Detail 字段会出现 There is no IdP department for this host. Fleet couldnt populate$FLEET_VAR_HOST_END_USER_IDP_DEPARTMENT. 的报错文案管理员可据此在Host details OS settings中定位原因。除部门外IdP 用户名、组、邮箱等信息也能作为标签依据与 profile 变量相关指南详见 articles/foreign-vitals-map-idp-users-to-hosts.md 与仓库内的 Fleet variables 文档。部署用户证书NDES、DigiCert 与自定义 SCEP 到用户钥匙串4.71.0 允许 Fleet 将Microsoft NDES、DigiCert、自定义 SCEP CA签发的证书直接部署并自动续期到macOS 用户的登录login钥匙串让员工无需人工操作即可接入需要用户级证书的 Wi-Fi / VPN 等第三方工具。完整的分 CA 操作指南见 articles/connect-end-user-to-wifi-with-certificate.mdFleet Premium。各 CA 当前支持的平台OktamacOS、iOS、iPadOS底层走 NDESDigiCertmacOS、iOS、iPadOSMicrosoft NDESmacOS、iOS、iPadOS 与 WindowsSmallstepmacOS、iOS、iPadOSHydrantESTLinux任意 SCEP CAmacOS、Windows、iOS、iPadOS、Android任意 EST CALinux部署到用户钥匙串的配置要点要让证书落到用户作用域核心是用户级配置描述文件user-scoped profilemacOS在 profile 中设置PayloadScope为User。用户级证书只有在login 钥匙串处于解锁状态时才可用若钥匙串被锁定MDM 安装命令会一直返回NotNow。可在“钥匙串访问”中确认 login 钥匙串左侧是否出现解锁图标。Windows将 XML 中所有LocURI里的./Device/替换为./User/用户级 profile 要求设备存在 Azure ADEntra ID用户关联纯设备级 MDM 注册无法处理./User/CSP 命令。自托管 Fleet 实例需要先配置 server private key用于加密 NDES 管理员密码等敏感信息。以NDES为例的典型 SCEP 配置描述文件macOS中变量替换是关键keyChallenge/key string$FLEET_VAR_NDES_SCEP_CHALLENGE/string keyURL/key string$FLEET_VAR_NDES_SCEP_PROXY_URL/string keySubject/key array…stringOU/stringstring$FLEET_VAR_CERTIFICATE_RENEWAL_ID/string…/array其中三个变量的作用对应 server/fleet/mdm.go 中的定义$FLEET_VAR_NDES_SCEP_CHALLENGE由 Fleet 从 NDES 服务器获取的一次性挑战密码$FLEET_VAR_NDES_SCEP_PROXY_URLFleet 作为中间人的 SCEP 代理 URL主机请求证书时 Fleet 代为与 NDES 通信$FLEET_VAR_CERTIFICATE_RENEWAL_ID证书续期标识36 字符 UUID必须放入证书的OU否则自动续期无法工作NDES 的 OU 最长 64 字符注意与其它内容合计不要超限。此外还有前缀类变量DigiCert 使用$FLEET_VAR_DIGICERT_DATA_{CA_NAME}与$FLEET_VAR_DIGICERT_PASSWORD_{CA_NAME}自定义 SCEP 使用$FLEET_VAR_CUSTOM_SCEP_CHALLENGE_{CA_NAME}与$FLEET_VAR_CUSTOM_SCEP_PROXY_URL_{CA_NAME}Smallstep 使用$FLEET_VAR_SMALLSTEP_SCEP_CHALLENGE_{CA_NAME}与$FLEET_VAR_SMALLSTEP_SCEP_PROXY_URL_{CA_NAME}——{CA_NAME}需替换为你在Settings Integrations Certificate enrollment中添加 CA 时填写的大写蛇形名称如WIFI_AUTHENTICATION。上述常量均可从 server/fleet/mdm.go 的变量定义与HasCAVariables判定逻辑中确认。SCEP 代理与续期机制Fleet 在主机与 SCEP/NDES 服务器之间充当中间人主机向 Fleet 请求证书Fleet 向 SCEP/NDES 服务器申请并取回证书后回传给主机。代理相关的关键行为NDES 代理会从 NDES 拉取一次性挑战密码管理员密码经 server private key 加密入库无法通过 API/界面读取密码假设 60 分钟过期过期后 Fleet 会重新下发 profile 并携带新的一次性密码。自定义 SCEP 代理会生成一个 60 分钟有效的一次性口令拼入 SCEP URL主机请求时先经 Fleet 校验再向上游取证书静态 challenge 仍保留在 profile 中。自动续期Apple、Windows、Android 主机在证书到期前30 天自动续期若整个有效期 ≤ 30 天则在有效期的一半时间点续期如 20 天有效期 → 第 10 天续期。有效期不足 2 天的证书不支持自动续期Linux 目前不支持自动续期。失败重试次数Apple/Android 每主机最多 3 次Windows 每主机 1 次每 30 秒检查一次待重发证书。Windows SCEP 证书验证对 Windows 主机的代理型 SCEP 证书自定义 SCEP 与 NDESFleet 会通过 osquery 观察主机上是否真的出现了签发的证书并据此给出 profile 状态Host details OS settingsPendingprofile 排队等待下发Verifying主机已确认 profileSCEP 交换进行中Fleet 尚未观察到证书VerifiedFleet 在主机上观察到证书通过证书 OU 中的$FLEET_VAR_SCEP_RENEWAL_ID与 profile 匹配Failed上游 CA 返回错误如SCEP PKIOperation failed: HTTP 500或下发后一小时内未在主机上检测到证书。验证要求主机的 fleetd 内置osquery 5.23.1 或以上且 profile 的 SubjectName OU 中含续期 ID 变量。用户级证书在目标用户未登录时无法被观察到会保持Verifying直到用户登录。软件安装状态改进Inventory 与 Library 分离、VPP 验证与自动 refetch4.71.0 对软件安装的状态判定与页面呈现做了系统性改进VPP 应用的安装判定更准确App StoreVPP应用改为在Apple MDM 清单中可见visible via Apple MDM inventory时才标记为“已安装”而不是在安装 MDM 命令刚被设备确认时就标记。这消除了“命令确认但应用并未真正装好”的误报窗口。安装/卸载后自动触发 host vitals refetchVPP 应用、Fleet-maintained 应用与自定义软件包的成功安装与卸载都会自动触发主机 vitals 重新抓取使软件清单与策略状态在操作后快速刷新而不是默认最长等一小时。Host details 页面的软件列表一分为二Inventory已安装软件与Library可供安装的软件界限更清晰该页面与“My device”页的后续改进正在推进中。Fleet-maintained 应用的检查频率从每天一次提升到每小时一次新版本与补丁能被更快感知GitOps 在大团队规模下按 hash 管理软件的速度也得到优化。这些改进在 4.71.0 的 IT 管理员变更中均可对应到新增“Host Vitals”标签维度以 IdP 标签起步安装软件后自动更新、VPP 应用命令确认后即在 UI 中展示、以及为 Fleet-maintained 应用记录 installer URL 等。安全工程师与 IT 管理员视角的其余变更除四大亮点外4.71.0 还包含大量面向不同角色的变化面向安全工程师Windows 10 的CIS 基准更新到版本 3支持基于 IdP 的标签上一节已述记录Windows 应用的最后打开时间GET /hosts/:id/encryption_key在当前密钥不可用时返回最近归档的加密密钥支持经 SCIM 摄入用户 Department并新增FLEET_VAR_HOST_END_USER_IDP_DEPARTMENT变量清理 Fleet ≤ 4.55 在 Amazon Linux 2 主机上报告的误报漏洞。面向 IT 管理员新增macOS 用户级 profile 的验证Windows Custom OS Settings含 Win32/Desktop Bridge ADMX 策略在主机确认 MDM 安装命令后即标记为已验证Apple MDM 用户通道PayloadScope为 User 的 mobileconfig 在下发给具备用户通道连接的主机时会走用户通道发送新增“Host Vitals”标签维度IdP 类标签在软件安装后自动更新禁止上传相同 identifier 但PayloadScope不同的 Apple profileGitOps 场景下可通过 gitops 在 setup experience 中添加 EULAUI 上传在启用 gitops 时被移除软件版本页的每页数量从 5 提升到 10。其他改进与 bug 修复节选活动详情增加api_only用户属性登录活动改用用户全名展示并为 API-only 用户新增头像后端依赖从aws-sdk-gov1 迁移到aws-sdk-go-v2SAML 实现替换为 crewjam/samlgithub.com/crewjam/saml优化单主机 MDM 注册检查的数据库查询优化 osquery config 与分布式读取端点上团队设置的拉取性能PATCH策略 API 增加重试修复“Manage automations”页的死锁错误/api/v1/fleet/hosts/identifier/:id端点补充缺失的team_name属性修复fleetctlcodesignature requirements 无法验证自身签名的问题修复 GitOps 导入无 default.yml 的 no-team.yml 时报错、Fleet-maintained 应用更新不拉取最新版 Google Chrome 并显示错误 SHA256、fleetctl generate-gitops未始终导出macos_setup等问题修复主机 API 在软件标题/版本不存在时返回 404改为与其它过滤器一致的空数组修复多种与软件计数、VPP 添加到 macOS setup experience、证书来源记录、日历/Webhook 端点、SSO 设置页 500、Linux 卸载脚本等相关问题。完整清单请见 articles/fleet-4.71.0.md 的 Changes 小节。升级到 Fleet 4.71.0如果你正在运行更早的 Fleet 版本可以按 Fleet 官方升级指南执行升级。升级前建议关注以下几点若使用NDES确保 NDES 一次性密码缓存足够大默认仅缓存 5 个一次性挑战密码每次失败的注册都会消耗一个建议生产环境调大缓存重启 NDES 会清空密码缓存可能造成进行中的 SCEP profile 失败。若使用Windows 自定义 SCEP/NDES主机需 osquery 5.23.1 才能获得证书验证能力profile 中必须含CAThumbprint根 CA 的 SHA1 指纹而非 RA 签名证书。若依赖IdP 部门变量需要先在 IdP 侧Okta/Entra/Google Workspace 等配置好 SCIM 或目录同步并确认属性映射中保留了department。若使用用户级证书注意 macOS login 钥匙串解锁状态、Windows 需要 Entra 用户关联这两个前提条件。升级过程中如遇证书续期或 profile 验证相关问题可参考 articles/connect-end-user-to-wifi-with-certificate.md 中的 Troubleshooting 章节含 Windows 上0x800B0101的三种成因排查与 CRL 快速验证方法。【免费下载链接】fleetOpen device management项目地址: https://gitcode.com/GitHub_Trending/fl/fleet创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →