Citrix DaaS

创建加入了 Azure Active Directory 的目录

本文介绍如何使用 Citrix DaaS 创建 Azure Active Directory (AD) 加入的目录。

有关要求、限制和注意事项的信息,请参阅已加入 Azure Active Directory

在创建计算机目录之前,需要满足以下条件:

  1. 新资源位置
    • 导航到 Citrix Cloud 管理员 UI > 左上角的汉堡菜单 > Resource Locations(资源位置)。
    • 单击 + 资源位置
    • 输入新资源位置的名称,然后单击保存
  2. 创建主机连接。有关详细信息,请参阅创建和管理连接部分。在 Azure 上部署计算机时,请参阅连接到 Azure Resource Manager
  3. 要持续删除陈旧的 Azure AD 设备并允许新设备加入 Azure AD,可以将云设备管理员角色分配给配置服务主体。如果不删除 Azure 陈旧的 AD 设备,则相应的非持久性 VM 将保持初始化状态,直到您手动将其从 Azure AD 门户中移除。为此,请使用完整配置接口启用加入了 Azure AD 的设备对主机连接的管理,或者执行以下步骤:

    1. 登录 Azure 门户并导航到 Azure Active Directory > 角色和管理员
    2. 搜索云设备管理员内置角色,然后单击“添加分配”,将该角色分配给托管连接所用应用程序的服务主体。
    3. 使用 Citrix Remote PowerShell SDK 运行以下命令以获取现有 CustomProperties 的主机连接。${HostingConnectionName} 是指托管连接的名称。

      1. 打开 PowerShell 窗口。
      2. 运行 asnp citrix* 以加载 Citrix 特定的 PowerShell 模块。
      3. 运行以下命令以获取托管连接的现有自定义属性。

        (Get-Item -LiteralPath XDHyp:\Connections${HostingConnectionName}).CustomProperties
        <!--NeedCopy-->
        
      4. 将连接中的 CustomProperties 复制到记事本并附加属性设置 <Property xsi:type="StringProperty" Name="AzureAdDeviceManagement" Value="true" />
      5. PowerShell 窗口中,为修改后的定制属性分配一个变量。例如,$UpdatedCustomProperties=’<CustomProperties …</CustomProperties>’
      6. 将自定义属性设置回托管连接:

        Set-Item -LiteralPath XDHyp:\Connections${HostingConnectionName} -CustomProperties ${UpdatedCustomProperties} -ZoneUid ${ZoneUid}
        <!--NeedCopy-->
        
      7. 运行命令 (Get-Item -LiteralPath XDHyp:\Connections\${HostingConnectionName}).CustomProperties 以验证更新的自定义属性设置。

您可以使用完整配置界面或 PowerShell 创建加入了 Azure AD 的目录。

使用“完整配置”界面

以下信息用于补充创建计算机目录中的指导信息。若要创建加入了 Azure AD 的目录,请遵循该文章中的一般指导,注意特定于加入了 Azure AD 的目录的详细信息。

在目录创建向导中执行以下操作:

  1. 在“映像”页面上:
    • 选择 2106 或更高版本作为功能级别。
    • 选择“使用计算机配置文件”,然后从列表中选择相应的计算机。
  2. 在“计算机标识”页面上,选择“已加入 Azure Active Directory”。创建的计算机归某个组织所有,并使用属于该组织的 Azure AD 帐户登录。它们只存在于云中。

    注意:

    • 已加入 Azure Active Directory 标识类型要求将 2106 或更高版本作为目录的最低功能级别。
    • 计算机已加入与主机连接绑定到的租户关联的 Azure AD 域。
  3. 必须授予用户在 Azure 中的显式访问权限,才能使用其 AAD 凭据登录计算机。有关更多详细信息,请参阅已加入 Azure Active Directory 部分。

使用 PowerShell

以下是 PowerShell 步骤,等效于“完整配置”中的操作。有关如何使用 Remote PowerShell SDK 创建目录的信息,请参阅 https://developer-docs.citrix.com/projects/citrix-virtual-apps-desktops-sdk/en/latest/creating-a-catalog/

本地 AD 加入目录和加入 Azure AD 的目录之间的区别在于身份池的创建和置备方案。

要为加入了 Azure AD 的目录创建身份池,请执行以下操作:

New-AcctIdentityPool -AllowUnicode -IdentityType="AzureAD" -WorkgroupMachine -IdentityPoolName "AzureADJoinedCatalog" -NamingScheme "AzureAD-VM-##" -NamingSchemeType "Numeric" -Scope @() -ZoneUid "81291221-d2f2-49d2-ab12-bae5bbd0df05"
<!--NeedCopy-->

要为加入 Azure AD 的目录创建置备方案,需要在 New-ProvScheme 中使用 MachineProfile 参数:

New-ProvScheme -CustomProperties "<CustomProperties xmlns=`"http://schemas.citrix.com/2014/xd/machinecreation`" xmlns:xsi=`"http://www.w3.org/2001/XMLSchema-instance`"><Property xsi:type=`"StringProperty`" Name=`"UseManagedDisks`" Value=`"true`" /><Property xsi:type=`"StringProperty`" Name=`"StorageType`" Value=`"StandardSSD_LRS`" /><Property xsi:type=`"StringProperty`" Name=`"LicenseType`" Value=`"Windows_Server`" /></CustomProperties>" -HostingUnitName "AzureResource" -IdentityPoolName "AzureADJoinedCatalog" -InitialBatchSizeHint 1 -MachineProfile "XDHyp:\HostingUnits\AzureResource\image.folder\azuread-rg.resourcegroup\MasterVDA.vm" -MasterImageVM "XDHyp:\HostingUnits\AzureResource\image.folder\azuread-rg.resourcegroup\azuread-small_OsDisk_1_5fb42fadf7ff460bb301ee0d56ea30da.manageddisk" -NetworkMapping @{"0"="XDHyp:\HostingUnits\AzureResource\virtualprivatecloud.folder\East US.region\virtualprivatecloud.folder\azuread-rg.resourcegroup\azuread-vnet.virtualprivatecloud\Test_VNET.network"} -ProvisioningSchemeName "AzureADJoinedCatalog" -RunAsynchronously -Scope @() -SecurityGroup @() -ServiceOffering "XDHyp:\HostingUnits\AzureResource\serviceoffering.folder\Standard_DS1_v2.serviceoffering"
<!--NeedCopy-->

用于创建 Azure AD 联接目录的所有其他命令与用于传统本地 AD 联接目录的命令相同。

查看 Azure AD 加入过程的状态

在“完整配置”界面中,当交付组中加入了 Azure AD 的计算机处于开机状态时,Azure AD 加入进程的状态将可见。要查看状态,请使用搜索来标识这些计算机,然后在下部窗格的详细信息选项卡上为每台选中计算机标识计算机标识中可能显示以下信息:

  • 已加入 Azure AD
  • 尚未加入 Azure AD

注意:

如果计算机未能处于 Azure AD 加入状态,则它们不会向Delivery Controller 注册。它们的注册状态显示为初始化

此外,使用完整配置界面,您可以了解计算机不可用的原因。为此,请单击搜索节点上的计算机,在下部窗格的详细信息选项卡上选中注册,然后阅读工具提示以获取其他信息。

交付组

有关详细信息,请参阅 创建交付组 部分。

启用 Rendezvous

创建交付组后,您可以启用 Rendezvous。有关详细信息,请参阅 Rendezvous V2

故障排除

如果计算机无法加入 Azure AD,请执行以下操作:

  • 检查是否为计算机启用了系统分配的托管身份。MCS 配置的计算机必须自动启用此功能。如果没有系统分配托管身份,Azure AD 加入过程将失败。如果未为 MCS 配置的计算机启用系统分配的托管身份,则可能的原因是:

    • 与预配方案关联的身份池的 IdentityType 未设置为 AzureAD。可以通过运行 Get-AcctIdentityPool 来验证这一点。
  • 对于使用具有 VDA 版本 2206 或更早版本的主映像的目录,请检查计算机的 AADLoginForWindows 扩展程序的配置状态。如果 AADLoginForWindows 扩展程序不存在,可能的原因如下:

    • 与预配方案关联的身份池的 IdentityType 未设置为 AzureAD。可以通过运行 Get-AcctIdentityPool 来验证这一点。

    • AADLoginForWindows 扩展程序的安装被 Azure 策略阻止。

  • 要对 AADLoginForWindows 扩展程序配置失败进行故障排除,您可以在 MCS 配置的计算机上查看 C:\WindowsAzure\Logs\Plugins\Microsoft.Azure.ActiveDirectory.AADLoginForWindows 下的日志。

    注意:

    使用 VDA 版本 2209 或更高版本的主映像时,MCS 不依赖 AADLoginForWindows 扩展将虚拟机加入 Azure AD。在这种情况下,AADLoginForWindows 扩展程序不会安装在 MCS 预配的计算机上。因此,无法收集 AADLoginForWindows 扩展程序预配日志。

  • 通过在 MCS 配置的计算机上运行 dsregcmd /status 命令来检查 Azure AD 加入状态和调试日志。

  • 在“应用程序和服务日志”>“Microsoft”>“Windows”>“用户设备注册”下查看 Windows 事件日志。
  • 运行 Get-Item -LiteralPath XDHyp:\Connections\${HostingConnectionName} 时检查 Azure AD 设备管理配置是否正确。

    确保以下各项的值:

    • CustomProperties 中的属性 AzureAdDeviceManagementtrue
    • 元数据中的 Citrix_MCS_AzureAdDeviceManagement_PermissionGranted 属性为 true

    如果 Citrix_MCS_AzureAdDeviceManagement_PermissionGrantedfalse,则表示托管连接所使用的应用程序的 ServicePrincipal 没有获得足够的权限来执行 Azure AD 设备管理。要解决此问题,请为 ServicePrincipal 分配云设备管理员角色。

Azure Active Directory 动态安全组

动态组规则根据计算机目录的命名方案将目录中的 VM 置于动态安全组中。

如果计算机目录的命名方案是 Test###(其中,# 表示数字),Citrix 会在动态安全组中创建动态成员资格规则 ^Test[0-9]{3}$。现在,如果 Citrix 创建的 VM 的名称介于 Test001 到 Test999 之间,则该虚拟机将包含在动态安全组中。

注意:

如果您手动创建的虚拟机的名称介于 Test001 到 Test999 之间,则该虚拟机也包含在动态安全组中。这是动态安全组的局限性之一。

当您想通过 Azure Active Directory (Azure AD) 管理 VM 时,动态安全组功能很有用。当您想要应用条件访问策略或者通过使用 Azure AD 动态安全组筛选 VM 来分发来自 Intune 的应用程序时,这也非常有用。

您可以使用 PowerShell 命令来:

  • 使用 Azure AD 动态安全组创建计算机目录
  • 为 Azure AD 目录启用安全组功能
  • 删除已加入 Azure AD 的设备安全组的计算机目录

重要提示:

使用 Azure AD 动态安全组创建计算机目录

  1. 在基于 Web 的控制台的计算机目录设置用户界面中,在“计算机身份”页面上,选择已加入 Azure Active Directory
  2. 登录 Azure AD。
  3. 获取 MS Graph API 的访问令牌。运行 PowerShell 命令时,使用此访问令牌作为 $AzureADAccessToken 参数de 值。
  4. 运行以下命令以验证租户中是否存在动态安全组名称。

    Get-AcctAzureADSecurityGroup
    –AccessToken  $AzureADAccessToken
    –Name "SecurityGroupName"
    <!--NeedCopy-->
    
  5. 使用租户 ID、访问令牌和动态安全组创建计算机目录。运行以下命令使用创建带 IdentityType=AzureAD 的 IdentityPool,然后在 Azure 中创建动态安全组。

    New-AcctIdentityPool
    -AllowUnicode
    -IdentityPoolName "SecurityGroupCatalog"
    -NamingScheme "SG-VM-###"
    -NamingSchemeType "Numeric" -Scope @()
    -ZoneUid "81291221-d2f2-49d2-ab12-bae5bbd0df05"
    -WorkgroupMachine
    -IdentityType "AzureAD"
    -DeviceManagementType "None"
    -AzureADTenantId  620387bb-9167-4bdd-8435-e3dccc58369e
    -AzureADSecurityGroupName "SecurityGroupName"
    -AzureADAccessToken $AzureADAccessToken
    <!--NeedCopy-->
    

为 Azure AD 目录启用安全组功能

您可以为在未启用动态安全组功能的情况下创建的 Azure AD 目录启用动态安全功能。为此,您需要:

  1. 手动创建新的动态安全组。您也可以重用现有的动态安全组。
  2. 登录 Azure AD,获取 MS Graph API 的访问令牌。运行 PowerShell 命令时,使用此访问令牌作为 $AzureADAccessToken 参数de 值。

    注意:

    有关 Azure AD 用户所需权限的信息,请参阅 https://docs.microsoft.com/en-us/azure/active-directory/manage-apps/grant-admin-consent#prerequisites/

  3. 运行以下命令将身份池连接到创建的 Azure AD 动态安全组。

    Set-AcctIdentityPool
    -IdentityPoolName "SecurityGroupCatalog"
    -AzureADTenantId 620387bb-9167-4bdd-8435-e3dccc58369e
    -AzureADSecurityGroupNam "ExistingSecurityGroupName"
    -AzureADAccessToken $AzureADAccessToken
    <!--NeedCopy-->
    

如果您更新命名方案,Citrix 会将命名方案更新为新的成员资格规则。如果您删除目录,则会删除成员资格规则,而不是安全组。

删除已加入 Azure AD 的设备安全组的计算机目录

删除计算机目录时,已加入 Azure AD 的设备安全组也会被删除。

要删除 Azure AD 动态安全组,请执行以下操作:

  1. 登录 Azure AD。
  2. 获取 MS Graph API 的访问令牌。运行 PowerShell 命令时,使用此访问令牌作为 $AzureADAccessToken 参数的值。
  3. 请运行以下命令:

    Remove-AcctIdentityPool
    -IdentityPoolName "SecurityGroupCatalog"
    -AzureADAccessToken $AzureADAccessToken
    <!--NeedCopy-->
    

在现有 Azure AD 分配的安全组下创建 Azure AD 动态安全组

您可以在现有 Azure AD 分配的安全组下创建 Azure AD 动态安全组。可执行以下操作:

  • 获取安全组信息。
  • 获取从本地 AD 服务器同步的所有 Azure AD 分配的安全组或可分配 Azure AD 角色的已分配安全组。
  • 获取所有 Azure AD 动态安全组。
  • 将 Azure AD 动态安全组添加为已分配 Azure AD 的组的成员。
  • 删除 Azure AD 动态安全组和计算机目录时,删除 Azure AD 动态安全组与 Azure AD 分配的安全组之间的成员资格。

当任何操作失败时,您还可以看到明确的错误消息。

要求:

运行 PowerShell 命令时,您必须拥有 MS Graph API 的访问令牌。

要获取访问令牌,请执行以下操作:

  1. 打开 Microsoft Graph 资源管理器并登录 Azure AD。
  2. 确保您同意 Group.ReadWrite.AllGroupMember.ReadWrite.All 权限。
  3. 从 Microsoft Graph 资源管理器获取访问令牌。在运行 PowerShell 命令时使用此访问令牌。

要按组 ID 获取安全组信息,请执行以下操作:

  1. 获取访问令牌。
  2. 从 Azure 门户中查找组对象 ID。
  3. PowerShell 控制台中运行以下 PowerShell 命令:

    Get-AcctAzureADSecurityGroup
    -AccessToken <token> -GroupId <GroupUid>
    <!--NeedCopy-->
    

要按组显示名称获取安全组,请执行以下操作:

  1. 获取访问令牌。
  2. PowerShell 控制台中运行以下 PowerShell 命令:

    Get-AcctAzureADSecurityGroup
    -AccessToken <token>
    -Name <TargetGroupDisplayName>
    <!--NeedCopy-->
    

要获取显示名称包含子字符串的安全组,请执行以下操作:

  1. 获取访问令牌。
  2. PowerShell 控制台中运行以下 PowerShell 命令:

    Get-AcctAzureADSecurityGroup
    -AccessToken <token>
    -SearchString <displayNameSubString>
    <!--NeedCopy-->
    

要获取从本地 AD 服务器同步的所有 Azure AD 分配的安全组或可分配 Azure AD 角色的已分配安全组,请执行以下操作:

  1. 获取访问令牌。
  2. PowerShell 控制台中运行以下 PowerShell 命令:

    Get-AcctAzureADSecurityGroup
    -AccessToken <token>
    -Assigned true
    <!--NeedCopy-->
    

要获取所有 Azure AD 动态安全组,请执行以下操作:

  1. 获取访问令牌。
  2. PowerShell 控制台中运行以下 PowerShell 命令:

    Get-AcctAzureADSecurityGroup
    -AccessToken <token>
    -Dynamic true
    <!--NeedCopy-->
    

要获得具有最大记录数的 Azure AD 分配的安全组,请执行以下操作:

  1. 获取访问令牌。
  2. PowerShell 控制台中运行以下 PowerShell 命令:

    Get-AcctAzureADSecurityGroup
    -AccessToken <token>
    -Assigned true
    -MaxRecordCount 10
    <!--NeedCopy-->
    

要将 Azure AD 动态安全组添加为 Azure AD 分配的安全组的成员,请执行以下操作:

  1. 获取访问令牌。
  2. PowerShell 控制台中运行以下 PowerShell 命令:

    Add-AcctAzureADSecurityGroupMember
    -AccessToken <token>
    -GroupId <ASG-Id>
    -RefGroupId <DSG-Id>
    <!--NeedCopy-->
    

要获得 Azure AD 分配的安全组成员,请执行以下操作:

  1. 获取访问令牌。
  2. PowerShell 控制台中运行以下 PowerShell 命令:

    Get-AcctAzureADSecurityGroupMember
    -AccessToken <token>
    -GroupId <ASG-Id>
    <!--NeedCopy-->
    

    注意:

    Get-AcctAzureADSecurityGroupMember 在 Azure AD 分配的安全组下,仅为您提供安全组类型的直接成员。

要在删除 Azure AD 动态安全组和计算机目录时删除 Azure AD 动态安全组与 Azure AD 分配的安全组之间的成员资格,请执行以下操作:

  1. 获取访问令牌。
  2. PowerShell 控制台中运行以下 PowerShell 命令:

    Remove-AcctIdentityPool
    -IdentityPoolName "SecurityGroupCatalog"
    -AzureADAccessToken $AzureADAccessToken
    <!--NeedCopy-->
    

修改 Azure AD 动态安全组名称

可以修改与计算机目录关联的 Azure AD 动态安全组名称。此修改使存储在 Azure AD 身份池对象中的安全组信息与 Azure 门户中存储的信息保持一致。

注意:

Azure AD 动态安全组不包括从本地 AD 和 Office 365 组等其他组类型同步的安全组。

您可以使用完整配置界面和 PowerShell 命令修改 Azure AD 动态安全组名称。

要使用 PowerShell 修改 Azure AD 动态安全组名称,请执行以下操作:

  1. 打开 PowerShell 窗口。
  2. 运行 asnp citrix* 以加载 Citrix 特定的 PowerShell 模块。
  3. 运行命令 Set-AcctIdentityPool -AzureAdSeurityGroupName [DSG-Name]

如果无法修改 Azure AD 动态安全组名称,则会收到相应的错误消息。

创建加入了 Azure Active Directory 的目录