本文面向 IT 专业人员介绍如何使用 Windows PowerShell 在域控制器上创建密钥分发服务(kdssvc.dll)根密钥,以在 Windows Server 2012 或更高版本中生成组托管服务帐户密码。
域控制器(DC)要求根密钥开始生成 gMSA 密码。 域控制器在创建后最多等待 10 小时,以允许所有域控制器在允许创建 gMSA 之前聚合其 Active Directory 复制。 等待长达 10 小时是一项安全措施,可防止在环境中的所有 DC 都能应答 gMSA 请求之前生成密码。 如果 gMSA 主机尝试检索密码,尝试使用 gMSA 太快可能会失败,因为密钥可能尚未复制到所有域控制器。 如果使用具有有限复制计划的 DC,或者存在复制问题,则也会发生 gMSA 密码检索失败。
注意
删除并重新创建根密钥可能会导致由于密钥缓存而删除旧密钥后继续使用的问题。 如果重新创建根密钥,则应在所有域控制器上重启 KDC。
域管理员或企业管理员组中的成员身份或等效成员身份是完成此过程的最低要求。 有关使用相应帐户和组成员身份的详细信息,请参阅 “本地组”和“域默认组”。
注意
运行用于管理组托管服务帐户的 Windows PowerShell 命令需要 64 位体系结构。
使用 Add-KdsRootKey cmdlet 创建 KDS 根密钥
在 Windows Server 2012 或更高版本的域控制器上,从任务栏运行 Windows PowerShell。
在 Windows PowerShell Active Directory 模块的命令提示符下,键入以下命令,然后选择 Enter:
Add-KdsRootKey -EffectiveImmediately
提示
可以使用有效时间参数提供在使用前传播到所有 DC 的键的时间。 使用 Add-KdsRootKey -EffectiveImmediately 会将根密钥添加到 KDS 服务将立即使用的目标 DC。 但是,在复制成功之前,其他域控制器将无法使用根密钥。
KDS 根密钥存储在容器 CN=Master Root Keys,CN=Group Key Distribution Service,CN=Services,CN=Configuration,DC=<forest name>; 中的 Active Directory 中。 它们具有一个属性 msKds-DomainID,该属性链接到创建对象的域控制器的计算机帐户。 当此域控制器降级并从域中删除时,该值将引用计算机帐户的逻辑删除。 可以忽略损坏的值,因为它仅用于帮助管理员在刚创建对象时跟踪对象。 还可以更改属性值以将其指向林中另一个域控制器的计算机对象。
对于只有一个 DC 的测试环境,可以创建 KDS 根密钥,并设置过去开始时间,以避免使用以下过程等待密钥生成间隔。 验证 KDS 事件日志中是否已记录了 4004 事件。
在测试环境中创建即时生效的 KDS 根密钥
在 Windows Server 2012 或更高版本的域控制器上,从任务栏中运行 Windows PowerShell。
在 Windows PowerShell Active Directory 模块的命令提示符下,键入以下命令,然后选择 Enter:
$a=Get-Date
$b=$a.AddHours(-10)
Add-KdsRootKey -EffectiveTime $b
或使用单个命令:
Add-KdsRootKey -EffectiveTime(get-date)。addhours(-10))