使用 Azure AD 登录到 Azure 中的 Windows 虚拟机

组织可以通过集成 Azure Active Directory (Azure AD) 身份验证来提高 Windows 虚拟机 (VM) 的安全性。 现在,你可以使用 Azure AD 作为核心身份验证平台,以便通过 RDP 登录到 Windows Server 2019 Datacenter 版本及更高版本或 Windows 10 1809 及更高版本。 然后可以集中控制并强制实施允许或拒绝访问 VM 的 Azure 基于角色的访问控制 (RBAC) 和条件访问策略。

本文介绍如何创建和配置 Windows VM,并使用基于 Azure AD 的身份验证进行登录。

使用基于 Azure AD 的身份验证登录 Azure 中的 Windows VM 有许多安全优势。 它们包括:

  • 使用 Azure AD 凭据登录到 Azure 中的 Windows VM。 结果是联盟域用户和托管域用户。

  • 减少对本地管理员帐户的依赖。

  • 为 Azure AD 配置的密码复杂性和密码生存期策略还有助于保护 Windows VM。

  • 使用 Azure RBAC:

    • 指定能够以常规用户或管理员特权用户身份登录到 VM 的人员。
    • 当用户加入或离开你的团队时,你可以更新 VM 的 Azure RBAC 策略,根据需要授予访问权限。
    • 员工在离开你的组织时,其用户帐户会被禁用或从 Azure AD 中删除,然后他们就再也不能访问你的资源。
  • 配置条件访问策略以要求多重身份验证 (MFA) 和其他信号(例如用户登录风险),然后你才能通过 RDP 登录到 Windows VM。

  • 使用 Azure 部署和审核策略以要求使用 Azure AD 登录 Windows VM,并在 VM 上标记使用未经批准的本地帐户。

  • 使用 Intune 通过移动设备管理 (MDM) 自动注册虚拟桌面基础结构 (VDI) 部署中的 Azure Windows VM 来自动执行和缩放 Azure AD 联接。

    MDM 自动注册需要 Azure AD Premium P1 许可证。 Windows Server VM 不支持 MDM 注册。

注意

启用此功能后,Azure 中的 Windows 虚拟机将建立与 Azure AD 的联接。 不能将它们联接到其他域,例如本地 Active Directory 或 Azure Active Directory 域服务。 如果需要执行此操作,则通过卸载扩展来断开 VM 与 Azure AD 的连接。

要求

受支持的 Azure 区域和 Windows 发行版

此功能目前支持以下 Windows 发行版:

  • Windows Server 2019 Datacenter 和更高版本
  • Windows 10 1809 和更高版本

重要

仅允许从 Windows 10 或更高版本的电脑远程连接到已联接 Azure AD 的 VM,而这些电脑需已注册到 Azure AD(从 Windows 10 20H1 开始)、已联接到 Azure AD 或向 VM 所联接到的同一目录进行了混合 Azure AD 联接。

此功能现已在以下 Azure 云中提供:

  • Azure 全球
  • Azure Government
  • Azure 中国世纪互联

网络要求

若要为 Azure 中的 Windows VM 启用 Azure AD 身份验证,你需要确保 VM 网络配置允许通过 TCP 端口 443 对以下终结点进行出站访问。

Azure 中国世纪互联:

  • https://enterpriseregistration.partner.microsoftonline.cn:用于设备注册。
  • http://169.254.169.254:Azure 实例元数据服务终结点。
  • https://login.chinacloudapi.cn:用于身份验证流。
  • https://pas.chinacloudapi.cn:用于 Azure RBAC 流。

为 Azure 中的 Windows VM 启用 Azure AD 登录

若要对 Azure 中的 Windows VM 使用 Azure AD 登录,必须:

  1. 为 VM 启用 Azure AD 登录选项。
  2. 为有权登录到 VM 的用户配置 Azure 角色分配。

可以通过两种方式为 Windows VM 启用 Azure AD 登录:

  • Azure 门户(创建 Windows VM 时)。
  • Azure CLI,在创建 Windows VM 或使用现有 Windows VM 时。

Azure 门户

可以为 Windows Server 2019 Datacenter 或 Windows 10 1809 及更高版本中的 VM 映像启用 Azure AD 登录。

若要使用 Azure AD 登录在 Azure 中创建 Windows Server 2019 Datacenter VM,请执行以下操作:

  1. 使用有权创建 VM 的帐户登录到 Azure 门户,然后选择“+ 创建资源”。

  2. 在“搜索市场”搜索栏中键入“Windows Server”。

  3. 选择“Windows Server”,然后从“选择软件计划”下拉列表中选择“Windows Server 2019 Datacenter”。

  4. 选择“创建”。

  5. 在“管理”选项卡上,选中“Azure AD”部分下的“使用 Azure AD 登录”复选框。

    显示 Azure 门户页面上用于创建虚拟机的“管理”选项卡的屏幕截图。

  6. 确保选中“标识”部分中的“系统分配的托管标识”。 使用 Azure AD 启用登录后,此操作将自动执行。

  7. 完成创建虚拟机的其余体验。 你必须为 VM 创建管理员用户名和密码。

注意

要使用 Azure AD 凭据登录 VM,首先需要为 VM 配置角色分配

使用 Azure Powershell 体验以启用 Azure AD 登录

本文要求运行 Azure CLI 2.0.31 或更高版本。 运行 az --version 即可查找版本。 如果需要进行安装或升级,请参阅安装 Azure CLI 一文。

  1. 运行 az group create 创建资源组。
  2. 运行 az vm create 创建 VM。 使用受支持区域中受支持的发行版。
  3. 安装 Azure AD 登录 VM 扩展。

以下示例将名为 myVM(使用 Win2019Datacenter)的 VM 部署到 chinanorth 区域中名为 myResourceGroup 的资源组中。 在本例和下一个示例中,可以根据需要提供自己的资源组和 VM 名称。

az group create --name myResourceGroup --location chinanorth

az vm create \
    --resource-group myResourceGroup \
    --name myVM \
    --image Win2019Datacenter \
    --assign-identity \
    --admin-username azureuser \
    --admin-password yourpassword

注意

在安装 Azure AD 登录 VM 扩展之前,必须在虚拟机上启用系统分配的托管标识。

创建 VM 和支持资源需要几分钟时间。

最后,安装 Azure AD 登录 VM 扩展,以便为 Windows VM 启用 Azure AD 登录。 VM 扩展是小型应用程序,可在 Azure 虚拟机上提供部署后配置和自动化任务。 请使用 az vm extension setmyResourceGroup 资源组中名为 myVM 的 VM 上安装 AADLoginForWindows 扩展。

可以在现有 Windows Server 2019 或 Windows 10 1809 及更高版本的 VM 上安装 AADLoginForWindows 扩展,以使其能够进行 Azure AD 身份验证。 以下示例使用 Azure CLI 安装扩展:

az vm extension set \
    --publisher Microsoft.Azure.ActiveDirectory \
    --name AADLoginForWindows \
    --resource-group myResourceGroup \
    --vm-name myVM

在 VM 上安装扩展后,provisioningState 会显示 Succeeded

为 VM 配置角色分配

创建 VM 后,需要配置 Azure RBAC 策略来确定可登录到 VM 的人员。 使用两个 Azure 角色来授权 VM 登录:

  • 虚拟机管理员登录:分配了此角色的用户可以使用管理员权限登录到 Azure 虚拟机。
  • 虚拟机用户登录:分配了此角色的用户可以使用常规用户权限登录到 Azure 虚拟机。

要允许用户通过 RDP 登录 VM,必须将“虚拟机管理员登录”或“虚拟机用户登录”角色分配给包含 VM 及其关联的虚拟网络、网络接口、公共 IP 地址或负载均衡器资源的资源组。

分配了 VM“所有者”或“参与者”角色的 Azure 用户不会自动获得通过 RDP 登录到 VM 的权限。 原因是为了在控制虚拟机的用户群与可访问虚拟机的用户群之间形成经过审核的分隔。

可以通过两种方式配置 VM 的角色分配:

  • Azure AD 门户体验
  • Azure Powershell 体验

注意

“虚拟机管理员登录”和“虚拟机用户登录”角色使用 dataActions,因此无法在管理组范围内进行分配。 目前只能在订阅、资源组或资源范围中分配这些角色。

Azure AD 门户

若要为启用 Azure AD 的 Windows Server 2019 Datacenter VM 配置角色分配,请执行以下操作:

  1. 对于资源组,选择包含 VM 及其关联的虚拟网络、网络接口、公共 IP 地址或负载平衡器资源的“资源组”。

  2. 选择“访问控制 (IAM)”。

  3. 选择“添加”>“添加角色分配”,打开“添加角色分配”页面 。

  4. 分配以下角色。 有关详细步骤,请参阅使用 Azure 门户分配 Azure 角色

    设置
    角色 虚拟机管理员登录或虚拟机用户登录
    将访问权限分配到 用户、组、服务主体或托管标识

    显示在 Azure 门户中添加角色分配的页面的屏幕截图。

使用 Azure Powershell 体验

以下示例使用 az role assignment create 为当前的 Azure 用户分配登录到 VM 所需的“虚拟机管理员登录名”角色。 使用 az account show 获取当前 Azure 帐户的用户名,使用 az vm show 将 scope 设置为在前面的步骤中创建的 VM。

还可以在资源组或订阅级别分配范围。 应用正常的 Azure RBAC 继承权限。

$username=$(az account show --query user.name --output tsv)
$rg=$(az group show --resource-group myResourceGroup --query id -o tsv)

az role assignment create \
    --role "Virtual Machine Administrator Login" \
    --assignee $username \
    --scope $rg

注意

如果 Azure AD 域和登录用户名域不匹配,则必须使用 --assignee-object-id 指定用户帐户的对象 ID,而不是仅指定 --assignee 的用户名。 可以使用 az ad user list 获取用户帐户的对象 ID。

有关如何使用 Azure RBAC 管理对 Azure 订阅资源的访问的详细信息,请参阅以下文章:

强制执行条件访问策略

在授权访问 Azure 中已启用 Azure AD 登录的 Windows VM 之前,可以强制执行条件访问策略,如多重身份验证或用户登录风险检查。 要应用条件访问策略,必须从云应用或操作分配选项中选择“Azure Windows VM 登录”应用。 然后,使用登录风险作为条件和/或要求 MFA 作为授权访问控制。

注意

如果需要 MFA 作为对 Azure Windows VM 登录应用的授权访问控制,则必须提供 MFA 声明,作为向 Azure 中目标 Windows VM 发起 RDP 会话的客户端的一部分。 为在 Windows 10 或更高版本的客户端上实现这一点,唯一的方法是向 RDP 客户端使用 Windows Hello 企业版 PIN 或生物特征身份验证。 在 Windows 10 版本 1809 中,已向 RDP 客户端添加对生物特征身份验证的支持。

使用 Windows Hello 企业版身份验证的远程桌面仅适用于使用证书信任模型的部署。 它目前不适用于密钥信任模型。

使用 Azure AD 凭据登录到 Windows VM

重要

仅允许从 Windows 10 或更高版本的电脑远程连接到已联接到 Azure AD 的 VM,而这些电脑需已注册了 Azure AD(要求的最低版本为 20H1)、联接到 Azure AD 或向 VM 所联接到的同一目录进行了混合 Azure AD 联接。 此外,对于使用 Azure AD 凭证的 RDP,用户必须属于两个 Azure 角色之一,即虚拟机管理员登录或虚拟机用户登录。

如果使用已注册 Azure AD 的 Windows 10 或更高版本的电脑,则必须以 AzureAD\UPN 格式(例如 AzureAD\john@contoso.com)输入凭据。 目前,Azure Bastion 可用于使用 Azure AD 身份验证通过 Azure CLI 和本机 RDP 客户端 mstsc 登录。

若要使用 Azure AD 登录到 Windows Server 2019 虚拟机,请执行以下操作:

  1. 转到已启用 Azure AD 登录的虚拟机的概述页面。
  2. 选择“连接”,打开“连接到虚拟机”窗格。
  3. 选择“下载 RDP 文件”。
  4. 选择“打开”,以打开远程桌面连接客户端。
  5. 选择“连接”,以打开“Windows 登录”对话框。
  6. 使用 Azure AD 凭据进行登录。

现在,你已使用分配的角色权限(例如“VM 用户”或“VM 管理员”)登录到 Windows Server 2019 Azure 虚拟机。

注意

可以将 .rdp 文件保存在本地计算机上,以便将来启动与虚拟机的远程桌面连接,而无需转到 Azure 门户中的虚拟机概述页面以及使用连接选项。

使用 Azure Policy 满足标准并评估合规性

使用 Azure Policy 可以:

  • 确保为新的和现有的 Windows 虚拟机启用 Azure AD 登录。
  • 在合规性仪表板上大规模评估环境的合规性。

借助此功能,可以使用多个强制实施级别。 你可以标记环境中未启用 Azure AD 登录的新的和现有 Windows VM。 你还可以使用 Azure Policy 在未启用 Azure AD 登录的新 Windows VM 上部署 Azure AD 扩展,并将现有 Windows VM 恢复为相同标准。

除这些功能以外,还可以使用 Azure Policy 来检测并标记在其计算机上创建了未批准的本地帐户的 Windows VM。 若要了解详细信息,请参阅 Azure Policy

排查部署问题

AADLoginForWindows 扩展必须成功安装,VM 才能完成 Azure AD 联接过程。 如果 VM 扩展无法正确安装,请执行以下步骤:

  1. 使用本地管理员帐户通过 RDP 连接到 VM,并检查 C:\WindowsAzure\Logs\Plugins\Microsoft.Azure.ActiveDirectory.AADLoginForWindows\1.0.0.1 下的 CommandExecution.log 文件。

    注意

    如果扩展在初始失败后重启,则含有部署错误的日志将保存为 CommandExecution_YYYYMMDDHHMMSSSSS.log。

  2. 在 VM 上打开 PowerShell 窗口。 验证针对 Azure 主机上运行的 Azure 实例元数据服务终结点的以下查询是否返回预期输出:

    要运行的命令 预期输出
    curl -H Metadata:true "http://169.254.169.254/metadata/instance?api-version=2017-08-01" 有关 Azure VM 的正确信息
    curl -H Metadata:true "http://169.254.169.254/metadata/identity/info?api-version=2018-02-01" 与 Azure 订阅关联的有效租户 ID
    curl -H Metadata:true "http://169.254.169.254/metadata/identity/oauth2/token?resource=urn:ms-drs:enterpriseregistration.partner.microsoftonline.cn&api-version=2018-02-01" Azure Active Directory 为分配给此 VM 的托管标识颁发的有效访问令牌

    注意

    可以使用 calebb.net 之类的工具对访问令牌进行解码。 验证访问令牌中的 oid 值是否与分配给 VM 的托管标识匹配。

  3. 确保可以通过 PowerShell 从 VM 访问所需的终结点:

    • curl.exe https://login.partner.microsoftonline.cn/ -D -
    • curl.exe https://login.partner.microsoftonline.cn/<TenantID>/ -D -
    • curl.exe https://enterpriseregistration.partner.microsoftonline.cn/ -D -
    • curl.exe https://device.login.partner.microsoftonline.cn/ -D -
    • curl.exe https://pas.chinacloudapi.cn/ -D -

    注意

    <TenantID> 替换为与 Azure 订阅关联的 Azure AD 租户 ID。 login.partner.microsoftonline.cn/<TenantID>enterpriseregistration.partner.microsoftonline.cnpas.chinacloudapi.cn 应该返回 404 Not Found,这是预期行为。

  4. 运行 dsregcmd /status 查看设备状态。 目标是让设备状态显示为 AzureAdJoined : YES

    注意

    Azure AD 联接活动在 Event Viewer (local)\Applications 和 Services Logs\Windows\Microsoft\User Device Registration\Admin 的 User Device Registration\Admin 日志下的事件查看器中捕获。

如果 AADLoginForWindows 扩展失败并出现错误代码,则可以执行以下步骤。

终端错误代码 1007 和退出代码 -2145648574。

终端错误代码 1007 和退出代码 -2145648574 转换为 DSREG_E_MSI_TENANTID_UNAVAILABLE。 扩展无法查询 Azure AD 租户信息。

以本地管理员身份连接到 VM,并验证终结点是否从 Azure 实例元数据服务返回有效的租户 ID。 从 VM 上的提升 PowerShell 窗口运行以下命令:

curl -H Metadata:true http://169.254.169.254/metadata/identity/info?api-version=2018-02-01

当 VM 管理员尝试安装 AADLoginForWindows 扩展,但系统分配的托管标识尚未先启用 VM 时,也可能发生此问题。 在这种情况下,请转到 VM 的“标识”窗格。 在“系统分配”选项卡中,验证“状态”是否切换为“开启”。

退出代码 -2145648607

退出代码 -2145648607 转换为 DSREG_AUTOJOIN_DISC_FAILED。 扩展无法访问 https://enterpriseregistration.partner.microsoftonline.cn 终结点。

  1. 验证是否可以通过 PowerShell 从 VM 访问所需的终结点:

    • curl https://login.partner.microsoftonline.cn/ -D -
    • curl https://login.partner.microsoftonline.cn/<TenantID>/ -D -
    • curl https://enterpriseregistration.partner.microsoftonline.cn/ -D -
    • curl https://device.login.partner.microsoftonline.cn/ -D -
    • curl https://pas.chinacloudapi.cn/ -D -

    注意

    <TenantID> 替换为与 Azure 订阅关联的 Azure AD 租户 ID。 如果需要查找租户 ID,可以将鼠标悬停在帐户名上,或在 Azure 门户中选择“Azure Active Directory”>“属性”>“目录 ID”。

    尝试连接到 enterpriseregistration.partner.microsoftonline.cn 可能会返回“404 未找到”,这是正常现象。 尝试连接 pas.chinacloudapi.cn 可能会提示输入 PIN 凭据,或者可能会返回“404 未找到”。 (无需输入 PIN。)任何一个都足以验证 URL 是否可访问。

  2. 如果任何命令失败,并且出现“无法解析主机 <URL>”,请尝试运行此命令,确定 VM 正在使用的 DNS 服务器:

    nslookup <URL>

    注意

    <URL> 替换为终结点使用的完全限定的域名,例如 login.partner.microsoftonline.cn

  3. 查看指定公共 DNS 服务器是否允许命令成功:

    nslookup <URL> 208.67.222.222

  4. 如有必要,请更改分配给 Azure VM 所属的网络安全组的 DNS 服务器。

退出代码 51

退出代码 51 转换为“VM 的操作系统不支持此扩展”。

AADLoginForWindows 扩展仅适用于在 Windows Server 2019 或 Windows 10(1809 或更高版本)上安装。 确保 Windows 版本或内部版本受支持。 如果不支持,请卸载该扩展。

排查登录问题

请根据以下信息来纠正登录问题。

可以通过运行 dsregcmd /status 来查看设备和单一登录 (SSO) 状态。 目标是使设备状态显示为 AzureAdJoined : YES,使 SSO 状态显示为 AzureAdPrt : YES

通过 Azure AD 帐户进行的 RDP 登录在 AAD\Operational 事件日志下的事件查看器中捕获。

未分配 Azure 角色

启动与 VM 的远程桌面连接时,可能会收到以下错误消息:“你的帐户已配置为阻止你使用此设备。 有关详细信息,请与系统管理员联系。”

指示你的帐户配置为阻止你使用此设备的消息屏幕截图。

请验证是否已为授予用户虚拟机管理员登录或虚拟机用户登录角色的 VM 配置 Azure RBAC 策略

注意

如果在 Azure 角色分配方面遇到问题,请参阅排查 Azure RBAC 的问题

需要未经授权的客户端或密码更改

启动与 VM 的远程桌面连接时,可能会收到以下错误消息:“你的凭据无效。”

指示你的凭据无效的消息屏幕截图。

请尝试以下解决方案:

  • 你要用于发起远程桌面连接的 Windows 10 或更高版本的电脑必须已建立 Azure AD 联接,或已建立到同一个 Azure AD 目录的混合 Azure AD 联接。 如需详细了解设备标识,请参阅什么是设备标识?一文。

    注意

    Windows 10 版本 20H1 添加了对已注册 Azure AD 电脑的支持来启动到 VM 的 RDP 连接。 在使用已注册 Azure AD(而不是已建立 Azure AD 联接或已建立混合 Azure AD 联接)的电脑作为 RDP 客户端来启动与 VM 的连接时,必须采用 AzureAD\UPN 格式(例如 AzureAD\john@contoso.com)输入凭据。

    请验证在 Azure AD 联接建立完成后是否尚未卸载 AADLoginForWindows 扩展。

    此外,请确保在服务器和客户端上都已启用安全策略“网络安全:允许请求对此计算机进行 PKU2U 身份验证以使用联机标识”。

  • 验证用户是否没有临时密码。 临时密码不能用于登录到远程桌面连接。

    在 Web 浏览器中使用用户帐户登录。 例如,在专用浏览窗口中打开 Azure 门户。 如果系统提示你更改密码,请设置新密码。 然后,重试连接。

需要 MFA 登录方法

启动与 VM 的远程桌面连接时,可能会看到以下错误消息:“你尝试使用的登录方法不受允许。 请尝试其他登录方法或与系统管理员联系。”

指示你尝试使用的登录方法不受允许的消息屏幕截图。

如果配置了一种条件访问策略,该访问策略需要 MFA 或旧式每用户启用/强制实施的 Azure AD MFA 才能访问资源,则需要确保启动与 VM 的远程桌面连接的 Windows 10 或更高版本的电脑使用强身份验证方法(如 Windows Hello)登录。 如果不对远程桌面连接使用强身份验证方法,则会看到该错误。

另一个与 MFA 相关的错误消息是前面所述的错误消息:“你的凭据无效。”

指示你的凭据无效的消息屏幕截图。

如果配置了旧式每用户“启用/强制实施的 Azure AD 多重身份验证”设置,并遇到上述错误,那么可使用以下命令移除每用户 MFA 设置来解决此问题:

# Get StrongAuthenticationRequirements configure on a user
(Get-MsolUser -UserPrincipalName username@contoso.com).StrongAuthenticationRequirements
 
# Clear StrongAuthenticationRequirements from a user
$mfa = @()
Set-MsolUser -UserPrincipalName username@contoso.com -StrongAuthenticationRequirements $mfa
 
# Verify StrongAuthenticationRequirements are cleared from the user
(Get-MsolUser -UserPrincipalName username@contoso.com).StrongAuthenticationRequirements

如果尚未部署 Windows Hello 企业版,并且目前还没有此选项,则可以配置条件访问策略,在该策略中将“Azure Windows VM 登录”应用从需要 MFA 的云应用列表中排除。 若要了解有关 Windows Hello 企业版的详细信息,请参阅 Windows Hello 企业版概述

注意

多个 Windows 10 版本已支持使用 RDP 进行 Windows Hello 企业版 PIN 身份验证。 Windows 10 版本 1809 中添加了对使用 RDP 进行生物特征身份验证的支持。 在 RDP 过程中使用 Windows Hello 企业版身份验证仅适用于使用证书信任模型的部署。 它目前不适用于密钥信任模型。

Azure AD 反馈论坛上分享此功能的反馈或报告使用时存在的问题。

缺少应用程序

如果条件访问中缺少 Azure Linux VM 登录应用程序,请确保该应用程序不在租户中:

  1. 登录到 Azure 门户。
  2. 浏览到“Azure Active Directory”>“企业应用程序”。
  3. 删除筛选器,查看所有应用程序,然后搜索“VM”。 如果搜索结果中没有 Azure Windows VM 登录,则租户中缺少服务主体。

另一种验证方法是通过 Graph PowerShell:

  1. 安装 Graph PowerShell SDK(如果尚未安装)。
  2. 依次运行 Connect-MgGraph -Scopes "ServicePrincipalEndpoint.ReadWrite.All""Application.ReadWrite.All"
  3. 使用全局管理员帐户登录。
  4. 同意权限提示。
  5. 运行 Get-MgServicePrincipal -ConsistencyLevel eventual -Search '"DisplayName:Azure Windows VM Sign-In"'
    • 如果此命令不生成任何输出并返回到 PowerShell 提示符,则可以使用以下 Graph PowerShell 命令创建服务主体:

      New-MgServicePrincipal -AppId 372140e0-b3b7-4226-8ef9-d57986796201

    • 成功的输出将显示已创建 Azure Windows VM 登录应用及其 ID。

  6. 使用 Disconnect-MgGraph 命令退出登录 Graph PowerShell。

后续步骤

有关 Azure AD 的详细信息,请参阅什么是 Azure Active Directory?