保护 Active Directory 中的托管服务帐户 (gMSA)

保护 Active Directory 中的托管服务帐户 (gMSA)

2025年4月8日

本文旨在指导安全分析师、IT 管理员和系统工程师在 Active Directory 中实施和保护组托管服务帐户 (gMSA)。 gMSA 通过自动化密码管理和简化管理,为服务帐户安全挑战提供了强大的解决方案 [1]。

简介

具有静态密码的传统服务帐户会带来重大风险。 gMSA(组托管服务帐户)扩展了 MSA(托管服务帐户)的功能,允许多个服务器使用单个服务帐户,并且 Active Directory 自动管理密码轮换和密钥分配,无需手动干预 [2]。

本实用指南将涵盖先决条件、创建和配置 gMSA、如何将它们与服务和计划任务关联,以及确保有效保护和管理服务帐户的最佳实践。

为什么 gMSA 至关重要?

  • 自动密码管理:Active Directory 每 30 天自动生成和轮换一次复杂且长的密码。
  • 在多个服务器上部署:单个 gMSA 可由多个服务器使用,从而简化了分布式环境中的管理。
  • 最小权限原则:有利于授予最低限度的必要权限。
  • 改进审核:由于服务身份明确定义且可追踪,因此简化了审核。

先决条件

  1. 使用 Windows Server 2012 或更高版本的域控制器 (DC)
  2. Windows Server 2012 或更高版本的域功能级别 (DFL)
  3. Windows PowerShell 的 Active Directory 模块
  4. 将使用 gMSA 的 域成员服务器
  5. 主机安全组:Active Directory 中的安全组将包含将使用 gMSA 的服务器。

分步:实施和保护 gMSA

1.配置KDS根密钥服务

需要 KDS 根密钥服务,Active Directory 才能为 gMSA 生成密码。每个林需要配置一次[3]。

  1. 在域控制器上以管理员身份打开 Windows PowerShell
  2. 检查KDS根密钥服务是否已配置: powershell 获取 KdsRootKey
  3. 如果没有返回密钥,请创建新的 KDS 根密钥。对于生产,请使用“Add-KdsRootKey -EffectiveTime (Get-Date).AddHours(-10)”来启用复制。要立即测试,请使用: powershell 添加-KdsRootKey -立即生效

2. 为主机创建安全组

该组将包含允许恢复 gMSA 密码的服务器。

  1. 打开 Active Directory 用户和计算机 (dsa.msc)。
  2. 创建一个范围为“Global”的新安全组(例如“gMSA_Hosts_ServicoX”)并输入“Security”。
  3. 将将使用 gMSA 的计算机(服务器)添加到此组(例如:“ServidorApp01$”、“ServidorApp02$”)。

3. 创建 gMSA

现在让我们使用 PowerShell 创建 gMSA。

  1. 在域控制器上以管理员身份打开 Windows PowerShell
  2. 使用“New-ADServiceAccount”cmdlet: powershell 新 ADServiceAccount -名称 gMSA_ServicoX -DNSHostName gMSA_ServicoX.contoso.com -PrincipalsAllowedToRetrieveManagedPassword“gMSA_Hosts_ServicoX”
    • 说明PrincipalsAllowedToRetrieveManagedPassword 参数指定可以检索 gMSA 密码的安全组。该组必须包含将运行该服务的服务器。

4. 在主机服务器上安装和测试 gMSA

在将使用 gMSA 的服务器上,您需要安装它并测试其功能。

  1. 在“gMSA_Hosts_ServicoX”组的每个服务器成员上,以管理员身份打开 Windows PowerShell。 2.安装gMSA: powershell 安装-ADServiceAccount -Identity gMSA_ServicoX
  2. 测试 gMSA 是否已安装并正常运行: powershell 测试 ADServiceAccount -Identity gMSA_ServicoX
    • 预期结果:输出应为“True”,表明 gMSA 已准备好在服务器上使用。

5. 将 gMSA 与服务关联

  1. 在提供服务的服务器上执行后,打开服务控制台(services.msc)。
  2. 找到您要配置的服务。
  3. 右键单击​​该服务,选择“属性”。
  4. 登录 选项卡中,选择 此帐户
  5. 此帐户 字段中,键入 gMSA 的名称,后跟“$”,例如:“gMSA_ServicoX$”。
  6. 将密码字段留空。 Active Directory 将自动管理密码。
  7. 单击“应用”和“确定”。
  8. 重新启动服务以使更改生效。

6. 将 gMSA 与计划任务结合使用

  1. 在服务器上,打开 任务计划程序 (taskschd.msc)。
  2. 创建一项新任务或编辑现有任务。
  3. 常规 选项卡上,单击 更改用户或组...
  4. 在“输入要选择的对象的名称”字段中,输入 gMSA 的名称,后跟“$”,例如:“gMSA_ServicoX$”。
  5. 单击“检查名称”,然后单击“确定”。
  6. 将密码字段留空。
  7. 配置其他计划任务选项,然后单击“确定”。

最佳实践和安全提示

  • 最小权限原则:仅授予 gMSA 执行其功能所需的权限。请勿使用具有域管理员权限的 gMSA。
  • 专用安全组:使用“PrincipalsAllowedToRetrieveManagedPassword”的特定安全组来控制哪些服务器可以使用 gMSA。
  • 审核:通过 Active Directory 安全日志监控 gMSA 的使用情况,以检测任何异常活动。
  • KDS 根密钥保护:确保域控制器安全,因为 KDS 根密钥对于 gMSA 的安全至关重要。
  • 删除旧服务帐户:将服务迁移到 gMSA 并禁用或删除使用静态密码的旧服务帐户。
  • 文档:记录正在使用的 gMSA、它们运行的​​服务以及在哪些服务器上。

结论

组托管服务帐户 (gMSA) 是改善 Active Directory 安全状况的重要组件,尤其是在管理服务身份方面。通过自动执行密码轮换、简化分布式环境中的部署以及促进最小特权原则的应用,gMSA 显着减少了攻击面和管理复杂性。正确实施和管理 gMSA 是保护您的服务和应用程序免受网络威胁的关键步骤。

参考文献

[1] 微软。 (2023)。 Active Directory 中的组托管服务帐户 (gMSA)。 [2] 微软。 (2023)。 托管服务帐户概述。 [3] 微软。 (2023)。 Active Directory 密钥分发服务 (KDS)