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 加入。
在创建计算机目录之前,您需要以下各项:
- 新资源位置
- 导航到 Citrix Cloud™ 管理 UI > 左上角汉堡菜单 > 资源位置。
- 单击 + 资源位置。
- 输入新资源位置的名称,然后单击保存。
- 创建托管连接。有关详细信息,请参阅创建和管理连接部分。在 Azure 上部署计算机时,请参阅连接到 Azure Resource Manager。
您可以使用 Studio 或 PowerShell 创建 Azure AD 加入的目录。
使用 Studio
以下信息是对创建计算机目录中指南的补充。要创建 Azure AD 加入的目录,请遵循该文章中的一般指南,同时注意 Azure AD 加入的目录特有的详细信息。
在目录创建向导中:
- 在映像页面上:
- 选择 2106 或更高版本作为功能级别。
- 选择使用计算机配置文件,然后从列表中选择相应的计算机。
-
在计算机身份页面上:
-
选择 Azure Active Directory 加入。创建的计算机归组织所有,并使用属于该组织的 Azure AD 帐户登录。它们仅存在于云中。
注意:
- Azure Active Directory 加入身份类型要求目录的最低功能级别为 2106 或更高版本。
- 计算机将加入与托管连接绑定的租户关联的 Azure AD 域。
-
单击选择服务帐户,然后从列表中选择一个可用的服务帐户。如果没有适用于计算机身份将加入的 Azure AD 租户的合适服务帐户,您可以创建一个服务帐户。有关服务帐户的信息,请参阅Azure AD 服务帐户。
注意:
您选择的服务帐户可能由于各种原因处于不正常状态。您可以转到管理员 > 服务帐户以查看详细信息并根据建议修复问题。或者,您可以继续执行计算机目录操作,稍后再修复问题。如果您不修复此问题,则会生成过时的 Azure AD 加入或 Microsoft Intune 注册设备,这可能会阻止计算机加入 Azure AD。
-
- 用户必须在 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_PermissionGranted
为 false,则表示托管连接使用的应用程序的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 动态安全组的计算机目录、向目录添加计算机以及删除计算机目录,您必须拥有 Azure AD 访问令牌。有关获取 Azure AD 访问令牌的信息,请参阅 https://docs.microsoft.com/zh-cn/graph/graph-explorer/graph-explorer-features#consent-to-permissions/。
- 要在 Azure AD 中请求访问令牌,Citrix 会请求 Microsoft Graph API 的 Group.ReadWrite.All 权限。拥有租户范围管理员同意权限的 Azure AD 用户可以授予 Microsoft Graph API 的 Group.ReadWrite.All 权限。有关如何向 Azure Active Directory (Azure AD) 中的应用程序授予租户范围管理员同意的信息,请参阅 Microsoft 文档 https://docs.microsoft.com/zh-cn/azure/active-directory/manage-apps/grant-admin-consent/。
- 如果您使用 Azure AD 服务帐户,则不需要 Azure AD 访问令牌。有关服务帐户的信息,请参阅用于计算机身份管理的服务帐户。
创建具有 Azure AD 动态安全组的计算机目录
- 在基于 Web 的控制台的计算机目录设置用户界面中,在计算机身份页面上,选择 Azure Active Directory 加入。
- 登录到 Azure AD。
- 获取 MS Graph API 的访问令牌。在运行 PowerShell 命令时,将此访问令牌用作
$AzureADAccessToken
参数的值。如果您使用 Azure AD 服务帐户,则不需要 Azure AD 访问令牌。 -
运行以下命令以验证租户中是否存在动态安全组名称。
Get-AcctAzureADSecurityGroup –AccessToken $AzureADAccessToken –Name "SecurityGroupName" <!--NeedCopy-->
或者,如果您使用 Azure AD 服务帐户,请运行以下命令:
Get-AcctAzureADSecurityGroup -ServiceAccountUid <service account uid> –Name "SecurityGroupName" <!--NeedCopy-->
-
使用租户 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 目录启用动态安全功能。为此:
- 手动创建新的动态安全组。您也可以重用现有动态安全组。
-
登录到 Azure AD,并获取 MS Graph API 的访问令牌。在运行 PowerShell 命令时,将此访问令牌用作
$AzureADAccessToken
参数的值。注意:
- 有关 Azure AD 用户所需权限的信息,请参阅 https://docs.microsoft.com/zh-cn/azure/active-directory/manage-apps/grant-admin-consent#prerequisites/。
- 如果您使用 Azure AD 服务帐户,则不需要 Azure AD 访问令牌。
-
运行以下命令以将身份池连接到创建的 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 动态安全组,请执行以下操作:
- 登录到 Azure AD。
- 获取 MS Graph API 的访问令牌。在运行 PowerShell 命令时,将此访问令牌用作
$AzureADAccessToken
参数的值。如果您使用 Azure AD 服务帐户,则不需要 Azure AD 访问令牌。 -
运行以下命令:
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>
。
获取访问令牌
- 打开 Microsoft Graph Explorer 并登录到 Azure AD。
- 确保您已同意 Group.ReadWrite.All 和 GroupMember.ReadWrite.All 权限。
- 从 Microsoft Graph Explorer 获取访问令牌。在运行 PowerShell 命令时使用此访问令牌。
按组 ID 获取安全组信息
- 获取访问令牌。
- 从 Azure 门户查找组对象 ID。
-
在 PowerShell 控制台中运行以下 PowerShell 命令:
Get-AcctAzureADSecurityGroup -AccessToken <token> -GroupId <GroupUid> <!--NeedCopy-->
或者,如果您使用 Azure AD 服务帐户,请运行以下命令:
Get-AcctAzureADSecurityGroup -ServiceAccountUid <guid> -GroupId <GroupUid> <!--NeedCopy-->
按组显示名称获取安全组
- 获取访问令牌。
-
在 PowerShell 控制台中运行以下 PowerShell 命令:
Get-AcctAzureADSecurityGroup -AccessToken <token> -Name <TargetGroupDisplayName> <!--NeedCopy-->
或者,如果您使用 Azure AD 服务帐户,请运行以下命令:
Get-AcctAzureADSecurityGroup -ServiceAccountUid <guid> -Name <TargetGroupDisplayName> <!--NeedCopy-->
获取显示名称包含子字符串的安全组
- 获取访问令牌。
-
在 PowerShell 控制台中运行以下 PowerShell 命令:
Get-AcctAzureADSecurityGroup -AccessToken <token> -SearchString <displayNameSubString> <!--NeedCopy-->
或者,如果您使用 Azure AD 服务帐户,请运行以下命令:
Get-AcctAzureADSecurityGroup -ServiceAccountUid <guid> -SearchString <displayNameSubString> <!--NeedCopy-->
获取从本地 AD 服务器同步的所有 Azure AD 分配的安全组,或可以分配 Azure AD 角色的分配安全组
- 获取访问令牌。
-
在 PowerShell 控制台中运行以下 PowerShell 命令:
Get-AcctAzureADSecurityGroup -AccessToken <token> -Assigned true <!--NeedCopy-->
或者,如果您使用 Azure AD 服务帐户,请运行以下命令:
Get-AcctAzureADSecurityGroup -ServiceAccountUid <guid> -Assigned true <!--NeedCopy-->
获取所有 Azure AD 动态安全组
- 获取访问令牌。
-
在 PowerShell 控制台中运行以下 PowerShell 命令:
Get-AcctAzureADSecurityGroup -AccessToken <token> -Dynamic true <!--NeedCopy-->
或者,如果您使用 Azure AD 服务帐户,请运行以下命令:
Get-AcctAzureADSecurityGroup -ServiceAccountUid <guid> -Dynamic true <!--NeedCopy-->
获取具有最大记录数的 Azure AD 分配安全组
- 获取访问令牌。
-
在 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 分配安全组的成员
- 获取访问令牌。
-
在 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 分配安全组成员
- 获取访问令牌。
-
在 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 分配安全组之间的成员资格
- 获取访问令牌。
-
在 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 动态安全组名称
- 打开 PowerShell 窗口。
- 运行
asnp citrix*
以加载 Citrix 特定的 PowerShell 模块。 - 运行命令
Set-AcctIdentityPool -AzureAdSeurityGroupName [DSG-Name]
。
如果无法修改 Azure AD 动态安全组名称,您将收到相应的错误消息。