在 亚马逊云科技 上为您自行管理的活动目录自动进行灾难恢复

在这篇博客文章中,我将介绍如何利用亚马逊网络服务 (AW) 为自己管理的微软Active Directory (AD) 进行灾难恢复 (DR)。我还将提供自动化解决方案,以帮助您对AD基础架构进行按需定期的灾难恢复测试,这是大型业务连续性战略的一部分。

简介

大多数企业组织使用 Microsoft AD 进行整个组织的身份管理。客户通常对如何利用 亚马逊云科技 为其自我管理的 AD 基础设施实施灾难恢复策略感兴趣。首先,如果你使用的是 适用于微软 Active Directory 的 亚马逊云科技 Directory Service(亚马逊云科技 Managed Microsoft AD) ,该服务会为你处理这个亚马逊云科技 Managed Managed Microsoft AD 每天自动拍摄您的目录快照,如果发生灾难,您只需单击一下按钮即可从备份中恢复目录并恢复业务运营。有关更多信息,请参阅 Snaphot 或在 亚马逊云科技 管理的 Microsoft AD 文档 中恢复您的目录

如果您在本地或 亚马逊弹性计算云(Amazon EC2) 上运行自我管理的 AD ,我将向您展示如何利用 亚马逊云科技 作为 AD 的 DR。我还为您提供自动化解决方案,以帮助您定期对AD基础架构进行灾难恢复演练,这是大型业务连续性战略的一部分。

解决方案概述

定期备份对于实施 AD 灾难恢复计划至关重要。该提议的解决方案利用加密的 亚马逊弹性区块存储 (EBS) 卷和 亚马逊云科技 Bac k up 服务的组合,为 您的广告备份数据 提供强有力的保护。首先,将系统状态数据(包含 AD 数据)备份到辅助加密的 Amazon EBS 卷。然后,您可以使用 亚马逊云科技 Backup 备份 Amazon EBS 卷,如图 1 所示,以进一步保护数据免受意外删除等事件的影响。而且,如果发生灾难,或者在常规灾难恢复演习中,您可以从 亚马逊云科技 Backup 恢复 Amazon EBS 卷,然后从 Amazon EBS 卷中恢复 AD。我提供了一个 亚马逊云科技 Cloudformation 模板样本来实现流程自动化。要将此解决方案用于您的本地 AD,您必须将本地 AD 扩展到 亚马逊云科技,如图 1 所示。

有关将自主管理 AD 扩展到 亚马逊云科技 的步骤,请参阅此 博客文章

Solution architecture diagram 图 1:解决方案架构。

演练

以下是实施该解决方案的高级步骤:

保护
该解决方案从保护您的 AD 数据的步骤开始:

  1. 通过在 亚马逊云科技 的不同可用区部署至少 2 个域控制器,将您的本地 AD 扩展到 亚马逊云科技,如图 1 所示。如果您的自管 AD 托管在 Amazon EC2 上,则无需执行此步骤。
  2. 创建 加密的 Amazon (EBS) 卷并将其附加到 Amazon EC2 上的每个域控制器。
  3. 对连接的辅助加密卷进行每日系统状态备份。
  4. 亚马逊云科技 Backup 配置 为每天拍摄辅助亚马逊 EBS 卷的快照。
  5. 配置 亚马逊云科技 Backup 以对域控制器实例进行定期 AMI 备份。将频率设置为与现有的 Windows 补丁维护窗口保持一致。

REST
ORE 然后,该解决方案提供了在 亚马逊云科技 上进行自我管理的 AD 灾难恢复试运行所需的步骤。

  1. 构建一个隔离的环境:新的 亚马逊虚拟私有云 (亚马逊 VPC) VPC 、子网、 NAT 网关 等。
  2. 使用域控制器 AMI 备份在隔离环境中启动 Amazon EC2 实例。
  3. 从 亚马逊云科技 Backup 恢复包含系统状态备份的 Amazon EBS 卷。
  4. 将备份卷附加到亚马逊 EC2 实例。
  5. 从备份卷恢复系统状态备份。
  6. 执行 AD 林恢复步骤。

先决条件

这篇文章中的说明假设您了解如何 创建 Amazon EC2 实例 以及如何 使用远程桌面协议 (RDP) 登录实例 。对于在本地运行 AD 的客户,这些说明还假设您已将本地 AD 扩展到 Amazon EC2。请参阅此 博客

为您的 AD 设置保护

在本节中,你将在两个级别上设置每日备份 AD 数据。首先,您将为 Amazon EBS 配置每日自动系统状态备份。域控制器的系统状态备份包括 AD 数据。有关更多详细信息,请参阅 微软文档

接下来,您将使用 亚马逊云科技 Backup 设置包含系统状态备份的 Amazon EBS 卷的每日自动快照。这对于保护亚马逊 EBS 卷是必要的。可以将其视为 AD 备份的异地副本。

接下来,您将设置域控制器实例本身的自动 AMI 备份。AMI 可确保您在林恢复期间 按照 Microsoft 的 建议 恢复到相同的操作系统实例。您可以将 AMI 备份频率与每月的 Windows 补丁维护窗口保持一致。

步骤 1:配置 AD 的每日备份到亚马逊 EBS。

完成以下步骤,配置 AD 的每日自动系统状态备份到 Amazon EBS。

  1. 创建 加密 的亚马逊 EBS 卷。
  2. Amazon EBS 卷连接到亚马逊 EC2 上的一个域控制器。
  3. 使 亚马逊 EBS 卷在 Windows 上可用。
  4. 按照 本文档 中的步骤 为 Amazon EBS 卷设置自动系统状态备份。或者,你可以使用下面的脚本进行设置。此脚本创建了一个计划任务,该任务每天凌晨 1:00 运行对辅助 Amazon EBS 卷的系统状态备份。在我的示例中,备份 Amazon EBS 卷的驱动器号为 “d:”。它还创建了第二个计划任务,该任务在启动时运行,并使用 EC2Laun ch 修复通 往 EC2 元数据 服务的路由。 当使用自定义 Windows AMI 在不同的子网/VPC 中启动实例时,需要正确配置 EC2 元数据的路由。这可确保您在还原过程中从域控制器自定义 AMI 启动实例时,该实例将由 亚马逊云科技 Systems Manager 管理 以实现自动化。它还将 亚马逊提供的DDNS 设置 为转发器,以启用正确的名称解析。
#Install Window Server Backup Feature
Install-WindowsFeature Windows-Server-Backup 

# Create new folder to store the backup script
New-Item -Path C:\AD_Disaster_Recovery_Scripts\ -ItemType Directory -Force

# Create and save the backup script to the folder
@'
# Configure Backup Parameters
$Policy = New-WBPolicy
$BackupLocation = New-WBBackupTarget -VolumePath D:
Add-WBSystemState $Policy
Add-WBBackupTarget -Policy $Policy -Target $BackupLocation
Set-WBVssBackupOptions -Policy $Policy -VssCopyBackup

Write-output "Start System State Backup job"
Try {
    Start-WBBackup -Policy $Policy -Async -Force
}   Catch [System.Exception] {
    write-output "unable to start system state backup"
}

# Check running backup job.
Get-WBJob
'@ | Set-Content -Path "C:\AD_Disaster_Recovery_Scripts\SystemStateBackup.ps1"

# Create Scheduled Task to run the backup script at regular intervals.
$taskAction = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "C:\AD_Disaster_Recovery_Scripts\SystemStateBackup.ps1"
$taskTrigger = New-ScheduledTaskTrigger -Daily -At 1am
$taskName = "SystemStateBackup"
$description = "Performs system state backup every day at 1am"

# Register the scheduled task"
Register-ScheduledTask -TaskName $taskName -Action $taskAction -Trigger $taskTrigger -Description $description -User "System" -RunLevel "Highest"
write-output "Scheduled Task name SystemStateBackup created" 


# Adding route to EC2 meta-data service if OS is 2016 or 2019
@'
$OSVersion = (Get-WmiObject -class Win32_OperatingSystem).Caption
if ($OSVersion -match "2016" -or $OSVersion -match "2019") {

try {
    Import-Module c:\ProgramData\Amazon\EC2-Windows\Launch\Module\Ec2Launch.psm1; Add-Routes
    Write-Output "successfully added route to EC2 metadata service"
    }catch [System.Exception] {
    Write-Output "Unable to added route to EC2 metadata service"
    Write-Output ($Error[0].Exception)
    }
}

Write-Output "Setting DNS as authoritative for the domain"                                                 
try {
    Get-NetAdapter | Select-Object InterfaceAlias , InterfaceIndex
    $IntIndex = Get-NetAdapter | where {$_.ifDesc -notlike "TAP*"} | foreach InterfaceIndex | select -First 1
    Set-DnsClientServerAddress -InterfaceIndex $IntIndex -ResetServerAddresses
    Set-DnsClientServerAddress -InterfaceIndex $IntIndex -ServerAddresses ("127.0.0.1")
    Write-Output "Successfully set DNS as authorative for the domain"
} catch [System.Exception] {
    Write-Output "unable set current server as authoritaive DNS server for the domain"
    Write-Output ($Error[0].Exception)
}
                      
Write-Log "Setting DNS forwarder to AmazonProvidedDNS"
try {
    Set-DnsServerForwarder -IPAddress "169.254.169.253" -PassThru
    Write-Output "Successfully set DNS forwarder to Amazon Provided DNS"      
}  Catch [System.Exception] {
    Write-Output "Unable to set DNS forwarder to Amazon Provided DNS"
    Write-Output ($Error[0].Exception)
}

'@ | Set-Content -Path "C:\AD_Disaster_Recovery_Scripts\addroutes.ps1"

# Create a new task action
$taskAction = New-ScheduledTaskAction `
    -Execute 'C:\Windows\System32\cmd.exe' `
    -Argument '/C C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -NonInteractive -NoLogo -ExecutionPolicy Unrestricted -File "C:\AD_Disaster_Recovery_Scripts\addroutes.ps1"'

# Create a new trigger at startup
$taskTrigger = New-ScheduledTaskTrigger -AtStartup


# The name of your scheduled task.
$taskName = "AddEC2Routes"

# Describe the scheduled task.
$description = "Fix Windows Route table to access the EC2 metadata when using custom Windows AMI to create a instance in a new subnet."

# Register the scheduled task
Register-ScheduledTask `
    -TaskName $taskName `
    -Action $taskAction `
    -Trigger $taskTrigger `
    -Description $description `
    -User "System" `
    -RunLevel "Highest"

Write-Output "Scheduled Task name AddEC2Routes created"

注意:Microsoft 建议您的 AD 基础架构的每个域中每天至少备份两个可写域控制器。

第 2 步:使用 亚马逊云科技 Backup 保护亚马逊 EBS 卷和域控制器实例

要保护包含您在步骤 1 中配置的 AD 数据的卷,请将 亚马逊云科技 Backup 设置为定期拍摄该卷的快照。此步骤对于确保您拥有备份卷的多个副本至关重要。亚马逊云科技 Backup 是一项完全托管的服务,可以轻松地在 亚马逊云科技 服务、云端和本地集中和自动化数据保护。接下来,您还将为域控制器实例本身创建 AMI 备份。实例的 AMI 备份可确保我们在执行还原操作时恢复到同一个操作系统实例。在还原过程中,我们将首先从 AMI 备份中启动 Amazon EC2 实例,运行系统状态恢复,然后执行其他 AD 恢复操作。

完成以下步骤,使用 亚马逊云科技 Backup 计划包含系统状态数据和域控制器实例的 AMI 备份的 Amazon EBS 卷的快照:

  1. 导航到 亚马逊云科技 Backup 控制台并选择 备份计划。
  2. 选择 “ 创建备份计划 ”, 然后选择 “ 生成新计划 ” ,如图 2 所示。
  3. 在 “ 备份计划名称” 和 “ 备份规则名称” 中分别输入一个名称。
  4. 对于 备份频率, 选择 每日 , 对于 保留, 选择一个值。请注意,您选择的值不应超过墓碑寿命。早于 tombstone 生命周期的备份无效,不能用于恢复 AD。有关详细信息,请参阅微软 文档 。此外,在设置备份时间时,请考虑您在步骤 1 中设置的每日系统状态备份时间。您希望在 亚马逊云科技 Backup 开始 Amazon EBS 卷的快照备份之前完成系统状态备份。在我的示例中,我将系统状态备份设置为在凌晨 1:00 进行,亚马逊云科技 Backup 设置为在凌晨 5:00 运行。
  5. 对于 复制到目的地, 如果您想要创建恢复点的跨区域或跨账户副本, 请选择所需的 亚马逊云科技 区域。
  6. 点击 创建计划。

    Screenshot of creating a new AWS Backup Plan
    图 2:创建新的 亚马逊云科技 Backup 计划

  7. 选择 “ 备份计划 ” ,然后选择您刚刚创建的计划。
  8. 选择 分配资源 ,提供 资源分配名称 ,然后选择 包含特定资源类型
  9. “选择特定资源类型 ” 下 ,选择 EBS , 然后选择包含系统状态数据的 EBS 卷。
  10. 选择 分配资源。
  11. 接下来,重复上述步骤 1 到 6,创建第二个 亚马逊云科技 备份计划,对域控制器实例进行 AMI 备份。对于频率,请选择每月一次,并使其与向域控制器应用 Windows 补丁的现有计划保持一致。例如,如果您已计划在每个月的第四个周六在域控制器上安装 Windows 补丁,则可以在 亚马逊云科技 Backup 中指定每月的第四个星期日。这可确保 AMI 包含当月发布的补丁。但是,如果您在 AD 恢复/试运行过程中使用上个月的备份 AMI,请记得在必要时将缺失的 Windows 补丁安装到实例中。
  12. 创建 AMI 备份计划后,选择计划,选择 分配资源 ,选择 包含特定资源类型 ,选择 选择特定资源类型 ,选择 EC2 , 然后选择域控制器 EC2 实例。

现在,您已经完成了备份 AD 数据的步骤。

为你的 AD 进行灾难恢复演习。

作为 AD DR 策略的一部分,您应该定期进行灾难恢复演习。这有助于验证备份是否可行,并确保您在发生灾难时做好准备。本节介绍从备份中恢复 AD 的步骤。

第 1 步:从 亚马逊云科技 Backup 恢复包含广告数据的亚马逊 EBS

在此步骤中,您将从 亚马逊云科技 Backup 中恢复之前备份的、包含系统状态备份的 Amazon EBS 快照。恢复亚马逊 EBS 快照时,亚马逊云科技 Backup 会创建一个新的亚马逊 EBS 卷,您可以将其连接到您的 Amazon EC2 实例。您将使用恢复后的音量为灾难恢复演习的 AD。

完成以下步骤以恢复包含来自 亚马逊云科技 Backup 的系统状态数据的 Amazon EBS 卷:

  1. 打开 亚马逊云科技 Backup 控制台 , 然后在导航窗格中选择 受保护的资源。
  2. 选择卷 ID,选择 恢复点 ID, 然后选择 “ 恢复
  3. 在 “ 还原备份 ” 页面上,选择一个可用区域,然后选择 “ 还原备份”, 如图 3 所示。记下您选择的可用区域,因为下一步将需要此信息。在我的示例中,我选择将音量恢复到 us-east-1a。

Screenshot of restoring EBS Volume containing AD data from AWS Backup
图 3:从 亚马逊云科技 Backup 恢复包含广告数据的 EBS 卷

步骤 2:在隔离环境中恢复 AD 林

从 亚马逊云科技 Backup 恢复 Amazon EBS 卷后,您需要使用域控制器备份 AMI 来进行还原过程。按照以下步骤找到您之前使用 亚马逊云科技 Backup 设置的域控制器的 AMI 备份:

  1. 导航到 Amazon EC2 控制台并 从左侧导航栏中选择 AMI
  2. 找到并记下要用于还原过程的域控制器 AMI。 亚马逊云科技 Backup 使用的 AMI 名称以 “awsBackup_” 开头。

现在,有了包含系统状态数据的 Amazon EBS 卷和从 亚马逊云科技 Backup 获得的域控制器的备份 AMI,您现在可以恢复 AD 了。在灾难恢复演习期间,将 AD 恢复到隔离环境,这样您的生产环境就不会受到影响。要单独恢复 AD,您将创建一个新的 VPC,使用备份 AMI 在 VPC 上启动新的亚马逊 EC2 实例,将恢复的 Amazon EBS 卷附加到 Amazon EC2 实例,并 从连接的卷执行 系统状态恢复 到该实例。然后,您需要执行一系列 AD 林恢复操作以完成 AD 恢复过程。有关更多详细信息,请参阅 微软文档 。此过程可能很耗时,尤其是在您要定期对 AD 环境进行灾难恢复演习时。

为了更快、更轻松地完成此操作,我提供了一个 亚马逊云科技 CloudFormation 模板,您可以按需部署该模板来构建隔离环境、运行系统状态恢复并自动执行森林恢复操作。

Cloudformation 模板执行以下操作:

    1. 构建隔离的网络环境——新 VPC、子网、NAT 网关、IGW 等。
    2. 使用指定的备份 AMI 在隔离环境中启动实例。从模板中
    3. 指定的备份 EBS 卷中 附加和恢复系统状态数据
    4. 执行 SYSVOL 的授权恢复。有关更多信息,请参阅 微软文档
    5. 夺取 FSMO 角色。
    6. 使用 ntdsutil.exe 命令行工具对 AD 数据库中的所有域控制器执行 AD 元数据清理,运行命令的域控制器除外。
    7. 移除包含任何其他已删除域控制器的所有 DNS 记录。
    8. 配置 Windows 时间服务。

完成以下步骤,部署 亚马逊云科技 CloudFormation 模板以在隔离环境中恢复您的 AD:

  1. 下载 CloudFormation 模板。
  2. 导航到 亚马逊云科技 CloudFormation 控制台
  3. 对于 “ 创建堆栈 ” ,选择 “ 使用新资源(标准)”。
  4. 对于 模板源 ,选择 上传模板文件 。选择 “ 选择文件 ” ,选择您在步骤 1 中下载的模板,然后选择 “ 下一 步” 。
  5. 指定堆栈详细信息 页面上,模板预先填充了大部分条目。输入您从 亚马逊云科技 Backup 恢复的 Amazon EBS 卷和域控制器备份 AMI 的卷 ID。为子网 1 指定可用区时,请确保它与您在上一节中提到的 Amazon EBS 卷的可用性相匹配,如图 4 所示。这可确保域控制器实例可以挂载恢复的 EBS 卷。填写其他详细信息并选择 下一步。

注意:我测试并建议使用基于 亚马逊云科技 Nitro 系统的 实例。此外,自动化在附加的 Amazon EBS 卷上使用最新版本的系统状态备份。要使用不同的系统状态备份版本,请按照步骤 1 所述,从 亚马逊云科技 Backup 恢复不同的版本。

CloudFormation template parameters
图 4:CloudFormation 模板参数

  1. 配置堆栈选项 页面上,选择 下一步
  2. 查看 堆栈名称页面上,选中 我确认 亚马逊云科技 CloudFormation 可能会使用自定义名称创建 IAM 资源 旁边的复选框, 然后选择 提交。
  3. 亚马逊云科技 CloudFormation 堆栈创建完成后,打开 亚马逊云科技 Systems Manager 自动化 控制台,等待自动完成系统状态恢复操作。
  4. 更新堡垒 Amazon EC2 实例的安全组 ,以允许您的 IP 地址和使用 RDP 登录。从堡垒实例中,使用 RDP 登录到已恢复的域控制器实例,然后打开事件查看器。
  5. 查看事件 ID 为 4602 的 DFS 复制事件日志,该日志显示 SYSVOL 复制已初始化。您应该查看其他日志并进行其他测试以确认已恢复的域控制器的运行状况。图 5 显示了我恢复的域控制器中 DFS 日志的屏幕截图。有关更多信息,请参阅 AD 林恢复-验证复制

DFS Replication log showing SYSVOL initialization on restored DC
图 5。DFS 复制日志显示已恢复的 DC 上的 SYSVOL 初始化

注意:在林还原后,进行额外检查以验证已恢复的域控制器的运行状况。有关更多信息,请参阅 微软文档

  1. 然后,您可以根据需要为您的域部署新的附加域控制器。

清理

要删除 亚马逊云科技 CloudFormation 模板创建的资源,请前往 亚马逊云科技 CloudFormation 控制台。选择您创建的堆栈,然后选择 删除

结论

Active Directory 越来越成为勒索软件攻击 的目标 ,为您的AD基础设施实施灾难恢复策略比以往任何时候都更加重要。在这篇博客文章中,我向您展示了如何使用 亚马逊云科技 为您的自我管理的 AD 基础设施实施灾难恢复解决方案。使用我提供的 CloudFormation 模板,您可以毫不费力地定期为广告进行演练,而不会对生产造成影响。

最后一点,你可以通过迁移到 亚马逊云科技 托管的 Microso ft AD 来减轻管理 AD 灾难的无差别繁重工作。 亚马逊云科技 Managed Managed Microsoft AD 为您提供简单、完全托管的目录服务体验,因此您可以专注于业务和客户。


亚马逊云科技 可以帮助您评估贵公司如何充分利用云计算。加入数百万信任我们在云端迁移和现代化他们最重要的应用程序的 亚马逊云科技 客户的行列。要了解有关对 Windows 服务器或 SQL Server 进行现代化的更多信息,请访问 亚马逊云科技 上的 Windows 联系我们 ,立即开始您的迁移之旅。

Tekena Orugbani

Tekena Orugbani

Tekena 是位于弗吉尼亚州的亚马逊网络服务的高级专业解决方案架构师。Tekena 于 2017 年加入 亚马逊云科技,专注于帮助客户在 亚马逊云科技 云上架构、迁移和现代化微软工作负载。工作之余,Tekena 喜欢和家人一起出去玩和看足球。


*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。