设置Windows Autopilot和Hybrid AD Join

给大家一个建议,没事别自己折腾这个,能累死。

Microsoft Intune

MS Intune就是一个普通的MDM服务,能给终端设备下发配置啊远程安装应用什么的,功能和体验都比Cisco Meraki MDM差多了,而且因为和Windows以及AD/AAD高度集成,配置有点儿麻烦。不过Intune是按用户数而非设备数计费的,特定场景下面成本会比较低。

用户授权

你的Azure AD用户账户必须有相应的订阅才能使用Microsoft Intune。没有的话可以开一个Enterprise+Mobility E5的三个月免费试用。注意Office 365设备管理和Intune不是一个东西,虽然功能差不多,后端也应该是同一个,但是配置的方法不一样。

Azure AD MDM设定

在Azure Portal的Azure Active Directory blade中前往Mobility,分别设置Microsoft Intune和Microsoft Intune Enrollment的User Scope,并且确定没有其它第三方MDM的配置(会干扰Intune注册;如果确实有第三方的MDM服务,要确认它们的user scope不互相交叉,即每个用户只会收到一份配置)。

Intune用户权限设定

在Azure Portal的Intune blade中前往Device Enrollment->Windows Enrollment->Automatic Enrollment,确保使用Intune的用户包含在MDM和MAM的用户组内。

创建一个Terms and Conditions

Intune -> Device enrollment -> Terms and Conditions,创建一个,随便写点什么,不然OOBE是一定会失败的。

DNS记录(可选)

两条CNAME,如果设备需要能在公网注册那么需要公共的DNS记录,否则只在域DNS上设置即可。DNS记录设置完以后,在设备上登录work account就会自动注册上Intune,否则就得再手工加一次MDM。

CNAME	EnterpriseEnrollment.company_domain.com         EnterpriseEnrollment-s.manage.microsoft.com
CNAME	EnterpriseRegistration.company_domain.com	EnterpriseRegistration.windows.net

Hybrid AD Join

Hybrid AD Join使用不连接域控的加域流程。Azure AD注册的时候,Intune Connector会去域控上取一个ODJ Package,通过Azure AD下发给客户机,客户机拿到它以后离线加入域,然后重启连接域控完成同步。这样创建出来的设备,登录凭据走AD,但是账户仍然带有AAD的一些特性(例如可以用enterprise state roaming)。这里我们同时可以实现自动将所有注册到Azure AD的设备加入Autopilot计划,这样下次设备重装系统的时候,就会自动Autopilot加载对应的配置文件。

需要注意的是,启用Hybrid AD Join以后,设备的OOBE过程将长达30分钟,接近系统安装时长。

安装Azure AD Connect

走向导安装即可,在此不再赘述。向导安装完以后需要重新打开设置向导,分别启用device writeback(必须)和password writeback(建议)。如果你没有配置AD FS或者AD FS公网无法访问,那么不要使用passthrough authentication,建议同步密码。本文的所有内容均不依赖AD FS。

安装Intune Connector

Intune -> Device enrollment -> Windows enrollment -> Intune Connector for Active Directory -> Add,下载安装程序。Connector需要安装在一台Windows Server上,安装向导期间这台服务器需要关闭IE Enhanced Security Configuration。

我们需要给安装Connector的服务器的机器账户一个新增AD注册设备的权限。打开Active Directory Users and Computers,选择或新建Autopilot用的OU(默认是Computers),右键 -> Delegate Control:

  1. 下一步
  2. 搜索对应的机器账户(默认搜索范围不包括机器账户,需要修改一下搜索范围)
  3. 选择Create a custom task to delegate
  4. Only the following objects in the folder,勾选Computer objects,勾选下方Create和Delete
  5. 勾选Full Control
  6. Finish

创建一个动态设备组

Azure Active Directory -> Groups -> New group,名字All Windows devices,Type为Security,Membership type为Dynamic,设置规则:deviceOSType Contains “Windows”。

创建一个Deployment Profile

Azure Portal -> Intune -> Device Enrollment -> Windows Enrollment -> Deployment profiles,创建一个新的,做以下设置:

  1. Basics:自动注册到Autopilot选项选择yes
  2. OOBE:Deployment mode选User-driven,Join to Azure AD as根据需要选择
  3. Scope tags根据需要选择
  4. Assignments里Included groups选择刚刚创建的All Windows devices组

创建一个AD Join规则

Azure Portal -> Intune -> Device configuration -> Profiles -> Create profile:

  • Name:随便写
  • Platform:Windows 10 and later
  • Profile type:Domain join
  • Computer name prefix:随便写,短一点(要给主机名留点随机的余地)
  • Domain name:你的域UPN(形如corp.example.com
  • Organizational unit:你的OU(形如OU=Autopilot Domain Join,DC=corp,DC=example,DC=com,如果不知道的话可以用dsquery ou -name "Autopilot*"来查询)

稍等几十分钟让数据同步完成即可。

设置AD Join的设备自动Join AAD

因为这样做出来的设备上只有AD Join,那么我们需要加一条组策略让这些设备再次自动AAD Join。方法参见Enroll a Windows 10 device automatically using Group Policy

Windows Hello for Business

带Azure AD的Windows Hello for Business和普通的Windows Hello不太一样——它会被用来加密域账户和AAD账户凭据,并且在解锁的时候需要走域控认证。(出人意料的是,AD通过组策略打开的Windows Hello for Business没有这个要求。)这导致了两个麻烦事情:

  • Windows Client需要信任域控的Kerberos证书(这意味着需要配置一个AD CS服务),并且域控的证书上需要有Kerberos auth的key usage(因为一些历史遗留问题,这个usage默认是没有的)
  • Windows Hello for Business的key package是要传到Azure AD上,然后反向同步回AD的;因此,最好情况下,新设置的PIN前三十分钟都是没法使用的,需要等Azure AD Connect同步的时候把key package写回来才行

Windows Hello for Business有两种信任模型。Key-trust模型:

  • 需要域功能等级Windows Server 2008 R2或更高
  • 需要足够多的域控运行Windows Server 2016或更高,它们会被用来做Windows Hello鉴权
  • 需要AD CS运行Windows Server 2012或更高
  • 不需要向每台设备签发证书,直接使用域默认的Kerberos认证

而certificate-trust模型:

  • 可以在更低版本的域控上工作
  • 需要向每台设备签发证书,相当于把Windows Hello的key package当作智能卡来用
  • 需要处理证书过期和续期问题(这有好处也有坏处)

Key-trust模型比certificate-trust模型相对好部署一点,而且我的域控都是Windows Server 2016/2019,因此这边只介绍如何部署key-trust模型的方案。Certificate-trust模型的部署文档参见Hybrid Azure AD joined Certificate Trust Deployment

Active Directory Certificate Service初始设定

这一块要讲的话篇幅过长。如果你是一个对密码学话题比较随意的人,那么随便装一个AD CS的role然后配置一个根证书即可,装域控上都行。如果你严肃地对待密码学话题,那么你可以参考Active Directory Certificate Services基础设定的方案进行配置。

在配置AD CS时,唯一需要注意的地方在于,证书的CRL需要HTTP可达,并且如果你有未连接互联网的站点的话,内网也需要可以访问到CRL的HTTP端点。

Active Directory Domain Service设定

在AD创建一个Security Group,名为Windows Hello for Business Users,加入包含所有启用Windows Hello功能的用户。等待Azure AD Connect同步一次,或者手工同步一次。

Active Directory Certificate Service Kerberos鉴权设定

创建一个带有Kerberos auth的key usage的cert template,启用;禁用能被它替代的默认template;设置supercede;最后让所有域控enroll一下。参见Configure Hybrid Windows Hello for Business: Public Key Infrastructure

Group Policy设定

启用域里所有设备的证书自动enroll。参见Configure Hybrid Windows Hello for Business: Group Policy

Azure AD设定

Azure Portal -> Azure Active Directory -> Devices -> Device Settings,在Users may join devices to Azure AD中选择正确的用户组。

Azure AD Connect key writeback设定

给Azure AD Connect同步用的service account(用户名开头是MSOL_的那个)加一个Key Admins的组。

启用Windows Hello for Business

通过Intune设置的话,Azure Portal -> Intune -> Device enrollment -> Windows enrollment -> Windows Hello for Business,选择你想要的设定即可。

通过组策略设置的话,在Administrative Templates -> Windows Component -> Windows Hello for Business里面启用。

常见错误检查

Windows Hello登录时显示“That option is temporarily unavailable”:AD CS的key usage没配置对,或者根本没配置AD CS。

Windows Hello登录时显示“Your credentials could not be verified”或0xc00000bb:Azure AD Connect同步没完成,或者根证书没下发到客户机上。如果在域网络内,可以尝试重启一下客户机,让组策略同步上。

Windows Hello登录时显示“Sign-in failed. Contact your system administrator and tell them that the KDC certificate could not be validated. Additional information may be available in the system event log.”:证书链不对或者能联网但是访问不了CRL的HTTP端点。

客户端MDM注册时报错0xcaa20003,或者Enterprise State Roaming无法正常工作:Azure AD鉴权的用户名/密码有错。如果你能正常登录AD,那么注销一次,然后使用密码(非Windows Hello或PIN)登录一次,过一会儿应该就好了。

客户端OOBE登录完账户以后转圈25分钟然后报错0x80070774:客户端设备连接不上AD DC,或者Domain Join profile里面的domain/OU填错了。这时前往安装了Intune Connector服务的服务器上,打开事件查看器->Applications and Services Logs->ODJ Connector Service,筛选Event ID -30121,-30150(这两个是心跳遥测,可以忽略)后,可能会看到以下错误日志:

{
    "Metric":{
        "Dimensions":{
            "RequestId":"-redacted-",
            "DeviceId":"-redacted-",
            "DomainName":"corp.example.com",
            "ErrorCode":"87",
            "RetryCount":"1",
            "ErrorDescription":"Failed to get the ODJ Blob. A parameter is incorrect.",
            "InstanceId":"-redacted-",
            "DiagnosticCode":"0x00000802",
            "DiagnosticText":"Failed to get the ODJ Blob. A parameter is incorrect. [Exception Message: \"DiagnosticException: 0x00000802. Failed to get the ODJ Blob. A parameter is incorrect.\"] [Exception Message: \"Failed to call NetProvisionComputerAccount machineName=-redacted-\"]"
        },
        "Name":"RequestOfflineDomainJoinBlob_Failure",
        "Value":0
    }
}

参考:

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据