L’interface est localisée ; les présentations et documents des Skills sont traduits automatiquement par IA dans votre langue. Le code, les commandes, chemins et termes techniques restent en version originale, et le document de l’auteur fait foi.
Explorer les Skills
Productivité · SKILL.md

implementing-device-posture-assessment-in-zero-trust

implementing-device-posture-assessment-in-zero-trust

在零信任访问控制中实施设备态势评估,将来自 CrowdStrike ZTA、Microsoft Intune 和 Jamf 的端点健康信号集成到条件访问策略中,在授予资源访问权限前强制执行合规性。

Independent GitHub snapshot · Automated classification · Original documentation governs

Documentation de la Skill

GitHub

name: implementing-device-posture-assessment-in-zero-trust description: > 在零信任访问控制中实施设备态势评估,将来自 CrowdStrike ZTA、Microsoft Intune 和 Jamf 的端点健康信号集成到条件访问策略中,在授予资源访问权限前强制执行合规性。 domain: cybersecurity subdomain: zero-trust-architecture tags: [device-posture, zero-trust, endpoint-compliance, crowdstrike-zta, intune, conditional-access, jamf] version: "1.0" author: mahipal license: Apache-2.0

在零信任中实施设备态势评估

适用场景

  • 将设备健康作为访问企业应用的前提条件时
  • 将 CrowdStrike ZTA 评分、Intune 合规性或 Jamf 设备状态集成到访问决策时
  • 实施 CISA 零信任成熟度模型设备支柱要求时
  • 构建基于实时端点安全态势自适应的条件访问策略时
  • 检测并阻断来自受损、未托管或不合规设备的访问时

不适用于无法运行态势 Agent 的物联网或无头设备、没有身份验证的独立安全控制,以及实时态势数据不可用而陈旧合规数据会产生虚假信任的场景。

前置条件

  • 端点检测与响应(EDR):带 ZTA 模块的 CrowdStrike Falcon,或 Microsoft Defender for Endpoint
  • 移动设备管理(MDM):Microsoft Intune、Jamf Pro 或 VMware Workspace ONE
  • 身份提供商:具有条件访问能力的 Microsoft Entra ID、Okta 或 Ping Identity
  • ZTNA 平台:Zscaler ZPA、Cloudflare Access、Palo Alto Prisma Access 或云原生 IAP
  • EDR/MDM 平台的 API 访问权限,用于态势信号采集

工作流程

步骤 1:定义设备合规基线

为每个设备类别建立最低安全要求。

# Microsoft Intune:通过 Graph API 创建设备合规策略
Connect-MgGraph -Scopes "DeviceManagementConfiguration.ReadWrite.All"

# Windows 10/11 合规策略
$compliancePolicy = @{
    "@odata.type" = "#microsoft.graph.windows10CompliancePolicy"
    displayName = "Zero Trust - Windows Compliance"
    description = "零信任访问的最低设备要求"
    osMinimumVersion = "10.0.19045"
    bitLockerEnabled = $true
    secureBootEnabled = $true
    codeIntegrityEnabled = $true
    tpmRequired = $true
    antivirusRequired = $true
    antiSpywareRequired = $true
    defenderEnabled = $true
    firewallEnabled = $true
    passwordRequired = $true
    passwordMinimumLength = 12
    passwordRequiredType = "alphanumeric"
    storageRequireEncryption = $true
    scheduledActionsForRule = @(
        @{
            ruleName = "PasswordRequired"
            scheduledActionConfigurations = @(
                @{
                    actionType = "block"
                    gracePeriodHours = 24
                    notificationTemplateId = ""
                    notificationMessageCCList = @()
                }
            )
        }
    )
}

New-MgDeviceManagementDeviceCompliancePolicy -BodyParameter $compliancePolicy

# 通过 Jamf Pro API 设置 macOS 合规策略
curl -X POST "https://jamf.company.com/api/v1/compliance-policies" \
  -H "Authorization: Bearer ${JAMF_TOKEN}" \
  -H "Content-Type: application/json" \
  --data '{
    "name": "Zero Trust - macOS Compliance",
    "rules": [
      {"type": "os_version", "operator": ">=", "value": "14.0"},
      {"type": "filevault_enabled", "value": true},
      {"type": "firewall_enabled", "value": true},
      {"type": "gatekeeper_enabled", "value": true},
      {"type": "sip_enabled", "value": true},
      {"type": "auto_update_enabled", "value": true},
      {"type": "screen_lock_timeout", "operator": "<=", "value": 300},
      {"type": "falcon_sensor_running", "value": true}
    ]
  }'

步骤 2:配置 CrowdStrike 零信任评估

启用 ZTA 评分并配置访问层级的评分阈值。

# CrowdStrike Falcon API:查询所有端点的 ZTA 评分
curl -X GET "https://api.crowdstrike.com/zero-trust-assessment/entities/assessments/v1?ids=${DEVICE_AID}" \
  -H "Authorization: Bearer ${CS_TOKEN}" \
  -H "Content-Type: application/json"

# 响应包含:
# {
#   "aid": "device-agent-id",
#   "assessment": {
#     "overall": 82,
#     "os": 90,
#     "sensor_config": 85,
#     "version": "7.14.16703"
#   },
#   "assessment_items": {
#     "os_signals": [
#       {"signal_id": "firmware_protection", "meets_criteria": "yes"},
#       {"signal_id": "disk_encryption", "meets_criteria": "yes"},
#       {"signal_id": "kernel_protection", "meets_criteria": "yes"}
#     ],
#     "sensor_signals": [
#       {"signal_id": "sensor_version", "meets_criteria": "yes"},
#       {"signal_id": "prevention_policies", "meets_criteria": "yes"}
#     ]
#   }
# }

# 定义访问层级的 ZTA 评分阈值
# 第 1 层(基本访问):      ZTA >= 50
# 第 2 层(标准访问):      ZTA >= 65
# 第 3 层(敏感访问):      ZTA >= 80
# 第 4 层(关键访问):      ZTA >= 90

# 查询低于最低阈值的设备
curl -X GET "https://api.crowdstrike.com/zero-trust-assessment/queries/assessments/v1?filter=assessment.overall:<50" \
  -H "Authorization: Bearer ${CS_TOKEN}"

# CrowdStrike ZTA 评估的信号:
# - 操作系统补丁级别和版本
# - 磁盘加密(BitLocker/FileVault)
# - 传感器版本和配置
# - 防护策略执行
# - 固件保护(Secure Boot)
# - 内核保护(SIP、Code Integrity)
# - 防火墙状态

步骤 3:将设备态势与 Entra ID 条件访问集成

创建要求合规设备的条件访问策略。

# 创建要求合规设备的条件访问策略
Connect-MgGraph -Scopes "Policy.ReadWrite.ConditionalAccess"

$caPolicy = @{
    displayName = "Zero Trust - Require Compliant Device"
    state = "enabled"
    conditions = @{
        applications = @{
            includeApplications = @("All")
        }
        users = @{
            includeUsers = @("All")
            excludeGroups = @("BreakGlass-Admins-Group-ID")
        }
        platforms = @{
            includePlatforms = @("all")
        }
        clientAppTypes = @("browser", "mobileAppsAndDesktopClients")
    }
    grantControls = @{
        operator = "AND"
        builtInControls = @("mfa", "compliantDevice")
    }
    sessionControls = @{
        signInFrequency = @{
            value = 4
            type = "hours"
            isEnabled = $true
            authenticationType = "primaryAndSecondaryAuthentication"
            frequencyInterval = "timeBased"
        }
        persistentBrowser = @{
            mode = "never"
            isEnabled = $true
        }
    }
}

New-MgIdentityConditionalAccessPolicy -BodyParameter $caPolicy

# 创建基于设备合规性和登录风险的风险策略
$riskPolicy = @{
    displayName = "Zero Trust - Block High Risk Sign-Ins on Non-Compliant Devices"
    state = "enabled"
    conditions = @{
        applications = @{ includeApplications = @("All") }
        users = @{ includeUsers = @("All") }
        signInRiskLevels = @("high", "medium")
        devices = @{
            deviceFilter = @{
                mode = "include"
                rule = "device.isCompliant -ne True"
            }
        }
    }
    grantControls = @{
        operator = "OR"
        builtInControls = @("block")
    }
}

New-MgIdentityConditionalAccessPolicy -BodyParameter $riskPolicy

步骤 4:配置 Okta 设备信任与 CrowdStrike 集成

使用 CrowdStrike 态势信号设置 Okta 设备信任策略。

# Okta:配置 CrowdStrike 设备信任集成
# 管理控制台 > 安全 > 设备集成 > 添加集成

# Okta API:创建设备保障策略
curl -X POST "https://company.okta.com/api/v1/device-assurances" \
  -H "Authorization: SSWS ${OKTA_API_TOKEN}" \
  -H "Content-Type: application/json" \
  --data '{
    "name": "Corporate Device Assurance",
    "platform": "WINDOWS",
    "osVersion": {
      "minimum": "10.0.19045"
    },
    "diskEncryptionType": {
      "include": ["ALL_INTERNAL_VOLUMES"]
    },
    "screenLockType": {
      "include": ["BIOMETRIC", "PASSCODE"]
    },
    "secureHardwarePresent": true,
    "thirdPartySignalProviders": {
      "dtc": {
        "browserVersion": {
          "minimum": "120.0"
        },
        "builtInDnsClientEnabled": true,
        "chromeRemoteDesktopAppBlocked": true,
        "crowdStrikeCustomerId": "CS_CUSTOMER_ID",
        "crowdStrikeAgentId": "REQUIRED",
        "crowdStrikeVerifiedState": {
          "include": ["RUNNING"]
        }
      }
    }
  }'

# 创建带设备保障的 Okta 认证策略
curl -X POST "https://company.okta.com/api/v1/policies" \
  -H "Authorization: SSWS ${OKTA_API_TOKEN}" \
  -H "Content-Type: application/json" \
  --data '{
    "name": "Zero Trust Application Policy",
    "type": "ACCESS_POLICY",
    "conditions": null,
    "rules": [
      {
        "name": "Managed Device Access",
        "conditions": {
          "device": {
            "assurance": {
              "include": ["DEVICE_ASSURANCE_POLICY_ID"]
            },
            "managed": true,
            "registered": true
          },
          "people": {
            "groups": {"include": ["EMPLOYEES_GROUP_ID"]}
          }
        },
        "actions": {
          "appSignOn": {
            "access": "ALLOW",
            "verificationMethod": {
              "factorMode": "1FA",
              "type": "ASSURANCE"
            }
          }
        }
      },
      {
        "name": "Unmanaged Device - Block",
        "conditions": {
          "device": { "managed": false }
        },
        "actions": {
          "appSignOn": { "access": "DENY" }
        }
      }
    ]
  }'

步骤 5:实施持续态势监控

设置实时监控设备合规状态变化。

#!/usr/bin/env python3
"""实时监控设备态势合规漂移。"""

import requests
import time
import json
from datetime import datetime, timezone

CROWDSTRIKE_BASE = "https://api.crowdstrike.com"
INTUNE_BASE = "https://graph.microsoft.com/v1.0"

def get_cs_token(client_id: str, client_secret: str) -> str:
    resp = requests.post(f"{CROWDSTRIKE_BASE}/oauth2/token", data={
        "client_id": client_id,
        "client_secret": client_secret
    })
    return resp.json()["access_token"]

def get_low_zta_devices(token: str, threshold: int = 50) -> list:
    resp = requests.get(
        f"{CROWDSTRIKE_BASE}/zero-trust-assessment/queries/assessments/v1",
        headers={"Authorization": f"Bearer {token}"},
        params={"filter": f"assessment.overall:<{threshold}", "limit": 100}
    )
    return resp.json().get("resources", [])

def get_intune_noncompliant(token: str) -> list:
    resp = requests.get(
        f"{INTUNE_BASE}/deviceManagement/managedDevices",
        headers={"Authorization": f"Bearer {token}"},
        params={
            "$filter": "complianceState eq 'noncompliant'",
            "$select": "id,deviceName,userPrincipalName,complianceState,lastSyncDateTime,operatingSystem"
        }
    )
    return resp.json().get("value", [])

def check_posture_drift(cs_token: str, intune_token: str):
    print(f"\n[{datetime.now(timezone.utc).isoformat()}] 设备态势检查")
    print("=" * 60)

    low_zta = get_low_zta_devices(cs_token, threshold=50)
    print(f"CrowdStrike ZTA < 50:{len(low_zta)} 台设备")

    noncompliant = get_intune_noncompliant(intune_token)
    print(f"Intune 不合规:{len(noncompliant)} 台设备")

    for device in noncompliant[:10]:
        print(f"  - {device['deviceName']} ({device['userPrincipalName']}): "
              f"{device['complianceState']} | 上次同步:{device['lastSyncDateTime']}")

    return {"low_zta_count": len(low_zta), "noncompliant_count": len(noncompliant)}

核心概念

术语定义
设备态势(Device Posture)在授予访问权限前评估的端点安全属性集合(操作系统版本、加密、EDR 状态、补丁级别)
CrowdStrike ZTA 评分CrowdStrike Falcon 根据操作系统信号和传感器配置计算端点安全态势的数值评分(1-100)
设备合规策略MDM 定义的规则,指定设备必须满足的最低安全要求(加密、PIN、操作系统版本)
条件访问(Conditional Access)在允许访问前评估用户身份、设备合规性、位置和风险的策略引擎(Entra ID、Okta)
设备信任(Device Trust)验证端点已托管、已注册且满足安全基线,然后将其视为受信任设备
态势漂移(Posture Drift)设备安全态势随时间退化(补丁过期、加密被禁用),应触发访问撤销

工具与系统

  • CrowdStrike Falcon ZTA:基于操作系统和传感器安全信号的实时端点态势评分
  • Microsoft Intune:执行设备合规策略并向 Entra ID 条件访问报告的 MDM 平台
  • Jamf Pro:适用于 macOS 和 iOS 端点的 Apple 设备管理,含合规规则
  • Microsoft Entra ID 条件访问:使用 Intune 合规性和风险信号进行访问决策的策略引擎
  • Okta 设备信任:与 CrowdStrike、Chrome Enterprise 和 MDM 平台集成的设备保障策略
  • Cloudflare 设备态势:基于 WARP 客户端的磁盘加密、操作系统版本和第三方 EDR 态势检查

常见场景

场景:为 2000 台 Windows 和 macOS 端点强制执行设备合规

场景背景:一家拥有 2000 台端点(70% Windows、30% macOS)的医疗公司必须在允许访问患者数据系统前强制执行符合 HIPAA 的设备态势。设备由 Intune(Windows)和 Jamf(macOS)管理,所有端点均已部署 CrowdStrike Falcon。

方法:

  1. 在 Intune 中定义 Windows 合规策略:BitLocker、Secure Boot、TPM、Defender 已启用,操作系统 >= 10.0.19045
  2. 在 Jamf 中定义 macOS 合规策略:FileVault、Gatekeeper、SIP、防火墙,操作系统 >= 14.0
  3. 配置 CrowdStrike ZTA 阈值:通用应用 >= 70,患者数据系统 >= 85
  4. 创建 Entra ID 条件访问策略,要求所有云应用使用合规设备 + MFA
  5. 为新不合规设备配置 24 小时宽限期,在封锁前提供修复时间
  6. 为 IT 设置每周合规报告,显示不合规设备和修复措施
  7. 通过 Intune 实施自动化修复:推送 BitLocker 启用、部署待处理补丁

常见陷阱:宽限期必须足够长以便 IT 修复,但又要足够短以限制风险敞口。CrowdStrike ZTA 评分可能随传感器更新而波动;初始阶段避免设置过于激进的阈值。BYOD 设备可能缺乏 MDM 注册;为未托管设备提供功能受限的单独浏览器访问路径。

输出格式

设备态势评估报告
==================================================
组织:HealthCorp
报告日期:2026-02-23
托管设备总数:2,000

平台合规情况:
  Windows(1,400 台设备):
    合规:              1,302(93.0%)
    不合规:               98(7.0%)
    主要问题:缺失补丁(45)、BitLocker 已禁用(23)

  macOS(600 台设备):
    合规:                567(94.5%)
    不合规:               33(5.5%)
    主要问题:操作系统过旧(18)、FileVault 已禁用(8)

CROWDSTRIKE ZTA 评分:
  平均评分:              78.4
  设备 >= 85(关键级):  1,456(72.8%)
  设备 >= 70(标准级):  1,812(90.6%)
  设备 < 50(已封锁):      34(1.7%)

条件访问影响(过去 7 天):
  总登录尝试:           45,678
  因态势被封锁:            312(0.7%)
  24 小时内已修复:         289(92.6%)
  仍不合规:                 23

态势漂移告警:
  加密已禁用:               5
  EDR 传感器已停止:          3
  操作系统已降级:            1
Skills enregistrées