管理组托管服务帐户

本文介绍如何在 Windows Server 中启用和使用组托管服务帐户(gMSA)。

除非服务的所有实例都使用相同的主体,否则无法使用支持相互身份验证的身份验证协议,例如 Kerberos。 例如,当客户端计算机连接到使用负载均衡的服务或其他方法时,所有服务器对客户端来说都是相同的服务。 这意味着每种服务必须使用相同的密码或密钥以证明它们的身份。 组托管服务帐户是一种可以与多台服务器一起使用的帐户类型。 gMSA 是一个域帐户,可用于在多台服务器上运行服务,而无需管理密码。 gMSA 提供自动密码管理和简化的服务主体名称 (SPN) 管理,包括将管理委派给其他管理员。

注释

故障转移群集不支持 gMSA。 但是,如果这些服务是 Windows 服务、应用程序池、计划任务,或本身支持 gMSA 或 sMSA,则群集服务上运行的服务可以使用 gMSA 或 sMSA。

服务可以选择要使用的主体。 每种主体类型都支持不同的服务,并且有不同的限制。

主体 支持的服务 密码管理
Windows 系统的计算机帐户 限于一个加入域的服务器 计算机管理
没有 Windows 系统的计算机帐户 任何加入域的服务器 没有
虚拟帐户 限于一台服务器 计算机管理
Windows 独立托管服务帐户 限于一个加入域的服务器 计算机管理
用户帐户 任何加入域的服务器 没有
组托管服务帐户 任何加入 Windows Server 域的服务器 域控制器管理,以及主机检索

Windows 计算机帐户或 Windows 独立托管服务帐户 (sMSA) 或虚拟帐户无法在多个系统之间进行共享。 使用虚拟帐户时,该标识也是计算机的本地标识,域无法识别。 如果你为服务器场上的服务配置一个帐户以进行共享,则除了 Windows 系统以外,还必须选择一个用户帐户或计算机帐户。 无论哪种方式,这些帐户都不具有单个控制点密码管理功能。 如果没有密码管理,每个组织都需要更新 Active Directory(AD)中服务的密钥,并将这些密钥分发到这些服务的所有实例。

借助 Windows Server,使用 gMSA 时,服务和服务管理员不需要管理服务实例之间的密码同步。 在 AD 中创建 gMSA,然后配置支持托管服务帐户的服务。 gMSA 的使用范围限定为能够使用轻型目录访问协议(LDAP)检索 gMSA 凭据的任何计算机。 可以使用属于 AD 模块的命令行程序 New-ADServiceAccount 来创建 gMSA。 以下服务支持主机上的服务标识配置。

先决条件

若要管理 gMSA,设备必须满足以下要求:

小窍门

若要控制哪些主机或服务可以使用 gMSA,请将其计算机帐户添加到指定的安全组(新安全组或现有安全组),并为此组分配必要的权限。 同样,使用安全组来管理在 gMSA 下运行的服务的访问,确保该组具有服务作和资源访问所需的所有权限。

若要使 Kerberos 身份验证能与使用 gMSA 的服务配合工作,需要满足以下条件:

  • 确保使用 gMSA 为每个服务正确注册 SPN。 这使 Kerberos 能够识别和验证服务。

  • 确保正确设置 DNS 记录,以便进行名称解析,Kerberos 依赖于该记录来查找域服务。

  • 确保防火墙和网络策略允许 Kerberos 流量和必要的服务通信。

  • 对于 Kerberos 票证有效期设置,请根据安全性和操作要求配置票证过期和续订策略。

  • 身份验证过程中涉及的所有系统都必须具有同步的时钟。 Kerberos 对时间配置很敏感,并且差异可能会导致身份验证失败。

如果要从非域控制器的计算机管理 AD,请安装远程服务器管理工具(RSAT)以访问必要的管理功能。 RSAT 为 PowerShell 提供 AD 模块。 安装 RSAT 后,以管理员身份打开 PowerShell 并运行 Import-Module ActiveDirectory 以启用 AD 管理 cmdlet。 这样,管理员就可以远程安全地管理 AD,最大限度地减少域控制器上的负载。

创建 gMSA

若要使用 PowerShell 创建 gMSA,请在提升的 PowerShell 窗口中执行以下步骤:

重要

gMSA 帐户名必须在林级别中唯一,而不仅仅是在域中唯一。 尝试创建具有重复名称的 gMSA 帐户失败,即使在不同的域中也是如此。

  1. 按照 “创建密钥分发服务 KDS 根密钥”中的指南创建 KDS 根密钥(如果不存在)。 如果密钥已存在,请跳过此步骤。

  2. 若要创建 gMSA,请运行以下命令。 将 <gMSAName> 替换为你所需的 gMSA 名称,并将 <domain> 替换为你的域名。 将 <SecurityGroup> 替换为应有权检索 gMSA 密码的安全组或计算机帐户的名称。

    New-ADServiceAccount -Name <gMSAName> -DNSHostName <gMSAName>.<domain> -PrincipalsAllowedToRetrieveManagedPassword <SecurityGroup>
    

    若要仅为出站身份验证创建 gMSA,请运行以下命令。 用一个数值替换<Days>。 如果未提供值,则默认为 30 天。

    New-ADServiceAccount -Name <gMSAName> -DNSHostName <gMSAName>.<domain> -RestrictToOutboundAuthenticationOnly -ManagedPasswordIntervalInDays <Days> -PrincipalsAllowedToRetrieveManagedPassword <SecurityGroup>
    

    重要

    仅可以在创建过程中设置密码更改时间间隔。 如果需要更改时间间隔,你必须创建新的 gMSA 并在创建时对它进行设置。

  3. 运行以下命令,验证目标设备是否有权检索 gMSA 密码。

    Test-ADServiceAccount -Identity <gMSAName>
    

完成此过程需要相应安全组中的成员身份或具有创建 msDS-GroupManagedServiceAccount 对象所需的委派权限。 虽然 帐户作员 的成员可以管理 AD 中的某些用户和组对象,但它们没有创建 gMSA 的默认权限,除非这些权限委托给他们。 有关使用适当帐户和组成员身份的详细信息,请参阅 Active Directory 安全组

还可以使用 Set-ADServiceAccount cmdlet 更新 gMSA 属性。 例如,若要更新计算机显示名称,请运行以下命令,并将<gMSAName><NewDisplayName>值替换为你的值:

Set-ADServiceAccount -Identity "<gMSAName>" -DisplayName "<NewDisplayName>"

有关如何设置 gMSA 的其他属性的详细信息,请参阅 Set-ADServiceAccount

验证对 gMSA 的更改

对 gMSA 进行更改后,可以验证 gMSA 是否已正确更新。 这些更改包括添加、删除和卸载 gMSA。 还可以在对 gMSA 属性进行更新时随时执行此步骤。

运行以下命令,并将 <gMSAName> 替换为您创建的 gMSA 的名称:

Get-ADServiceAccount -Identity "<gMSAName>" | Select-Object *

将成员主机添加到安全组

注释

  • 以组为中心的管理Add-ADGroupMember / Remove-ADGroupMember):如果要管理特定组的成员身份,请使用这些 cmdlet。 它们最适合在单个组中高效添加或删除多个用户、计算机或其他对象。

  • 以主体为中心的管理Add-ADPrincipalGroupMembership / Remove-ADPrincipalGroupMembership):当你的目标是跨多个组管理特定用户或计算机的成员身份时,请选择这些 cmdlet。 它们允许您通过单次操作在多个组中添加或移除主体,从而更轻松地更新单个帐户的组隶属关系。

如果使用安全组管理成员主机,请将新成员主机的计算机帐户添加到包含 gMSA 成员主机的安全组。 可使用以下方法之一来执行此操作:

要使用 Active Directory 用户和计算机 (ADUC) 管理单元,请参阅将计算机帐户添加到组在 Active Directory 用户和计算机中管理用户帐户

如果使用计算机帐户,请查找现有帐户,然后再添加新的计算机帐户。

从安全组中删除成员主机

若要使用 ADUC 管理单元,请参阅 “删除计算机帐户”“移除用户帐户”

从系统卸载 gMSA

虽然无法在 ADUC 中卸载 gMSA,但可以通过在 托管服务帐户 容器中找到 gMSA 并像删除任何其他 AD 对象一样手动删除 gMSA。 不过需要注意的是,它无法执行 Uninstall-ADServiceAccount 在 PowerShell 中所能完成的相同清理操作。

若要卸载 gMSA,请打开以管理员身份运行的 PowerShell 窗口,然后按照以下步骤进行操作。

  1. 若要从环境中删除单个 gMSA,请运行以下命令,将其 <gMSAName> 替换为值:

    Uninstall-ADServiceAccount -Identity <gMSAName>
    
  2. 若要从环境中删除多个 gMSA,请运行以下命令,将 <gMSA#$> 替换为您的值:

    $gMSANames = @("gMSA1$", "gMSA2$", "gMSA3$")
    
    foreach ($gMSAs in $gMSANames) {
      Uninstall-ADServiceAccount -Identity $gMSAs
    }
    

有关该 cmdlet 的更多信息,请参阅 Uninstall-ADServiceAccountUninstall-ADServiceAccount

另请参阅