配置组托管服务账户 (gMSA) 对会话录制的支持
会话录制支持组托管服务账户 (gMSA),以简化在多台服务器上运行的服务的服务主体名称 (SPN) 管理。此功能增强了安全性并简化了服务账户的管理。
步骤 1:在域控制器上创建 gMSA
注意:
本节介绍如何在域控制器上使用服务器管理器创建 gMSA。或者,您可以运行以下脚本以达到相同的目的:
Add-KdsRootKey -EffectiveImmediately Install-WindowsFeature -Name RSAT-AD-PowerShell NEW-ADGroup –name "gMSA" –path "DC=ajj,DC=test" -GroupCategory Security -groupscope Global Add-ADGroupMember "gMSA" -Members "Server-3$"(The dollar sign $ is must) New-ADServiceAccount IIS1SvC -DNSHostName IIS1Svc.ajj.test -PrincipalsAllowedToRetrieveManagedPassword gMSA <!--NeedCopy-->“生效时间”参数允许密钥在使用前传播到所有域控制器 (DC)。使用 Add-KdsRootKey -EffectiveImmediately 会将根密钥添加到目标 DC,供密钥分发服务 (KDS) 立即使用。但是,在复制完成之前,其他域控制器将无法使用该根密钥。
-
在域控制器上,打开 Active Directory 管理中心。

-
请选择域并创建一个组。

-
命名组(以 gMSA 为例)。将组类型设置为安全,将组范围设置为全局。向其中添加成员服务器。成员服务器包括安装了会话录制服务器和会话录制数据库的计算机。

例如,组的成员按如下方式添加:

-
成功添加安全组后,您可以使用 Active Directory 管理中心中的全局搜索功能进行查找。您可以查看成员服务器,并记住重新启动所有这些服务器。

-
Create a gMSA account using the New-ADServiceAccount PowerShell cmdlet.
在域控制器上,打开 Windows PowerShell 并运行以下命令以创建 gMSA:
New-ADServiceAccount $serviceAccountName -DNSHostName $DNSHostName -PrincipalsAllowedToRetrieveManagedPassword $groupName <!--NeedCopy-->其中,
-
$serviceAccountName specifies the name of the gMSA. This article uses IIS1SvC as an example.
-
$DNSHostName specifies the DNS host name, in the format of $serviceAccountName followed by the domain name of the domain controller.
-
$groupName 指定允许检索托管密码的组。本文以 gMSA 为例。
-
步骤 2:在每个成员服务器上安装 gMSA
您必须在使用 gMSA 的每个服务器上安装它。
-
安装适用于 Windows PowerShell 的活动目录模块,使用服务器管理器或具有管理权限的 PowerShell。
-
以下是使用服务器管理器的一个示例:

-
如果您使用具有管理权限的 PowerShell,请运行以下命令:
Install-WindowsFeature -Name RSAT-AD-PowerShell <!--NeedCopy-->
-
-
打开 Windows PowerShell 并运行类似以下命令以安装 gMSA。
Install-ADServiceAccount IIS1SvC <!--NeedCopy-->如果遇到类似以下内容的“访问被拒绝”错误,请确保当前成员服务器已添加到 gMSA 的允许列表中,并且服务器已重新启动。

-
通过在 PowerShell 中运行以下类似命令,验证您是否已成功安装 gMSA。如果命令返回 True,则 gMSA 已成功安装。
Test-ADServiceAccount IIS1SvC <!--NeedCopy-->
步骤 3:启用 gMSA 访问会话录制数据库和会话录制日志数据库
-
为 gMSA 创建一个登录账户。使用 SQL Server Management Studio (SSMS) 连接到会话录制数据库的 SQL 数据库实例。

将新登录名命名为以下格式:<域控制器域名>\<gMSA 名称>。例如:

-
启用 gMSA 访问会话录制数据库和会话录制日志数据库。
-
通过 Windows 注册表查找会话录制数据库和会话录制日志数据库的名称。例如,双击以下注册表项以获取其值数据。

-
将会话录制数据库和会话录制日志数据库的 db_owner 权限授予 gMSA。


注意:
如果您授予 db_datareader 和 db_datawriter 权限而不是 db_owner 权限,则还必须将数据库的执行权限授予 gMSA。例如:
use SR2311 grant execute to [name of the login created earlier] use SR2311log grant execute to [name of the login created earlier] <!--NeedCopy--> -
步骤 3:使 gMSA 能够访问会话录制服务器
在每台会话录制服务器上完成以下步骤:
-
在安装了会话录制服务器的计算机上打开 Internet Information Services (IIS) 管理器,将应用程序池标识设置为 gMSA,然后重新启动 IIS。

例如,以下应用程序池标识已设置为 gMSA

注意:
或者,您可以使用 Windows PowerShell 运行类似于以下内容的命令来设置应用程序池标识:
Import-Module WebAdministration -ErrorAction Stop $webapps = Get-ChildItem -Path IIS:\AppPools foreach ($webapp in $webapps) { if ($webapp.Name.Contains("SessionRecording")){ $Pool = "IIS:\AppPools\" + $webapp.Name Write-Host $Pool Set-ItemProperty -Path $Pool -Name processModel -Value @{userName="AJJ \IIS1SvC$";identitytype=3} } } <!--NeedCopy--> -
在安装了会话录制服务器的计算机上打开注册表编辑器,然后将会话录制服务器的读取权限授予 gMSA。
-
找到服务帐户对象类型。

-
输入 gMSA 的名称。

-
授予 gMSA 读取权限。

注意:
或者,您可以使用类似于以下内容的脚本,向 gMSA 授予会话录制服务器上的读取权限:
$RegistryKey = "HKLM:\SOFTWARE\Citrix\SmartAuditor" $NewAcl = Get-Acl -Path $RegistryKey $identity = "pahl6\IIS1SvC$" $RegistryKeyRights = "ReadPermissions" $type = "Allow" $RegistryKeyAccessRuleArgumentList = $identity, $RegistryKeyRights, $type $RegistryKeyAccessRule = New-Object System.Security.AccessControl.RegistryAccessRule -ArgumentList $RegistryKeyAccessRuleArgumentList $NewAcl.SetAccessRule($RegistryKeyAccessRule) Set-Acl -Path $RegistryKey -AclObject $NewAcl <!--NeedCopy--> -
-
将会话录制存储文件夹添加到 gMSA,并授予其对该文件夹的读取和写入权限。之后,启用继承并选择用此对象的可继承权限条目替换所有子对象权限条目。



注意:
或者,您可以使用类似于以下内容的脚本,向 gMSA 授予会话录制存储文件夹的读取和写入权限,并启用继承:
$path = "C:\SessionRecordings" $NewAcl = Get-Acl $path # Set properties $identity = "pahl6\IIS1SvC$" $fileSystemRights = "Modify" $type = "Allow" # Create new rule $fileSystemAccessRuleArgumentList = $identity, $fileSystemRights, $type $fileSystemAccessRule = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule $fileSystemAccessRuleArgumentList # Apply new rule $NewAcl.SetAccessRule($fileSystemAccessRule) # enable inherit $isProtected = $false $preserveInheritance = $false $NewAcl.SetAccessRuleProtection($isProtected, $preserveInheritance) Set-Acl -Path $path -AclObject $NewAcl <!--NeedCopy--> -
将 gMSA 添加到会话录制授权控制台。
-
查找 gMSA 的安全标识符 (SID)。

-
将 SID 写入到名为 SessionRecordingAzManStore 的文件之中,该文件位于 <会话录制服务器的安装目录路径>\App_Data 目录之中。
将 gMSA SID 值 写入文件(/zh-cn/session-recording/2411/media/write-gmsa-sid-to-file.png)
-
授予 gMSA 对 App-Data 文件夹的完全控制权限。
授予 gMSA 对 App-Data 文件夹的完全控制权限(/zh-cn/session-recording/2411/media/grant-permission-on-the-app-data-folder-to-a-gmsa.png)
-
验证 gMSA 是否已成功添加到会话录制授权控制台。
验证 gMSA 是否已成功添加到会话录制授权控制台(/zh-cn/session-recording/2411/media/verify-that-a-gmsa-is-successfully-added-to-the-session-recording-authorization-console.png)
注意:
或者,您可以使用类似于以下内容的脚本将 gMSA 添加到会话录制授权控制台:
$account = "IIS1SvC" $AccountDetail = Get-ADServiceAccount -Identity $account $accountSid = $AccountDetail.SID.Value write-host $accountSid $path = "C:\Program Files\Citrix\SessionRecording\Server\App_Data\SessionRecordingAzManStore.xml" $doc = [xml](Get-Content $path) $node = $doc.AzAdminManager.AzApplication.AzRole | Where-Object {$_.Name -eq "LoggingWriter"} $element = $doc.CreateElement("Member") $element.InnerText = $accountSid $node.AppendChild($element) $doc.Save($path) <!--NeedCopy--> -