Citrix DaaS™

Azure Active Directory 加入的计算机身份池

本文介绍如何使用 Citrix DaaS 创建 Azure Active Directory 加入的计算机身份池。

注意:

自 2023 年 7 月起,Microsoft 已将 Azure Active Directory (Azure AD) 重命名为 Microsoft Entra ID。在本文档中,任何对 Azure Active Directory、Azure AD 或 AAD 的引用现在均指 Microsoft Entra ID。

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

在创建计算机目录之前,您需要以下各项:

  1. 新资源位置
    • 导航到 Citrix Cloud™ 管理 UI > 左上角汉堡菜单 > 资源位置
    • 单击 + 资源位置
    • 输入新资源位置的名称,然后单击保存
  2. 创建托管连接。有关详细信息,请参阅创建和管理连接部分。在 Azure 上部署计算机时,请参阅连接到 Azure Resource Manager

您可以使用 Studio 或 PowerShell 创建 Azure AD 加入的目录。

使用 Studio

以下信息是对创建计算机目录中指南的补充。要创建 Azure AD 加入的目录,请遵循该文章中的一般指南,同时注意 Azure AD 加入的目录特有的详细信息。

在目录创建向导中:

  1. 映像页面上:
    • 选择 2106 或更高版本作为功能级别。
    • 选择使用计算机配置文件,然后从列表中选择相应的计算机。
  2. 计算机身份页面上:

    • 选择 Azure Active Directory 加入。创建的计算机归组织所有,并使用属于该组织的 Azure AD 帐户登录。它们仅存在于云中。

      注意:

      • Azure Active Directory 加入身份类型要求目录的最低功能级别为 2106 或更高版本。
      • 计算机将加入与托管连接绑定的租户关联的 Azure AD 域。
    • 单击选择服务帐户,然后从列表中选择一个可用的服务帐户。如果没有适用于计算机身份将加入的 Azure AD 租户的合适服务帐户,您可以创建一个服务帐户。有关服务帐户的信息,请参阅Azure AD 服务帐户

      注意:

      您选择的服务帐户可能由于各种原因处于不正常状态。您可以转到管理员 > 服务帐户查看详细信息并根据建议修复问题。或者,您可以继续执行计算机目录操作,稍后再修复问题。如果您不修复此问题,则会生成过时的 Azure AD 加入或 Microsoft Intune 注册设备,这可能会阻止计算机加入 Azure AD。

  3. 用户必须在 Azure 中获得显式访问权限,才能使用其 AAD 凭据登录到计算机。有关详细信息,请参阅Azure Active Directory 加入部分。

修改服务帐户关联

要更改关联的服务帐户或向现有 MCS 计算机目录添加关联,请使用编辑计算机目录页面。

  • 要添加服务帐户,请在服务帐户页面上单击选择服务帐户
  • 要更改服务帐户关联,请在服务帐户页面上单击编辑图标。

使用 PowerShell

以下是与 Studio 中的操作等效的 PowerShell 步骤。

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

您必须将 Azure AD 服务帐户与身份池关联,然后创建计算机目录。您可以创建新的身份池,也可以更新现有身份池以将其与服务帐户关联。

例如:要创建新的身份池并将其与服务帐户关联,请运行以下命令:

New-AcctIdentityPool -IdentityType AzureAD -IdentityPoolName MyPool -NamingScheme Acc#### -NamingSchemeType Numeric -ServiceAccountUid $serviceAccountUid
<!--NeedCopy-->

例如:要更新现有身份池以将其与服务帐户关联,请运行以下命令:

$identityPoolUid = (Get-ProvScheme -ProvisioningSchemeName "MyProvScheme").IdentityPoolUid
Set-AcctIdentityPool -IdentityPoolUid $identityPoolUid -ServiceAccountUid $serviceAccountUid
<!--NeedCopy-->

注意:

$serviceAccountUid 必须是有效的 Azure AD 服务帐户 UID。

要为 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 目录。例如:

New-ProvScheme -ProvisioningSchemeName <name> -ImageVersionSpecUid <preparedVersionSpecUid> -HostingUnitUid <hostingUnitUid> -IdentityPoolUid <IdentityPoolUid> [-CleanOnBoot] -NetworkMapping @{"0"="XDHyp:\HostingUnits\<hostingunitName>\<region>.region\virtualprivatecloud.folder\<resourcegroupName>.resourcegroup\<vnetName>.virtualprivatecloud\<sunNetName>.network"} -ServiceOffering <serviceofferingPath> [-MachineProfile <machineProfilePath>] [-CustomProperties <>]
<!--NeedCopy-->

查看 Azure AD 加入过程的状态

在 Studio 中,当交付组中的 Azure AD 加入计算机处于开机状态时,Azure AD 加入过程的状态可见。要查看状态,请使用搜索来识别这些计算机,然后检查下部窗格中详细信息选项卡上的计算机身份计算机身份中可以显示以下信息:

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

注意:

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

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

交付组

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

启用 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 扩展将 VM 加入 Azure AD。在这种情况下,AADLoginForWindows 扩展将不会安装在 MCS 预配的计算机上。因此,无法收集 AADLoginForWindows 扩展预配日志。

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

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

    确保以下值:

    • CustomProperties 中的 AzureAdDeviceManagement 属性为 true
    • 元数据中的 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 之间的任何名称,则该 VM 将包含在动态安全组中。

注意:

如果您手动创建的 VM 名称是 Test001 到 Test999 之间的任何名称,则该 VM 也将包含在动态安全组中。这是动态安全组的限制之一。

当您希望通过 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 参数的值。如果您使用 Azure AD 服务帐户,则不需要 Azure AD 访问令牌。
  4. 运行以下命令以验证租户中是否存在动态安全组名称。

    Get-AcctAzureADSecurityGroup
    –AccessToken  $AzureADAccessToken
    –Name "SecurityGroupName"
    <!--NeedCopy-->
    

    或者,如果您使用 Azure AD 服务帐户,请运行以下命令:

    Get-AcctAzureADSecurityGroup -ServiceAccountUid <service account uid> –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 服务帐户,请运行以下命令:

    New-AcctIdentityPool  -AllowUnicode -AzureADSecurityGroupName "<security group name>" -AzureADTenantId "<Azure tenant id>" -DeviceManagementType "Intune" -IdentityPoolName "dynamic security group test" -IdentityType "AzureAD"  -NamingScheme "<naming scheme>" -NamingSchemeType "Numeric" -Scope @() -ServiceAccountUid @("<service account uid>") -StartCount 1 -WorkgroupMachine -ZoneUid "<Zone UID>"
    <!--NeedCopy-->
    

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

您可以为未启用动态安全组功能而创建的 Azure AD 目录启用动态安全功能。为此:

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

    注意:

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

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

    或者,如果您使用 Azure AD 服务帐户,请运行以下命令:

    Set-AcctIdentityPool
    -IdentityPoolName "SecurityGroupCatalog"
    -AzureADTenantId 620387bb-9167-4bdd-8435-e3dccc58369e
    -AzureADSecurityGroupNam "ExistingSecurityGroupName"
    -ServiceAccountUid @("<service account uid>") -StartCount 1 -WorkgroupMachine -ZoneUid "<Zone UID>"
    <!--NeedCopy-->
    

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

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

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

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

  1. 登录到 Azure AD。
  2. 获取 MS Graph API 的访问令牌。在运行 PowerShell 命令时,将此访问令牌用作 $AzureADAccessToken 参数的值。如果您使用 Azure AD 服务帐户,则不需要 Azure AD 访问令牌。
  3. 运行以下命令:

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

    或者,如果您使用 Azure AD 服务帐户,请运行以下命令:

    Remove-AcctIdentityPool
    -IdentityPoolName "SecurityGroupCatalog"
    -ServiceAccountUid @("<service account uid>") -StartCount 1 -WorkgroupMachine -ZoneUid "<Zone UID>"
    <!--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 的访问令牌。如果您使用 Azure AD 服务帐户,则不需要 Azure AD 访问令牌。因此,请使用 ServiceAccountUid <service account uid> 而不是 -AccessToken <token>

获取访问令牌

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

按组 ID 获取安全组信息

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

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

    或者,如果您使用 Azure AD 服务帐户,请运行以下命令:

    Get-AcctAzureADSecurityGroup -ServiceAccountUid <guid> -GroupId <GroupUid>
    <!--NeedCopy-->
    

按组显示名称获取安全组

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

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

    或者,如果您使用 Azure AD 服务帐户,请运行以下命令:

    Get-AcctAzureADSecurityGroup
    -ServiceAccountUid <guid>
    -Name <TargetGroupDisplayName>
    <!--NeedCopy-->
    

获取显示名称包含子字符串的安全组

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

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

    或者,如果您使用 Azure AD 服务帐户,请运行以下命令:

    Get-AcctAzureADSecurityGroup
    -ServiceAccountUid <guid>
    -SearchString <displayNameSubString>
    <!--NeedCopy-->
    

获取从本地 AD 服务器同步的所有 Azure AD 分配的安全组,或可以分配 Azure AD 角色的分配安全组

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

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

    或者,如果您使用 Azure AD 服务帐户,请运行以下命令:

    Get-AcctAzureADSecurityGroup
    -ServiceAccountUid <guid>
    -Assigned true
    <!--NeedCopy-->
    

获取所有 Azure AD 动态安全组

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

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

    或者,如果您使用 Azure AD 服务帐户,请运行以下命令:

    Get-AcctAzureADSecurityGroup
    -ServiceAccountUid <guid>
    -Dynamic true
    <!--NeedCopy-->
    

获取具有最大记录数的 Azure AD 分配安全组

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

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

    或者,如果您使用 Azure AD 服务帐户,请运行以下命令:

    Get-AcctAzureADSecurityGroup
    -ServiceAccountUid <guid>
    -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 服务帐户,请运行以下命令:

    Add-AcctAzureADSecurityGroupMember
    -ServiceAccountUid <guid>
    -GroupId <ASG-Id>
    -RefGroupId <DSG-Id>
    <!--NeedCopy-->
    

获取 Azure AD 分配安全组成员

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

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

    或者,如果您使用 Azure AD 服务帐户,请运行以下命令:

    Get-AcctAzureADSecurityGroupMember
    -ServiceAccountUid <guid>
    -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 服务帐户,请运行以下命令:

    Remove-AcctIdentityPool
    -ServiceAccountUid <guid>
    -IdentityPoolName "SecurityGroupCatalog"
    <!--NeedCopy-->
    

修改 Azure AD 动态安全组名称

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

注意:

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

您可以使用 Studio 和 PowerShell 命令修改 Azure AD 动态安全组名称。

使用 PowerShell 修改 Azure AD 动态安全组名称

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

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

更多信息

Azure Active Directory 加入的计算机身份池