配置会话录制对组托管服务帐户 (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) 立即使用。但是,其他域控制器在复制完成之前无法使用该根密钥。

  1. 在域控制器上,打开 Active Directory 管理中心。

    活动目录管理中心

  2. 请选择域,然后创建一个组。

    选择域并创建组

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

    命名组并添加成员服务器

    例如,添加组的成员的操作如下所示:

    已添加组员

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

    全局搜索

  5. Create a gMSA account using the New-ADServiceAccount PowerShell cmdlet.

    在域控制器上,打开 Windows PowerShell 并运行以下命令以创建 gMSA:

    New-ADServiceAccount $serviceAccountName -DNSHostName $DNSHostName -PrincipalsAllowedToRetrieveManagedPassword $groupName
    <!--NeedCopy-->
    

    其中,

    • $serviceAccountName 指定组管理服务帐户的名称。本文以 IIS1SvC 作为示例。

    • $DNSHostName 指定域名系统主机名,格式为 $serviceAccountName 后跟域控制器的域名。

    • $groupName 指定允许检索托管密码的组。本文以 gMSA 为例。

步骤 2:在每个成员服务器上安装 gMSA

您必须在使用 gMSA 的每个服务器上安装它。

  1. 使用服务器管理器或具有管理权限的 PowerShell 安装适用于 Windows PowerShell 的活动目录模块。

    • 以下是使用服务器管理器的示例:

      安装适用于 Windows PowerShell 的活动目录模块

    • 如果您使用具有管理权限的 PowerShell,请运行以下命令:

       Install-WindowsFeature -Name RSAT-AD-PowerShell
       <!--NeedCopy-->
      
  2. 打开 Windows PowerShell 并运行类似于以下内容的命令以安装 gMSA。

    Install-ADServiceAccount IIS1SvC
    <!--NeedCopy-->
    

    如果遇到类似于以下内容的“访问被拒绝”错误,请确保当前成员服务器已添加到 gMSA 的允许列表中,并且服务器已重新启动。

    安装 gMSA 时出现“访问被拒绝”错误

  3. 通过在 PowerShell 中运行与以下命令类似的命令,验证是否已成功安装 gMSA。如果命令返回 True,则表示 gMSA 已成功安装。

    Test-ADServiceAccount IIS1SvC
     <!--NeedCopy-->
    

    验证 gMSA 是否已成功安装

步骤 3:启用 gMSA 以访问会话录制数据库和会话录制日志数据库

  1. 为 gMSA 创建登录名。使用 SQL Server 管理工作室 (SSMS) 连接到会话录制数据库的 SQL 实例。

    为 gMSA 创建登录名

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

    SQL 实例登录名

  2. 启用 gMSA 以访问会话录制数据库和会话录制日志数据库。

    1. 通过注册表查找会话录制数据库和会话录制日志数据库的名称。例如,双击以下注册表项以获取相应的值数据。

      通过注册表查找数据库名称

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

      授予会话录制数据库的 db_owner 权限

      授予会话录制日志数据库的 db_owner 权限

    注意:

    如果您授予 db_datareaderdb_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 以访问会话录制服务器

在每台会话录制服务器上完成以下步骤:

  1. 在安装了会话录制服务器的计算机上打开 Internet Information Services (IIS) 管理器,将应用程序池标识设置为 gMSA,然后重新启动 IIS。

    将应用程序池标识设置为 gMSA

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

    应用程序池标识已设置为 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-->
    
  2. 在安装了会话录制服务器的计算机上打开注册表编辑器,然后向 gMSA 授予会话录制服务器的读取权限。

    1. 找到服务帐户对象类型。

      找到服务帐户对象类型

    2. 输入 gMSA 的名称。

      输入组管理服务账户

    3. 向 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-->
    
  3. 将 gMSA 添加到会话录制存储文件夹,并授予其对该文件夹的读取和写入权限。之后,启用继承并选择用此对象的可继承权限条目替换所有子对象权限条目

    授予 gMSA 对会话录制存储文件夹的读取和写入权限 - 步骤 1

    授予 gMSA 对会话录制存储文件夹的读取和写入权限 - 步骤 2

    启用继承

    注意:

    或者,您可以使用类似于以下内容的脚本,向 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-->
    
  4. 将 gMSA 添加到会话录制授权控制台。

    1. 查找 gMSA 的安全标识符 (SID)。

      查找 gMSA 的安全标识符

    2. Write the SID to the SessionRecordingAzManStore file under <Session Recording server installation path>\App_Data.

      将组托管服务帐户安全标识符写入文件

    3. 授予 gMSA 对 App-Data 文件夹的完全控制权限。

      授予 gMSA 对 App-Data 文件夹的完全控制权限(/zh-cn/session-recording/2509/media/grant-permission-on-the-app-data-folder-to-a-gmsa.png)

    4. 验证 gMSA 已成功添加到会话录制授权控制台。

      验证 gMSA 已成功添加到会话录制授权控制台(/zh-cn/session-recording/2509/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-->
    
配置会话录制对组托管服务帐户 (gMSA) 的支持