租户受防护的 VM - 创建防护数据以定义受防护的 VM

适用范围:Windows Server 2022、Windows Server 2019、Windows Server 2016

屏蔽数据文件(也称为预配数据文件或 PDK 文件)是加密文件,由租户或 VM 所有者创建,用于保护重要的 VM 配置信息,例如管理员密码、RDP 和其他标识相关的证书,域加入凭据等。 本主题提供有关如何创建防护数据文件的信息。 在创建文件之前,必须从托管服务提供商处获取模板磁盘,或按照中所述创建模板磁盘。

有关防护数据文件内容的列表和图表,请参阅什么是防护数据,为什么需要防护数据?

重要

本部分中的步骤应在受保护构造之外的单独受信任计算机上完成。 通常,VM 所有者(租户)会为其 VM 创建防护数据,而不是构造管理员。

若要准备创建防护数据文件,请执行以下步骤:

然后便可以创建防护数据文件:

(可选)获取远程桌面连接的证书

由于租户只能使用远程桌面连接或其他远程管理工具连接到受防护的 VM,因此请务必确保租户可以验证他们是否连接到正确的终结点(也就是说,没有“中间人”截获连接)。

验证是否连接到预期服务器的一种方法是安装和配置远程桌面服务在启动连接时显示的证书。 连接到服务器的客户端计算机将检查它是否信任该证书,如果不信任则显示警告。 通常,为确保连接的客户端信任该证书,RDP 证书是从租户的 PKI 颁发的。 有关在远程桌面服务中使用证书的详细信息,请访问 TechNet。

为了帮助你确定是否需要获取自定义 RDP 证书,请考虑以下事项:

  • 如果只是在实验室环境中测试受防护的 VM,则不需要自定义 RDP 证书
  • 如果 VM 配置为加入 Active Directory 域,则计算机证书通常由组织的证书颁发机构自动颁发,并用于在 RDP 连接期间标识计算机。 不需要自定义 RDP 证书
  • 如果 VM 未加入域,但想要通过一种方式来验证在使用远程桌面时是否连接到正确的计算机,则应考虑使用自定义 RDP 证书

提示

选择要包含在防护数据文件中的 RDP 证书时,请务必使用通配符证书。 一个防护数据文件可用于创建无限数量的 VM。 由于每个 VM 将共享相同的证书,因此通配符证书可确保无论 VM 的主机名如何,证书都有效。

创建应答文件

由于 VMM 中的已签名模板磁盘是通用的,因此租户需要提供一个答案文件以在预配过程中专用化其受防护的 VM。 答案文件(通常称为无人参与文件)可以针对其预期角色配置 VM - 也就是说,它可以安装 Windows 功能、注册在上一步中创建的 RDP 证书以及执行其他自定义操作。 它还将提供 Windows 安装所需的信息,包括默认管理员的密码和产品密钥。

有关获取和使用 New-ShieldingDataAnswerFile 函数生成用于创建受防护 VM 的答案文件(Unattend.xml 文件)的信息,请参阅使用 New-ShieldingDataAnswerFile 函数生成答案文件。 使用该函数,可以更轻松地生成反映以下选项的答案文件:

  • VM 是否打算在初始化过程结束时加入域?
  • 是否会为每个 VM 使用批量许可证或特定产品密钥?
  • 使用的是 DHCP 还是静态 IP?
  • 是否会使用自定义远程桌面协议 (RDP) 证书来证明 VM 属于你的组织?
  • 是否要在初始化结束时运行脚本?

防护数据文件中使用的答案文件将用于使用该防护数据文件创建的每个 VM。 因此,应确保不要将任何特定于 VM 的信息硬编码到答案文件中。 VMM 支持无人参与文件中的某些替换字符串(请参阅下表),以处理可能因 VM 而异的专用化值。 你不需要使用这些字符串;但是,如果它们存在,VMM 便会加以利用。

为受防护的 VM 创建 unattend.xml 文件时,请记住以下限制:

  • 如果使用 VMM 管理数据中心,则无人参与文件必定会导致 VM 在配置后关闭。 这是为了让 VMM 知道何时应向租户报告 VM 已完成预配并可供使用。 一旦 VMM 检测到 VM 在预配过程中被关闭,它将自动重新启动 VM。

  • 请务必启用 RDP 和相应的防火墙规则,以便在配置 VM 后可以访问该 VM。 无法使用 VMM 控制台访问受防护的 VM,因此需要 RDP 才能连接到 VM。 如果你更喜欢使用 Windows PowerShell 远程处理来管理系统,请确保也启用了 WinRM。

  • 受防护的 VM 无人参与文件中唯一支持的替换字符串如下:

    可替换元素 替换字符串
    计算机名 @ComputerName@
    TimeZone @TimeZone@
    ProductKey @ProductKey@
    IPAddr4-1 @IP4Addr-1@
    IPAddr6-1 @IP6Addr-1@
    MACAddr-1 @MACAddr-1@
    Prefix-1-1 @Prefix-1-1@
    NextHop-1-1 @NextHop-1-1@
    Prefix-1-2 @Prefix-1-2@
    NextHop-1-2 @NextHop-1-2@

    如果有多个 NIC,可以通过递增第一个数字来为 IP 配置添加多个替换字符串。 例如,若要为 2 个 NIC 设置 IPv4 地址、子网和网关,请使用以下替换字符串:

    替换字符串 替换示例
    @IP4Addr-1@ 192.168.1.10/24
    @MACAddr-1@ 以太网
    @Prefix-1-1@ 24
    @NextHop-1-1@ 192.168.1.254
    @IP4Addr-2@ 10.0.20.30/24
    @MACAddr-2@ 以太网 2
    @Prefix-2-1@ 24
    @NextHop-2-1@ 10.0.20.1

使用替换字符串时,请务必确保在 VM 预配过程中填充字符串。 如果在部署时未提供 @ProductKey@ 这样的字符串,使无人参与文件中的 <ProductKey> 节点留空,则专用化过程将失败,你将无法连接到 VM。

另请注意,仅当利用 VMM 静态 IP 地址池时,才会使用表末尾的网络相关替换字符串。 托管服务提供商应该能够告诉你是否需要这些替换字符串。 有关 VMM 模板中的静态 IP 地址的详细信息,请参阅 VMM 文档中的以下内容:

最后,请务必注意,受防护的 VM 部署过程只会加密 OS 驱动器。 如果部署带有一个或多个数据驱动器的受防护 VM,强烈建议在租户域中添加无人参与命令或组策略设置以自动加密数据驱动器。

获取卷签名目录文件

防护数据文件还包含有关租户信任的模板磁盘的信息。 租户以卷签名目录 (VSC) 文件的形式从受信任的模板磁盘获取磁盘签名。 然后在部署新 VM 时验证这些签名。 如果防护数据文件中的任何签名都不匹配试图与 VM 一起部署的模板磁盘(即它被修改或与不同的、潜在的恶意磁盘交换),预配过程将失败。

重要

虽然 VSC 确保磁盘未被篡改,但对于租户来说,首先信任磁盘仍然很重要。 如果你是租户,并且模板磁盘由托管商提供,请使用该模板磁盘部署测试 VM,并运行自己的工具(防病毒、漏洞扫描程序等)来验证磁盘是否确实处于你信任的状态。

可通过两种方法获取模板磁盘的 VSC:

  1. 主机托管服务提供商(或租户,如果租户有权访问 VMM)使用 VMM PowerShell cmdlet 保存 VSC 并将其提供给租户。 可以在安装并配置了 VMM 控制台以管理宿主构造的 VMM 环境的任何计算机上执行此操作。 用于保存 VSC 的 PowerShell cmdlet 包括:

    $disk = Get-SCVirtualHardDisk -Name "templateDisk.vhdx"
    
    $vsc = Get-SCVolumeSignatureCatalog -VirtualHardDisk $disk
    
    $vsc.WriteToFile(".\templateDisk.vsc")
    
  2. 租户有权访问模板磁盘文件。 如果租户创建模板磁盘以上传到托管服务提供商,或者租户可以下载主机托管服务提供商的模板磁盘,则可能会出现这种情况。 在这种情况下,如果没有 VMM,租户将运行以下 cmdlet(与受防护的 VM 工具功能一起安装,是远程服务器管理工具的一部分):

    Save-VolumeSignatureCatalog -TemplateDiskPath templateDisk.vhdx -VolumeSignatureCatalogPath templateDisk.vsc
    

选择受信任的构造

防护数据文件中的最后一个组件与 VM 的所有者和保护者相关。 保护者用于指定受防护 VM 的所有者以及有权在其上运行该 VM 的受保护构造。

若要授权托管构造运行受防护的 VM,必须从托管服务提供商的主机保护者服务获取保护者元数据。 通常,托管服务提供商会通过其管理工具向你提供此元数据。 在企业方案中,你可以自己直接访问以获取元数据。

你或你的托管服务提供商可以通过执行以下操作之一从 HGS 获取保护者元数据:

  • 通过运行以下 Windows PowerShell 命令或浏览到网站并保存显示的 XML 文件,直接从 HGS 获取保护者元数据:

    Invoke-WebRequest 'http://hgs.bastion.local/KeyProtection/service/metadata/2014-07/metadata.xml' -OutFile .\RelecloudGuardian.xml
    
  • 使用 VMM PowerShell cmdlet 从 VMM 获取保护者元数据:

    $relecloudmetadata = Get-SCGuardianConfiguration
    $relecloudmetadata.InnerXml | Out-File .\RelecloudGuardian.xml -Encoding UTF8
    

获取要授权受防护 VM 运行的每个受保护的构造的保护者元数据文件,然后再继续。

使用防护数据文件向导创建防护数据文件并添加保护者

运行防护数据文件向导以创建防护数据 (PDK) 文件。 在这里,你将添加 RDP 证书、无人参与文件、卷签名目录、“所有者”保护者和在上一步中获取的下载的保护者元数据。

  1. 使用服务器管理器或以下 Windows PowerShell 命令在计算机上依次安装远程服务器管理工具 > 功能管理工具 > 受防护的 VM 工具

    Install-WindowsFeature RSAT-Shielded-VM-Tools
    
  2. 从“开始”菜单上的“管理员工具”部分或通过运行以下可执行文件 C:\Windows\System32\ShieldingDataFileWizard.exe 打开“防护数据文件向导”

  3. 在第一页上,使用第二个文件选择框选择防护数据文件的位置和文件名。 通常,将以拥有使用该防护数据创建的任何 VM 的实体(例如,HR、IT、财务)及其正在运行的工作负载角色(例如,文件服务器、Web 服务器或无人参与文件配置的任何其他内容)来命名防护数据文件。 将单选按钮设置为“受防护模板的防护数据”

    注意

    在防护数据文件向导中,你会注意到以下两个选项:

    • 受防护模板的防护数据
    • 现有 VM 和非受防护模板的防护数据
      从受防护的模板创建新的受防护的 VM 时使用第一个选项。 第二个选项允许创建仅在转换现有 VM 或从非防护模板创建受防护的 VM 时才能使用的防护数据。

    Shielding Data File Wizard, file selection

    此外,还必须选择使用此防护数据文件创建的 VM 是真正受到防护还是配置为“支持加密”模式。 有关这两个选项的详细信息,请参阅受保护的构造可以运行的虚拟机的类型有哪些?

    重要

    请格外注意下一步,因为它定义了受防护 VM 的所有者,以及授权在哪些构造上运行受防护的 VM。
    需要拥有“所有者”保护者,以便稍后将现有的受防护 VM 从“受防护”更改为“支持的加密”,反之亦然

  4. 此步骤的目标有两个:

    • 创建或选择将你表示为 VM 所有者的“所有者”保护者

    • 导入在上一步中从托管提供商(或你自己的)主机保护者服务下载的保护者

    若要指定现有所有者保护者,请从下拉菜单中选择相应的保护者。 只有安装在本地计算机上且私钥完好无损的保护者才会显示在此列表中。 还可以通过选择右下角的“管理本地保护者”并单击“创建”并完成向导来创建自己的所有者保护者

    接下来,我们使用“所有者和保护者”页面再次导入之前下载的保护者元数据。 从右下角选择“管理本地保护者”。 使用导入功能导入保护者元数据文件。 导入或添加所有必要的保护者后,单击“确定”。 最佳做法是,以托管服务提供商或其所代表的企业数据中心来命名保护者。 最后,选择代表受防护 VM 有权在其中运行的数据中心的所有保护者。 无需再次选择所有者保护者。 完成后,单击“下一步”

    Shielding Data File Wizard, owner and guardians

  5. 在“卷 ID 限定符”页上,单击“添加”以授权防护数据文件中的已签名模板磁盘。 在对话框中选择 VSC 时,它将显示有关该磁盘的名称、版本以及用于对其进行签名的证书的信息。 对要授权的每个模板磁盘重复此过程。

  6. 在“专用化值”页上,单击“浏览”以选择将用于专用化 VM 的 unattend.xml 文件

    使用底部的“添加”按钮将在专用化过程中需要的任何其他文件添加到 PDK。 例如,如果无人参与文件正在将 RDP 证书安装到 VM 上(如使用 New-ShieldingDataAnswerFile 函数生成答案文件中所述),则应在此处添加 RDP 证书 PFX 文件和 RDPCertificateConfig.ps1 脚本。 请注意,在此处指定的任何文件都将自动复制到创建的 VM 上的 C:\temp\。 在按路径引用文件时,无人参与文件应预期文件位于该文件夹中。

  7. 在下一页上查看所选内容,然后单击“生成”

  8. 完成后关闭向导。

使用 PowerShell 创建防护数据文件并添加保护者

作为“防护数据文件”向导的替代方法,可以运行 New-ShieldingDataFile 来创建防护数据文件。

所有防护数据文件都需要配置正确的所有者和保护者证书,以授权受防护的 VM 在受保护的构造上运行。 可以通过运行 Get-hgsGuardian 来检查你是否在本地安装了任何保护者。 所有者保护者具有私钥,而数据中心的保护者通常没有私钥。

如果需要创建所有者保护者,请运行以下命令:

New-HgsGuardian -Name "Owner" -GenerateCertificates

此命令在本地计算机的证书存储中的“受防护 VM 本地证书”文件夹下创建一对签名和加密证书。 你将需要所有者证书及其相应的私钥来取消保护虚拟机,因此请确保备份这些证书并防止被盗。 有权访问所有者证书的攻击者可以使用它们来启动受防护的虚拟机或更改其安全配置。

如果需要从要运行虚拟机的受保护构造(主数据中心、备份数据中心等)导入保护者信息,请对从受保护构造检索的每个元数据文件运行以下命令。

Import-HgsGuardian -Name 'EAST-US Datacenter' -Path '.\EastUSGuardian.xml'

提示

如果使用了自签名证书或注册到 HGS 的证书已过期,则可能需要将 -AllowUntrustedRoot 和/或 -AllowExpired 标志与 Import-HgsGuardian 命令一起使用,以绕过安全检查。

还需要为要与此防护数据文件和防护数据答案文件一起使用的每个模板磁盘获取卷签名目录以允许操作系统自动完成其专用化任务。 最后,决定是希望 VM 完全受防护还是仅启用 vTPM。 将 -Policy Shielded 用于完全受防护的 VM,或将 -Policy EncryptionSupported 用于已启用 vTPM 的 VM(该 VM 支持基本控制台连接和 PowerShell Direct)。

一切准备就绪后,运行以下命令以创建防护数据文件:

$viq = New-VolumeIDQualifier -VolumeSignatureCatalogFilePath 'C:\temp\marketing-ws2016.vsc' -VersionRule Equals
New-ShieldingDataFile -ShieldingDataFilePath "C:\temp\Marketing-LBI.pdk" -Policy EncryptionSupported -Owner 'Owner' -Guardian 'EAST-US Datacenter' -VolumeIDQualifier $viq -AnswerFile 'C:\temp\marketing-ws2016-answerfile.xml'

提示

如果使用自定义 RDP 证书、SSH 密钥或需要包含在防护数据文件中的其他文件,请使用 -OtherFile 参数来包括它们。 可以提供以逗号分隔的文件路径列表,例如 -OtherFile "C:\source\myRDPCert.pfx", "C:\source\RDPCertificateConfig.ps1"

在上述命令中,名为“所有者”(从 Get-HgsGuardian 获取)的保护者将来将能够更改 VM 的安全配置,而“EAST-US 数据中心”可以运行 VM,但不能更改其设置。 如果有多个保护者,请用逗号分隔保护者的名称(如 'EAST-US Datacenter', 'EMEA Datacenter')。 卷 ID 限定符指定是仅信任模板磁盘的确切版本 (Equals) 还是同时信任未来版本 (GreaterThanOrEquals)。 磁盘名称和签名证书必须完全匹配,以便在部署时考虑版本比较。 通过向 -VolumeIDQualifier 参数提供以逗号分隔的卷 ID 限定符列表,可以信任多个模板磁盘。 最后,如果有其他文件需要随答案文件一起提供给 VM,请使用 -OtherFile 参数并提供以逗号分隔的文件路径列表。

请参阅 New-ShieldingDataFileNew-VolumeIDQualifier 的 cmdlet 文档,了解配置防护数据文件的其他方法。

其他参考