保护 Active Directory 中的托管服务帐户 (gMSA)
2025年4月8日
本文旨在指导安全分析师、IT 管理员和系统工程师在 Active Directory 中实施和保护组托管服务帐户 (gMSA)。 gMSA 通过自动化密码管理和简化管理,为服务帐户安全挑战提供了强大的解决方案 [1]。
简介
具有静态密码的传统服务帐户会带来重大风险。 gMSA(组托管服务帐户)扩展了 MSA(托管服务帐户)的功能,允许多个服务器使用单个服务帐户,并且 Active Directory 自动管理密码轮换和密钥分配,无需手动干预 [2]。
本实用指南将涵盖先决条件、创建和配置 gMSA、如何将它们与服务和计划任务关联,以及确保有效保护和管理服务帐户的最佳实践。
为什么 gMSA 至关重要?
- 自动密码管理:Active Directory 每 30 天自动生成和轮换一次复杂且长的密码。
- 在多个服务器上部署:单个 gMSA 可由多个服务器使用,从而简化了分布式环境中的管理。
- 最小权限原则:有利于授予最低限度的必要权限。
- 改进审核:由于服务身份明确定义且可追踪,因此简化了审核。
先决条件
- 使用 Windows Server 2012 或更高版本的域控制器 (DC)。
- Windows Server 2012 或更高版本的域功能级别 (DFL)。
- Windows PowerShell 的 Active Directory 模块。
- 将使用 gMSA 的 域成员服务器。
- 主机安全组:Active Directory 中的安全组将包含将使用 gMSA 的服务器。
分步:实施和保护 gMSA
1.配置KDS根密钥服务
需要 KDS 根密钥服务,Active Directory 才能为 gMSA 生成密码。每个林需要配置一次[3]。
- 在域控制器上以管理员身份打开 Windows PowerShell。
- 检查KDS根密钥服务是否已配置:
powershell 获取 KdsRootKey - 如果没有返回密钥,请创建新的 KDS 根密钥。对于生产,请使用“Add-KdsRootKey -EffectiveTime (Get-Date).AddHours(-10)”来启用复制。要立即测试,请使用:
powershell 添加-KdsRootKey -立即生效
2. 为主机创建安全组
该组将包含允许恢复 gMSA 密码的服务器。
- 打开 Active Directory 用户和计算机 (dsa.msc)。
- 创建一个范围为“Global”的新安全组(例如“gMSA_Hosts_ServicoX”)并输入“Security”。
- 将将使用 gMSA 的计算机(服务器)添加到此组(例如:“ServidorApp01$”、“ServidorApp02$”)。
3. 创建 gMSA
现在让我们使用 PowerShell 创建 gMSA。
- 在域控制器上以管理员身份打开 Windows PowerShell。
- 使用“New-ADServiceAccount”cmdlet:
powershell 新 ADServiceAccount -名称 gMSA_ServicoX -DNSHostName gMSA_ServicoX.contoso.com -PrincipalsAllowedToRetrieveManagedPassword“gMSA_Hosts_ServicoX”- 说明:
PrincipalsAllowedToRetrieveManagedPassword参数指定可以检索 gMSA 密码的安全组。该组必须包含将运行该服务的服务器。
- 说明:
4. 在主机服务器上安装和测试 gMSA
在将使用 gMSA 的服务器上,您需要安装它并测试其功能。
- 在“gMSA_Hosts_ServicoX”组的每个服务器成员上,以管理员身份打开 Windows PowerShell。
2.安装gMSA:
powershell 安装-ADServiceAccount -Identity gMSA_ServicoX - 测试 gMSA 是否已安装并正常运行:
powershell 测试 ADServiceAccount -Identity gMSA_ServicoX- 预期结果:输出应为“True”,表明 gMSA 已准备好在服务器上使用。
5. 将 gMSA 与服务关联
- 在提供服务的服务器上执行后,打开服务控制台(
services.msc)。 - 找到您要配置的服务。
- 右键单击该服务,选择“属性”。
- 在 登录 选项卡中,选择 此帐户。
- 在 此帐户 字段中,键入 gMSA 的名称,后跟“$”,例如:“gMSA_ServicoX$”。
- 将密码字段留空。 Active Directory 将自动管理密码。
- 单击“应用”和“确定”。
- 重新启动服务以使更改生效。
6. 将 gMSA 与计划任务结合使用
- 在服务器上,打开 任务计划程序 (
taskschd.msc)。 - 创建一项新任务或编辑现有任务。
- 在 常规 选项卡上,单击 更改用户或组...。
- 在“输入要选择的对象的名称”字段中,输入 gMSA 的名称,后跟“$”,例如:“gMSA_ServicoX$”。
- 单击“检查名称”,然后单击“确定”。
- 将密码字段留空。
- 配置其他计划任务选项,然后单击“确定”。
最佳实践和安全提示
- 最小权限原则:仅授予 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)。