Active Directory 联合身份验证服务快速还原工具

Active Directory 联合身份验证服务 (AD FS) 通过设置 AD FS 场实现高可用性。 有些组织倾向于使用单服务器 AD FS 部署来消除对多个 AD FS 服务器和网络负载均衡基础结构的需要。 此方法有助于确保在解决潜在问题后快速还原服务。

AD FS 快速还原工具提供了无需完整备份和还原操作系统或系统状态,即可还原 AD FS 数据的方法。 使用该工具可将 AD FS 配置导出到 Azure 或本地位置。 可以将导出的数据应用于全新的 AD FS 安装并重新创建或复制 AD FS 环境。

用例场景

可以在各种情况下使用 AD FS 快速还原工具:

  • 出现问题后快速还原 AD FS 功能。 使用快速还原工具创建 AD FS 的可快速部署的冷备用安装来代替联机 AD FS 服务器。

  • 部署相同的测试和生产环境。 在测试环境中快速创建生产 AD FS 的精确副本。 还可以使用快速还原工具将已验证的测试配置快速部署到生产环境。

  • 迁移 SQL 和 Windows 集成数据库 (WID) 配置。 使用快速还原工具迁移数据,并从基于 SQL 的场配置移动到 WID,反之亦然。

注意

如果使用 SQL 合并复制或 Always on 可用性组,则不支持快速还原工具。 建议使用基于 SQL 的备份和 SSL 证书备份。

备份内容

快速还原工具备份以下 AD FS 配置:

  • AD FS 配置数据库(SQL 或 WID)
  • 配置文件(位于 AD FS 文件夹中)
  • 已安装的自定义身份验证提供程序、属性存储和本地声明提供程序信任的列表
  • Active Directory 分布式密钥管理器 (DKM) 容器中自动生成的令牌签名和解密证书与私钥
  • SSL 证书和任何外部注册的证书(令牌签名、令牌解密和服务通信)及相应的私钥

注意

私钥必须可导出。 运行脚本的用户必须有权访问密钥。

备份加密

所有备份数据在推送到云或存储在文件系统中之前经过加密。

在备份过程中创建的每个文档将使用 AES-256 进行加密。 提供给快速还原工具的密码用作通行短语,以通过 Rfc2898DeriveBytes 类生成新密码。

RngCryptoServiceProvider 类生成由 AES 和 Rfc2898DeriveBytes 类使用的 salt(二进制 Blob)。

入门

若要开始使用 AD FS 快速还原工具,请先查看以下系统和工具要求。

  • 该工具适用于 Windows Server 2016 和更高版本中的 AD FS。
  • 该工具需要 .NET Framework 4.0 或更高版本。
  • 如果你使用 WID,则必须在主 AD FS 服务器上运行该工具。 使用 Get-AdfsSyncProperties cmdlet 检查你的服务器是否为主服务器。
  • 必须在与备份服务器相同的 AD FS 服务器版本上运行还原,并使用与 AD FS 服务帐户相同的 Active Directory 帐户。

按照以下步骤设置该工具:

  1. 下载 MSI 并将其安装到 AD FS 服务器。

  2. 安装该工具后,从 PowerShell 提示符运行以下命令:

    Import-Module 'C:\Program Files (x86)\ADFS Rapid Recreation Tool\ADFSRapidRecreationTool.dll'
    

创建备份:Backup-ADFS

若要创建备份,请使用 Backup-ADFS PowerShell cmdlet。 backup cmdlet 将备份 AD FS 配置、数据库、SSL 证书等。

在使用 backup cmdlet 之前,请查看以下访问权限和操作权限要求。

  • 本地管理员身份运行。若要运行 backup cmdlet,用户必须至少是本地管理员。

  • 域管理员身份备份。若要备份 Active Directory DKM 容器(在默认 AD FS 配置中需要),用户特权必须满足以下一个或多个条件:

    • 用户必须是域管理员。
    • 用户必须传入 AD FS 服务帐户凭据。
    • 用户必须有权访问 DKM 容器。
  • 域管理员身份使用 gMSA 帐户。对于组托管服务帐户 (gMSA),用户必须是域管理员或者对容器拥有权限。 用户不能提供 gMSA 凭据。

Backup-ADFS cmdlet 参数

每个备份根据 adfsBackup_ID_Date-Time 模式命名。 该名称包含备份的版本号、日期和时间。

下面是 Backup-ADFS cmdlet 的参数:

Backup-ADFS 
  -StorageType {FileSystem | Azure} 
  -EncryptionPassword <string> 
  -AzureConnectionCredentials <pscredential> 
  -AzureStorageContainer <string> 
  [-BackupComment <string>] 
  [-ServiceAccountCredential <pscredential>]
  [-BackupDKM]
  [<CommonParameters>]
    
Backup-ADFS -StorageType {FileSystem | Azure} 
  -EncryptionPassword <string>
  -StoragePath <string> 
  [-BackupComment <string>]
  [-ServiceAccountCredential <pscredential>]
  [-BackupDKM]
  [<CommonParameters>]

以下列表描述了 Backup-ADFS cmdlet 的参数详细信息。

  • BackupDKM:备份包含默认配置中的 AD FS 密钥(自动生成的令牌签名和解密证书)的 Active Directory DKM 容器。 此方法使用 Microsoft Entra ldifde 工具导出 Microsoft Entra 容器及其所有子树。

  • StorageType <string>:当用户执行备份时,他们需要选择备份位置:

    • FileSystem 表示用户希望将备份存储在本地文件夹或网络中。 若要将备份存储在文件系统中,用户必须满足以下要求:

      • 必须指定存储路径。

      在路径目录中,将为每个备份创建新目录。 创建的每个目录包含备份的文件。

    • Azure 表示用户希望将备份存储在 Azure 存储容器中。 若要将备份存储在云中,用户必须满足以下要求:

      • 应将 Azure 存储凭据传递给该 cmdlet。 存储凭据包含帐户名称和密钥。
      • 此外,必须传入容器名称。 如果该容器不存在,在备份期间会创建它。
  • EncryptionPassword <string>:用于在存储所有备份文件之前对其进行加密的密码。

  • AzureConnectionCredentials <pscredential>:Azure 存储帐户的帐户名称和密钥。

  • AzureStorageContainer <string>:Azure 中的备份存储容器。

  • StoragePath <string>:备份的存储位置。

  • ServiceAccountCredential <pscredential>:当前正在运行的 AD FS 服务使用的服务帐户。 仅当用户想要备份 DKM 并且他们不是域管理员或无法访问容器内容时,才需要此参数。

  • BackupComment <string[]>:在还原期间显示的有关备份的信息字符串。 此字符串类似于 Hyper-V 检查点命名的概念。 默认值为空字符串。

备份示例

以下 PowerShell 示例演示了使用 AD FS 快速还原工具和 Backup-ADFS cmdlet 进行 AD FS 配置的备份选项。

以域管理员身份使用 DKM 备份到文件系统

以下 cmdlet 使用 -BackupDKM 参数通过 DKM 将 AD FS 配置备份到文件系统。 使用此方法能够以域管理员身份或拥有委托权限的用户身份访问 DKM 容器内容。

Backup-ADFS -StorageType "FileSystem" -StoragePath "C:\Users\administrator\testExport\" -EncryptionPassword "password" -BackupComment "Clean Install of AD FS (FS)" -BackupDKM

以本地管理员身份使用 DKM 备份到文件系统

以下 cmdlet 也通过 DKM 将 AD FS 配置备份到文件系统,但使用的方法略有不同。 采取这种方法时,需要使用 -ServiceAccountCredential $cred 参数指定服务帐户凭据,并便以本地管理员身份运行操作。

Backup-ADFS -StorageType "FileSystem" -StoragePath "C:\Users\administrator\testExport\" -EncryptionPassword "password" -BackupComment "Clean Install of AD FS (FS)" -BackupDKM -ServiceAccountCredential $cred

在不使用 DKM 的情况下备份到 Azure 存储容器

以下 cmdlet 在不使用 DKM 的情况下将 AD FS 配置备份到 Azure 存储容器。 使用 -AzureStorageContainer "adfsbackups" 参数指定容器。

Backup-ADFS -StorageType "Azure" -AzureConnectionCredentials $cred -AzureStorageContainer "adfsbackups"  -EncryptionPassword "password" -BackupComment "Clean Install of AD FS"

在不使用 DKM 的情况下备份到文件系统

以下 cmdlet 在不使用 DKM 的情况下将 AD FS 配置备份到文件系统。 请注意未指定 -BackupDKM 参数。

Backup-ADFS -StorageType "FileSystem" -StoragePath "C:\Users\administrator\testExport\" -EncryptionPassword "password" -BackupComment "Clean Install of AD FS (FS)"

还原备份:Restore-ADFS

要将使用 Backup-ADFS cmdlet 创建的配置应用于新的 AD FS 安装,请使用 Restore-ADFS cmdlet。 restore cmdlet 使用 Install-AdfsFarm cmdlet 创建新的 AD FS 场,并还原 AD FS 配置、数据库、证书等内容。

restore cmdlet 将检查现有备份的还原位置。 该 cmdlet 会提示用户根据备份日期和时间以及可能由用户附加到备份的任何备份注释来选择适当的备份。 如果有多个 AD FS 配置具有不同的联合身份验证服务名称,则系统首先会提示用户选择适当的 AD FS 配置。

在使用 restore cmdlet 之前,请查看以下要求。

  • 如果服务器上未安装 AD FS 角色,该 cmdlet 会安装该角色。
  • 用户必须是本地管理员和域管理员才能运行此 cmdlet。

重要

在使用 AD FS 快速还原工具还原备份之前,请确保服务器已加入域。

Restore-ADFS cmdlet 参数

下面是 Restore-ADFS cmdlet 的参数:

Restore-ADFS 
  -StorageType {FileSystem | Azure} 
  -DecryptionPassword <string> 
  -AzureConnectionCredentials <pscredential>
  -AzureStorageContainer <string>
  [-ADFSName <string>]
  [-ServiceAccountCredential <pscredential>]
  [-GroupServiceAccountIdentifier <string>]
  [-DBConnectionString <string>]
  [-Force]
  [-RestoreDKM]  
  [<CommonParameters>]
    
Restore-ADFS 
  -StorageType {FileSystem | Azure} 
  -DecryptionPassword <string>
  -StoragePath <string>
  [-ADFSName <string>]
  [-ServiceAccountCredential <pscredential>]
  [-GroupServiceAccountIdentifier <string>]
  [-DBConnectionString <string>]
  [-Force]
  [-RestoreDKM]
  [<CommonParameters>]

以下列表描述了 Restore-ADFS cmdlet 的参数详细信息。

  • StorageType <string>:要使用的存储类型:

    • 使用“FileSystem”会将备份存储在本地文件夹或网络中。
    • 使用“Azure”会将备份存储在 Azure 存储容器中。
  • DecryptionPassword <string>:用于加密所有备份文件的密码。

  • AzureConnectionCredentials <pscredential>:Azure 存储帐户的帐户名称和密钥。

  • AzureStorageContainer <string>:Azure 中用于存储备份的存储容器。

  • StoragePath <string>:备份的存储位置。

  • ADFSName <string>:已备份且现在要还原的联合身份验证服务名称。

    • 如果未指定名称且仅存在一个联合身份验证服务名称,则会使用该联合身份验证服务名称。
    • 如果已将多个联合身份验证服务备份到该位置,则系统会提示用户选择一个已备份的联合身份验证服务。
  • ServiceAccountCredential <pscredential>:指定用于正在还原的新 AD FS 服务的服务帐户。

  • GroupServiceAccountIdentifier <string>:用户想要用于正在还原的新 AD FS 服务的 gMSA。

    • 默认情况下,如果未提供值,并且帐户是 gMSA,则会使用已备份帐户名称。
    • 如果未提供值,并且帐户不是 gMSA,则系统会提示用户指定服务帐户。
  • DBConnectionString <string>:若要使用不同的数据库进行还原,请指定 SQL 连接字符串或输入“WID”。

  • Force <bool>:选择备份过程后,跳过工具中的任何提示。

  • RestoreDKM <bool>:将 DKM 容器还原到 Active Directory。 要还原到新的 Active Directory 并且最初已备份 DKM 时请设置此选项。

还原示例

以下 PowerShell 示例演示了使用 AD FS 快速还原工具和 Restore-ADFS cmdlet 进行 AD FS 配置的还原选项。

以域管理员身份使用 DKM 还原到文件系统

以下 cmdlet 使用 -RestoreDKM 参数通过 DKM 将 AD FS 配置还原到文件系统。

Restore-ADFS -StorageType "FileSystem" -StoragePath "C:\Users\administrator\testExport\" -DecryptionPassword "password" -RestoreDKM

在不使用 DKM 的情况下还原到文件系统

以下 cmdlet 在不使用 DKM 的情况下将 AD FS 配置还原到文件系统。 请注意未指定 -RestoreDKM 参数。

Restore-ADFS -StorageType "FileSystem" -StoragePath "C:\Users\administrator\testExport\" -DecryptionPassword "password"

在不使用 DKM 的情况下还原到 Azure 存储容器

以下 cmdlet 在不使用 DKM 的情况下将 AD FS 配置还原到 Azure 存储容器。 使用 -AzureStorageContainer "adfsbackups" 参数指定容器。

Restore-ADFS -StorageType "Azure" -AzureConnectionCredential $cred -DecryptionPassword "password" -AzureStorageContainer "adfsbackups"

还原到 WID

以下 cmdlet 将 AD FS 配置还原到 WID。 请注意传递给 -DBConnectionString 参数的 WID 值。

Restore-ADFS -StorageType "FileSystem" -StoragePath "C:\Users\administrator\testExport\" -DecryptionPassword "password" -DBConnectionString "WID"

还原到 SQL

以下 cmdlet 将 AD FS 配置还原到 SQL。 请注意传递给 -DBConnectionString 参数的 Data SourceIntegrated Security 值。

Restore-ADFS -StorageType "FileSystem" -StoragePath "C:\Users\administrator\testExport\" -DecryptionPassword "password" -DBConnectionString "Data Source=TESTMACHINE\SQLEXPRESS; Integrated Security=True"

使用指定的 gMSA 帐户进行还原

以下 cmdlet 还原 AD FS 配置并使用指定的 gMSA 帐户。 请注意使用了 -GroupServiceAccountIdentifier 参数。

Restore-ADFS -StorageType "FileSystem" -StoragePath "C:\Users\administrator\testExport\" -DecryptionPassword "password" -GroupServiceAccountIdentifier "mangupd1\adfsgmsa$"

使用指定的服务帐户凭据进行还原

以下 cmdlet 还原 AD FS 配置并使用指定的服务帐户凭据。 请注意使用了 -ServiceAccountCredential 参数。

Restore-ADFS -StorageType "FileSystem" -StoragePath "C:\Users\administrator\testExport\" -DecryptionPassword "password" -ServiceAccountCredential $cred

日志文件

将为每个备份和还原操作创建一个日志文件。 可以在 %LOCALAPPDATA%\ADFSRapidRecreationTool 中找到该日志文件。

注意

执行还原时,可能会创建一个 PostRestore_Instructions 文件。 此文件包含启动 AD FS 服务之前必须手动安装的其他数据或服务的概述。 该文件指定身份验证提供程序、属性存储和本地声明提供程序信任。

版本发布历史记录

以下部分描述了 AD FS 快速还原工具的版本详细信息。

版本 2.0.2464.1

发布日期:2023 年 12 月

已解决的问题:

  • Bug 修复:在还原期间区分 CNG 和 CSP 密钥

版本 1.0.82.3

发行时间:2020 年 4 月

已解决的问题:

  • 添加对基于 CNG 的证书的支持

版本 1.0.82.0

发行时间:2019 年 7 月

已解决的问题:

  • 包含 LDAP 转义符的 AD FS 服务帐户名称的 Bug 修复

版本 1.0.81.0

发行时间:2019 年 4 月

已解决的问题:

  • 证书备份和还原的 Bug 修复
  • 将更多跟踪信息添加到日志文件

版本 1.0.75.0

发行时间:2018 年 8 月

已解决的问题:

  • 更新 Backup-ADFS cmdlet 的 -BackupDKM 开关。 该工具将确定当前上下文是否有权访问 DKM 容器。 如果提供了访问权限,则该工具不需要域管理员特权或服务帐户凭据。 此更新会启用自动备份,用户不需要显式提供凭据,也不需要以域管理员帐户身份运行操作。

版本 1.0.73.0

发行时间:2018 年 8 月

已解决的问题:

  • 更新加密算法,确保应用程序符合 FIPS 规范

    重要

    由于 FIPS 合规性加密算法发生变化,以前的备份无法与该工具的最新版本配合使用。

  • 添加了对使用合并复制的 SQL 群集的支持

版本 1.0.72.0

发行时间:2018 年 7 月

已解决的问题:

  • Bug 修复:修复 .MSI 安装程序以支持就地升级

版本 1.0.18.0

发行时间:2018 年 7 月

已解决的问题:

  • 缺陷修复:处理包含特殊字符(即“&”)的服务帐户密码
  • Bug 修复:解决由于 Microsoft.IdentityServer.Servicehost.exe.config 已被另一进程使用,因此还原失败的相关问题

版本 1.0.0.0

发布时间:2016 年 10 月

AD FS 快速还原工具的初始版本