给大家一个建议,没事别自己折腾这个,能累死。
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。
1 2 |
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:
- 下一步
- 搜索对应的机器账户(默认搜索范围不包括机器账户,需要修改一下搜索范围)
- 选择Create a custom task to delegate
- Only the following objects in the folder,勾选Computer objects,勾选下方Create和Delete
- 勾选Full Control
- 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,创建一个新的,做以下设置:
- Basics:自动注册到Autopilot选项选择yes
- OOBE:Deployment mode选User-driven,Join to Azure AD as根据需要选择
- Scope tags根据需要选择
- 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
(这两个是心跳遥测,可以忽略)后,可能会看到以下错误日志:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
{ "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 } } |
参考:
- Automatic add existing Windows 10 devices to Windows AutoPilot
- Set up enrollment for Windows devices
- Intune – Hybrid Domain Join Error
- Hybrid Azure AD join with Windows Autopilot
- Trying out Windows Autopilot User-Driven Hybrid Azure AD Join
- Windows Hello errors during PIN creation
- Deploy hybrid Azure AD-joined devices by using Intune and Windows Autopilot
- MDM errors failures and how to fix them
- Examples of some connection errors for Azure Active Directory Authentication