设置委托托管服务帐户

委托托管服务帐户 (dMSA) 属于 Active Directory (AD) 帐户,可提供安全有效的凭据管理。 与传统服务帐户不同,dMSA 不需要手动密码管理,因为 AD 会自动处理它。 使用 dMSA,可以委托特定权限来访问域中的资源,从而降低安全风险,并提供了更好的可见性和服务帐户活动日志。

设置 dMSA 目前仅适用于运行 Windows Server 2025 的设备。 与传统服务帐户相比,DMSA 是一种更安全、更易于管理的服务帐户管理方法。 通过将关键服务迁移到 dMSA,组织可以确保以安全合规的方式管理这些服务。 DMSA 通过提供唯一且频繁轮换的密码来提供更高级别的安全性,从而降低了未经授权访问的可能性,并提高了整体安全性。

先决条件

  • 如果使用的是远程管理工具,则须在设备上或所有设备上安装 Active Directory 域服务角色。 有关详细信息,请参阅安装或卸载角色、角色服务或功能
  • 安装此角色后,必须将设备提升为域控制器 (DC)。 在服务器管理器中,标志图标会显示新通知,选择将此服务器提升为域控制器,然后完成必要步骤。
  • 在创建或迁移 dMSA 之前,必须在 DC 上生成 KDS 根密钥。 在 PowerShell 中运行 Get-KdsRootKey,验证密钥是否可用。 如果密钥不可用,可以通过运行 Add-KdsRootKey –EffectiveTime ((get-date).addhours(-10)) 来添加。

注意

若要将 dMSA 用作独立托管服务帐户 (MSA) 或取代旧服务帐户,需要在客户端设备上运行以下命令:

$params = @{
 Path = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\Kerberos\Parameters"
 Name = "DelegatedMSAEnabled"
 Value = 1
 Type = "DWORD"
}
Set-ItemProperty @params

创建独立的 dMSA

以下说明允许用户在不从传统服务帐户迁移的情况下创建新的 dMSA。

  1. 使用管理员权限打开 PowerShell 会话并运行:

    $params = @{
     Name = "ServiceAccountName"
     DNSHostName = "DNSHostName"
     CreateDelegatedServiceAccount = $true
     KerberosEncryptionType = "AES256"
    }
    New-ADServiceAccount @params
    
  2. 授予特定设备在 AD 中检索服务帐户密码的权限:

    $params = @{
     Identity = "DMSA Name"
     PrincipalsAllowedToRetrieveManagedPassword = "Machine$"
    }
    Set-ADServiceAccount @params
    
  3. dMSA 的 msDS-DelegatedMSAState 属性值必须设置为 3。 若要查看当前属性值,请运行:

    $params = @{
     Identity = "dMSAsnmp"
     Properties = "msDS-DelegatedMSAState"
    }
    Get-ADServiceAccount @params
    

    若要将此值设置为 3,请运行:

    $params = @{
     Identity = "dMSAsnmp"
     Properties = @{
      "msDS-DelegatedMSAState" = 3
     }
    }
    Set-ADServiceAccount @params
    

迁移到 dMSA

若要将服务帐户迁移到 dMSA,请执行以下步骤:

  1. 创建 dMSA,如创建独立的 dMSA 中所述。

  2. 启动帐户迁移到 dMSA:

    $params = @{
     Identity = "<DMSAName>"
     SupersededAccount = "<DN of service account>"
    }
    Start-ADServiceAccountMigration @params
    
  3. 如果要迁移到 dMSA 的服务帐户有权访问多个服务器,则须先应用注册表策略以确保其默认为 DC。 使用 dMSA 登录后,运行:

    $params = @{
     Path = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\Kerberos\Parameters"
     Name = "DelegatedMSAEnabled"
     Value = "1"
     PropertyType = "DWORD"
     Force = $true
    }
    New-ItemProperty @params
    
  4. 应用对注册表的更改并链接帐户后,通过运行以下命令重新启动帐户的正在运行的服务:

    Get-Service | Where-Object {$_.Status -eq "Running"} | Restart-Service
    

注意

如果服务帐户连接到多个设备且迁移已结束,则需手动更新 PrincipalsAllowedToRetrieveManagedPassword

完成帐户迁移

警告

完成迁移时,切勿删除原始服务帐户,以免需在迁移后恢复为此帐户,因为此操作会导致多个问题。

若要完成帐户迁移,必须通过运行以下命令来禁用传统服务帐户,从而确保所有服务均使用 dMSA。

若要禁用传统服务帐户,请运行以下命令:

$params = @{
 Identity = "<DMSAName>"
 SupersededAccount = "<DN of service account>"
}
Complete-ADServiceAccountMigration @params

如果迁移了错误的帐户,则请运行以下命令来撤消迁移期间执行的所有步骤:

$params = @{
 Identity = "<DMSAName>"
 SupersededAccount = "<DN of service account>"
}
Undo-ADServiceAccountMigration @params

若要将服务帐户恢复为非活动状态或未链接状态,则请运行:

$params = @{
 Identity = "<DMSAName>"
 SupersededAccount = "<DN of service account>"
}
Reset-ADServiceAccountMigration @params

查看 dMSA 事件日志

通过执行以下操作,可使用事件查看器 (eventvwr.exe) 来查看事件:

  1. 右键单击开始,然后选择事件查看器
  2. 在左窗格中,展开应用程序和服务,然后导航到 Microsoft\Windows\Security-Kerberos\Operational
  3. 默认情况下会禁用针对此提供程序的日志记录;若要启用日志记录,请右键单击操作并选择启用日志

下表描述了捕获的这些事件。

事件 ID 说明
307 dMSA 迁移 - 此事件是为正在迁移的 dMSA 和已迁移的 dMSA 而写入。 其中包含有关旧服务帐户和新 dMSA 的信息。
308 dMSA 权限添加 - 当计算机尝试将自身添加到允许在迁移期间检索 dMSA 的托管密码字段的主体时,便会记录此事件。
309 dMSA 密钥提取 - 当 Kerberos 客户端尝试从域控制器提取 dMSA 的密钥时,便会记录此事件。

另请参阅