步骤 2:受软件保护的密钥到受 HSM 保护的密钥迁移

这些说明是从 AD RMS 到 Azure 信息保护的迁移路径的一部分,仅当 AD RMS 密钥受软件保护,并且希望使用 Azure Key Vault 中受 HSM 保护的租户密钥迁移到 Azure 信息保护时才适用。

如果这不是你选择的配置方案,请返回到步骤 4. 从 AD RMS 中导出配置数据并将其导入到 Azure RMS,然后选择不同的配置。

这是将 AD RMS 配置导入 Azure 信息保护的四部分过程,以生成由你在 Azure Key Vault 中托管的 Azure 信息保护租户密钥 (BYOK)。

必须首先从 AD RMS 配置数据中提取服务器许可方证书 (SLC) 密钥并将该密钥传输到本地 nCipher HSM,然后打包 HSM 密钥并将其传输到 Azure Key Vault,再从 Azure 信息保护授权 Azure Rights Management 服务访问你的密钥保管库,之后导入配置数据。

由于 Azure 信息保护租户密钥将由 Azure Key Vault 存储和托管,因此除了 Azure 信息保护,这部分迁移还需要在 Azure Key Vault 中进行管理。 如果 Azure Key Vault 由与你不同的组织管理员托管,则必须协调并与该管理员协作以完成这些过程。

在开始之前,确保组织具有已在 Azure Key Vault 中创建的密钥保管库,并支持受 HSM 保护的密钥。 尽管这不是必需的,但建议为 Azure 信息保护提供专用密钥保管库。 此密钥保管库将配置为允许 Azure 信息保护中的 Azure Rights Management Service 访问它,因此此密钥保管库存储的密钥应仅限于 Azure 信息保护密钥。

提示

如果要为 Azure Key Vault 执行配置步骤,并且不熟悉此 Azure 服务,则先查看 Azure Key Vault 入门可能会很有用。

第 1 部分:从配置数据中提取 SLC 密钥并将密钥导入本地 HSM

  1. Azure Key Vault 管理员:对于要存储在 Azure Key Vault 中的每个导出 SLC 密钥,使用 Azure Key Vault 文档的为 Azure Key Vault 实施“创建自己的密钥”(BYOK) 部分中的以下步骤:

    请勿执行生成租户密钥的步骤,因为导出的配置数据 (.xml) 文件中已有等效项。 而是可以运行工具从文件中提取此密钥并将其导入到本地 HSM。 运行工具时会创建两个文件:

    • 不含密钥的新配置数据文件,然后即可将其导入到 Azure 信息保护租户。

    • 包含密钥的 PEM 文件(密钥容器),然后即可将其导入到本地 HSM。

  2. Azure 信息保护管理员或 Azure Key Vault 管理员:在已断开连接的工作站上,运行 Azure RMS 迁移工具包中的 TpdUtil 工具。 例如,如果该工具安装在复制名为 ContosoTPD.xml 的配置数据文件的 E 驱动器上:

    E:\TpdUtil.exe /tpd:ContosoTPD.xml /otpd:ContosoTPD.xml /opem:ContosoTPD.pem
    

    如果有多个 RMS 配置数据文件,针对其余文件运行此工具。

    要查看此工具的帮助(包括说明、用法和示例),运行不含参数的 TpdUtil.exe

    此命令的其他信息:

    • /tpd:指定导出的 AD RMS 配置数据文件的完整路径和名称。 完整参数名称为“TpdFilePath”。

    • /otpd:指定不含密钥的配置数据文件的输出文件名。 完整参数名称为“OutPfxFile”。 如果未指定此参数,则输出文件默认为带后缀 _keyless 的原始文件名称,并存储在当前文件夹中。

    • /opem:指定 PEM 文件的输出文件名称,其中包含提取的密钥。 完整参数名称为“OutPemFile”。 如果未指定此参数,则输出文件默认为带后缀 _key 的原始文件名称,并存储在当前文件夹中。

    • 如果在运行此命令时未指定密码(通过使用 TpdPassword 完整参数名称或 pwd 短参数名称),系统会提示指定密码。

  3. 根据 nCipher 文档,在同一个连接断开的工作站上连接并配置 nCipher HSM。 现在,可以使用以下命令将密钥导入到附加的 nCipher HSM 中,在该命令中,需要将自己的文件名替换为 ContosoTPD.pem:

    generatekey --import simple pemreadfile=e:\ContosoTPD.pem plainname=ContosoBYOK protect=module ident=contosobyok type=RSA
    

    注意

    如果有多个文件,选择与要在 Azure RMS 中使用的 HSM 密钥对应的文件,以在迁移后保护内容。

    此操作将生成类似以下所示的输出:

    密钥生成参数:

    用于执行导入的 operation 操作

    应用程序应用程序简单

    verify 验证配置密钥是否安全 是

    type 密钥类型 RSA

    包含 RSA 密钥的 pemreadfile PEM 文件 e:\ContosoTPD.pem

    ident 密钥标识符 contosobyok

    plainname 密钥名称 ContosoBYOK

    已成功导入密钥。

    密钥的路径:C:\ProgramData\nCipher\Key Management Data\local\key_simple_contosobyok

此输出确认私钥现在已迁移到本地 nCipher HSM 设备,并带有保存到密钥(在我们的示例中为“key_simple_contosobyok”)的加密副本。

现在已提取 SLC 密钥并将其导入到本地 HSM,可以打包受 HSM 保护的密钥并将其传输到 Azure Key Vault。

重要

完成此步骤后,从已断开连接的工作站安全擦除这些 PEM 文件,以确保未经授权的人员无法访问这些文件。 例如,运行“cipher /w: E”以安全中删除 E: 驱动器中的所有文件。

第 2 部分:打包 HSM 密钥并将其传输到 Azure Key Vault

Azure Key Vault 管理员:对于要存储在 Azure Key Vault 中的每个导出 SLC 密钥,使用 Azure Key Vault 文档的为 Azure Key Vault 实施“创建自己的密钥”(BYOK) 部分中的以下步骤:

请勿按照以下步骤执行生成密钥对,因为已有密钥。 而是将运行命令从本地 HSM 传输此密钥(在我们的示例中,KeyIdentifier 参数使用“contosobyok”)。

在将密钥传输到 Azure Key Vault 之前,确保创建权限降低的密钥副本(步骤 4.1)以及加密密钥(步骤 4.3)时,KeyTransferRemote.exe 实用程序返回“结果:成功”。

将密钥上传到 Azure Key Vault 时,会看到显示的密钥属性,其中包括密钥 ID。 该 ID 将类似于 https://contosorms-kv.vault.azure.net/keys/contosorms-byok/aaaabbbbcccc111122223333。 记下此 URL,因为 Azure 信息保护管理员需要它告知 Azure 信息保护中的 Azure Rights Management Service 将此密钥用于其租户密钥。

然后,使用 Set-AzKeyVaultAccessPolicy cmdlet 授权 Azure Rights Management 服务主体访问密钥保管库。 所需的权限为解密、加密、解包密钥、包装密钥、验证和签名。

例如,如果为 Azure 信息保护创建的密钥保管库名为 contosorms-byok-kv,并且资源组名为 contosorms-byok-rg,请运行以下命令:

Set-AzKeyVaultAccessPolicy -VaultName "contosorms-byok-kv" -ResourceGroupName "contosorms-byok-rg" -ServicePrincipalName 00000012-0000-0000-c000-000000000000 -PermissionsToKeys decrypt,encrypt,unwrapkey,wrapkey,verify,sign,get

现在已将 HSM 密钥传输到 Azure Key Vault,即可导入 AD RMS 配置数据。

第 3 部分:将配置数据导入 Azure 信息保护

  1. Azure 信息保护管理员:在连接 Internet 的工作站上和 PowerShell 会话中,复制运行 TpdUtil 工具后删除了 SLC 密钥的新配置数据文件 (.xml)。

  2. 使用 Import-AipServiceTpd cmdlet 上传每个 .xml 文件。 例如,如果为加密模式 2 升级了 AD RMS 群集,则至少应该导入一个附加文件。

    如果要运行此 cmdlet,则需要为配置数据文件指定的密码以及在上一步中标识的密钥 URL。

    例如,使用 C:\contoso_keyless.xml 的配置数据文件和上一步中的密钥 URL 值,首先运行以下命令来存储密码:

     $TPD_Password = Read-Host -AsSecureString
    

    输入指定用于导出配置数据文件的密码。 然后运行以下命令,并确认要执行此操作:

    Import-AipServiceTpd -TpdFile "C:\contoso_keyless.xml" -ProtectionPassword $TPD_Password –KeyVaultStringUrl https://contoso-byok-kv.vault.azure.net/keys/contosorms-byok/aaaabbbbcccc111122223333 -Verbose
    

    作为此导入的一部分,SLC 密钥将导入并自动设置为已存档。

  3. 上传每个文件后,运行 Set-AipServiceKeyProperties 以指定哪个导入的密钥与 AD RMS 群集中当前活动的 SLC 密钥匹配。

  4. 使用 Disconnect-AipServiceService cmdlet 断开与 Azure Rights Management 服务的连接:

    Disconnect-AipServiceService
    

如果你稍后需要确认 Azure 信息保护租户密钥在 Azure Key Vault 中使用的密钥,请使用 Get-AipServiceKeys Azure RMS cmdlet。

现在,可以转至步骤 5. 激活 Azure Rights Management 服务