设置双密钥加密

适用于:Microsoft Purview 双密钥加密、Microsoft PurviewAzure 信息保护

服务说明: Microsoft Purview

按照这些常规步骤设置 DKE。 完成这些步骤后,最终用户可以使用双密钥加密保护高度敏感数据。

  1. 按照本文中所述部署 DKE 服务。 确保环境满足最低系统和许可要求。 有关详细信息,请参阅 DKE 的系统和许可要求

  2. 创建具有双密钥加密的标签。 在Microsoft Purview 合规门户中,导航到“信息保护”,并使用双密钥加密创建新标签。 请参阅 使用敏感度标签来限制对内容的访问以应用加密

  3. 在客户端设备上配置注册表,以便可以使用双密钥加密标签。 接下来,通过从 Microsoft Office 的“敏感度”功能区选择“双密钥加密”标签来保护数据。

可通过多种方式完成某些步骤来部署双密钥加密。 本文提供详细说明,以便经验不足的管理员成功部署服务。 如果你愿意这样做,可以选择使用自己的方法。

部署 DKE

本文和部署视频使用 Azure 作为 DKE 服务的部署目标。 如果要部署到其他位置,则需要提供自己的值。

按照这些常规步骤为组织设置双密钥加密。

  1. 安装 DKE 服务的软件先决条件
  2. 克隆双密钥加密 GitHub 存储库
  3. 修改应用程序设置
  4. 生成测试密钥
  5. 生成项目
  6. 部署 DKE 服务并发布密钥存储
  7. 验证部署
  8. 注册密钥存储
  9. 使用 DKE 创建敏感度标签
  10. 将受保护的文件从 HYOK 标签迁移到 DKE 标签

完成后,可以使用 DKE 加密文档和文件。 有关信息,请参阅 在 Office 中将敏感度标签应用于文件和电子邮件

安装 DKE 服务的软件先决条件

在要安装 DKE 服务的计算机上安装这些必备组件。

.NET Core 7.0 SDK。 从下载 .NET Core 7.0 下载并安装 SDK。

Visual Studio Code。 从 https://code.visualstudio.com/下载Visual Studio Code。 安装后,运行Visual Studio Code并选择“查看>扩展”。 安装这些扩展。

  • 用于Visual Studio Code的 C#

  • NuGet 包管理器

Git 资源。 下载并安装以下项之一。

Openssl 部署 DKE 后,必须安装 OpenSSL 才能 生成测试密钥 。 请确保从环境变量路径正确调用它。 例如,有关详细信息,请参阅中的 https://www.osradar.com/install-openssl-windows/ “将安装目录添加到 PATH”。

克隆 DKE GitHub 存储库

Microsoft 在 GitHub 存储库中提供 DKE 源文件。 克隆存储库以在本地生成项目供组织使用。 DKE GitHub 存储库位于 https://github.com/Azure-Samples/DoubleKeyEncryptionService

以下说明适用于缺乏经验的 git 或Visual Studio Code用户:

  1. 在浏览器中,转到: https://github.com/Azure-Samples/DoubleKeyEncryptionService

  2. 在屏幕右侧,选择“ 代码”。 你的 UI 版本可能会显示 “克隆”或“下载 ”按钮。 然后,在显示的下拉列表中,选择复制图标,将 URL 复制到剪贴板。

    例如:

    从 GitHub 克隆双密钥加密服务存储库。

  3. 在“Visual Studio Code”中,选择“查看>命令面板”,然后选择“Git:克隆”。 若要跳转到列表中的 选项,请开始键入 git: clone 以筛选条目,然后从下拉列表中选择它。 例如:

    Visual Studio Code GIT:Clone 选项。

  4. 在文本框中,粘贴从 Git 复制的 URL,然后选择“ 从 GitHub 克隆”。

  5. 在显示的 “选择文件夹 ”对话框中,浏览到并选择要存储存储库的位置。 选择 “打开”

    存储库将在 Visual Studio Code 打开,并在左下角显示当前 Git 分支。 分支应main。 例如:

    Visual Studio Code中 DKE 存储库的屏幕截图,其中显示了main分支。

  6. 如果你不在 main 分支上,请选择它。 在“Visual Studio Code”中,选择分支,并从显示的分支列表中选择“main”。

    重要

    选择main分支可确保生成项目的正确文件。 如果不选择正确的分支,部署将失败。

现在已在本地设置了 DKE 源存储库。 接下来, 修改组织的应用程序设置

修改应用程序设置

若要部署 DKE 服务,必须修改以下类型的应用程序设置:

在 appsettings.json 文件中修改应用程序设置。 此文件位于在 DoubleKeyEncryptionService\src\customer-key-store 下本地克隆的 DoubleKeyEncryptionService 存储库中。 例如,在 Visual Studio Code 中,可以浏览到文件,如下图所示。

查找 DKE 的appsettings.json文件。

密钥访问设置

选择是使用电子邮件授权还是角色授权。 DKE 一次仅支持其中一种身份验证方法。

  • Email授权。 允许组织仅基于电子邮件地址授权访问密钥。

  • 角色授权。 允许组织基于 Active Directory 组授权访问密钥,并要求 Web 服务可以查询 LDAP。

使用电子邮件授权设置 DKE 的密钥访问设置
  1. 打开 appsettings.json 文件并找到设置 AuthorizedEmailAddress

  2. 添加要授权的一个或多个电子邮件地址。 使用双引号和逗号分隔多个电子邮件地址。 例如:

    "AuthorizedEmailAddress": ["email1@company.com", "email2@company.com ", "email3@company.com"]
    
  3. LDAPPath找到 设置并删除双引号之间的文本If you use role authorization (AuthorizedRoles) then this is the LDAP path.。 保留双引号。 完成后,设置应如下所示。

    "LDAPPath": ""
    
  4. 找到设置 AuthorizedRoles 并删除整行。

此图显示了已正确设置电子邮件授权格式 的appsettings.json 文件。

显示电子邮件授权方法的appsettings.json文件。

使用角色授权设置 DKE 的密钥访问设置
  1. 打开 appsettings.json 文件并找到设置 AuthorizedRoles

  2. 添加要授权的 Active Directory 组名称。 使用双引号和逗号分隔多个组名称。 例如:

    "AuthorizedRoles": ["group1", "group2", "group3"]
    
  3. LDAPPath找到 设置并添加 Active Directory 域。 例如:

    "LDAPPath": "contoso.com"
    
  4. 找到设置 AuthorizedEmailAddress 并删除整行。

此图显示了已正确设置角色授权格式 的appsettings.json 文件。

appsettings.json显示角色授权方法的文件。

租户和密钥设置

DKE 租户和密钥设置位于 appsettings.json 文件中。

配置 DKE 的租户和密钥设置
  1. 打开 appsettings.json 文件。

  2. 找到 设置, ValidIssuers 并将 替换为 <tenantid> 租户 ID。 可以通过转到Azure 门户并查看租户属性来查找租户 ID。 例如:

    "ValidIssuers": [
      "https://sts.windows.net/9c99431e-b513-44be-a7d9-e7b500002d4b/"
    ]
    

注意

如果要启用对密钥存储的外部 B2B 访问,还需要将这些外部租户包含在有效颁发者列表中。

JwtAudience找到 。 将 替换为 <yourhostname> 要在其中运行 DKE 服务的计算机的主机名。 例如:"https://dkeservice.contoso.com"

重要

的值 JwtAudience 必须与主机的名称 完全匹配。

  • TestKeys:Name. 输入密钥的名称。 例如:TestKey1
  • TestKeys:Id. 创建 GUID 并将其输入为 TestKeys:ID 值。 例如,DCE1CC21-FF9B-4424-8FF4-9914BD19A1BE。 可以使用 联机 GUID 生成器 等网站随机生成 GUID。

此图显示了 appsettings.json 中租户和密钥设置的正确格式。 LDAPPath 为角色授权配置。

在 appsettings.json 文件中显示 DKE 的正确租户和密钥设置。

生成测试密钥

定义应用程序设置后,即可生成公共和专用测试密钥。

若要生成密钥,请执行以下操作:

  1. 在 Windows“开始”菜单中,运行 OpenSSL 命令提示符。

  2. 更改为要保存测试密钥的文件夹。 通过完成此任务中的步骤创建的文件存储在同一文件夹中。

  3. 生成新的测试密钥。

    openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365
    
  4. 生成私钥。

    如果安装了 OpenSSL 版本 3 或更高版本,请运行以下命令:

    openssl rsa -in key.pem -out privkeynopass.pem -outform PEM -traditional
    

    否则,请运行以下命令:

    openssl rsa -in key.pem -out privkeynopass.pem -outform PEM
    
  5. 生成公钥。

    openssl rsa -in key.pem -pubout > pubkeyonly.pem
    
  6. 在文本编辑器中,打开 pubkeyonly.pem。 将 pubkeyonly.pem 文件中的所有内容(第一行和最后一行 PublicPem 除外)复制到 appsettings.json 文件的 部分。

  7. 在文本编辑器中,打开 privkeynopass.pem。 将 privkeynopass.pem 文件中的所有内容(第一行和最后一行 PrivatePem 除外)复制到 appsettings.json 文件的 节中。

  8. 删除 和 PrivatePem 节中的所有PublicPem空格和换行符。

    重要

    复制此内容时,请勿删除任何 PEM 数据。

  9. 在 Visual Studio Code 中,浏览到 Startup.cs 文件。 此文件位于在 DoubleKeyEncryptionService\src\customer-key-store 下本地克隆的 DoubleKeyEncryptionService 存储库中。

  10. 查找以下行:

        #if USE_TEST_KEYS
        #error !!!!!!!!!!!!!!!!!!!!!! Use of test keys is only supported for testing,
        DO NOT USE FOR PRODUCTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        services.AddSingleton<ippw.IKeyStore, ippw.TestKeyStore>();
        #endif
    
  11. 将这些行替换为以下文本:

    services.AddSingleton<ippw.IKeyStore, ippw.TestKeyStore>();
    

    最终结果应如下所示。

    公共预览版startup.cs文件。

现在,你已准备好 生成 DKE 项目

生成项目

使用以下说明在本地生成 DKE 项目:

  1. 在 Visual Studio Code的 DKE 服务存储库中,选择“查看>命令面板”,然后在提示符下键入“生成”。

  2. 从列表中选择 “任务:运行生成任务”。

    如果未找到生成任务,请选择“ 配置生成任务 ”并为 .NET core 创建一个,如下所示。

    为 .NET 配置缺少的生成任务。

    1. 选择 “从模板创建tasks.json”。

      从 DKE 模板创建tasks.json文件。

    2. 从模板类型列表中,选择“ .NET Core”。

      为 DKE 选择正确的模板。

    3. 在生成部分中,找到 customerkeystore.csproj 文件的路径。 如果不存在,请添加以下行:

      "${workspaceFolder}/src/customer-key-store/customerkeystore.csproj",
      
    4. 再次运行生成。

  3. 验证输出窗口中是否没有红色错误。

    如果出现红色错误,检查控制台输出。 确保正确完成了前面的所有步骤,并且存在正确的生成版本。

设置现已完成。 在发布密钥存储之前,在 appsettings.json 中,对于 JwtAudience 设置,请确保主机名的值与App 服务主机名完全匹配。

部署 DKE 服务并发布密钥存储

对于生产部署,请在第三方云中部署服务或 发布到本地系统

你可能更倾向于使用其他方法来部署密钥。 选择最适合组织的方法。

对于试点部署,可以在 Azure 中部署并立即开始。

创建用于托管 DKE 部署的 Azure Web 应用实例

若要发布密钥存储,请创建Azure 应用服务实例来托管 DKE 部署。 接下来,将生成的密钥发布到 Azure。

  1. 在浏览器中,登录到 Microsoft Azure 门户,然后转到“应用服务>添加”。

  2. 选择订阅和资源组并定义实例详细信息。

    • 输入要安装 DKE 服务的计算机的主机名。 请确保它与为 appsettings.json 文件中的 JwtAudience 设置定义的名称相同。 为名称提供的值也是 WebAppInstanceName。

    • 对于 “发布”,请选择“ 代码”,对于 “运行时堆栈”,请选择“ .NET Core 3.1”。

    例如:

    添加App 服务。

  3. 在页面底部,选择“ 查看 + 创建”,然后选择“ 添加”。

  4. 执行以下操作之一来发布生成的密钥:

通过 ZipDeployUI 发布

  1. 转到 https://<WebAppInstanceName>.scm.azurewebsites.net/ZipDeployUI

    例如:https://dkeservice.contoso.scm.azurewebsites.net/ZipDeployUI

  2. 在密钥存储的代码库中,转到 customer-key-store\src\customer-key-store 文件夹,并验证此文件夹是否包含 customerkeystore.csproj 文件。

  3. 运行: dotnet publish

    输出窗口显示部署发布的目录。

    例如:customer-key-store\src\customer-key-store\bin\Debug\netcoreapp3.1\publish\

  4. 将发布目录中的所有文件发送到 .zip 文件。 创建 .zip 文件时,请确保目录中的所有文件都位于 .zip 文件的根级别。

  5. 将创建的 .zip 文件拖放到之前打开的 ZipDeployUI 站点。 例如:https://dkeservice.scm.azurewebsites.net/ZipDeployUI

DKE 已部署,你可以浏览到创建的测试密钥。 继续本文中的 验证部署

通过 FTP 发布

  1. 连接到之前创建的App 服务。

    在浏览器中,转到:Azure 门户>App 服务>部署中心>手动部署>FTP>仪表板

  2. 将显示的连接字符串复制到本地文件。 使用这些字符串连接到 Web App 服务并通过 FTP 上传文件。

    例如:

    从 FTP 仪表板复制连接字符串。

  3. 在密钥存储的代码库中,转到 customer-key-store\src\customer-key-store 目录

  4. 验证此目录是否包含 customerkeystore.csproj 文件。

  5. 运行: dotnet publish

    输出包含部署发布的目录。

    例如:customer-key-store\src\customer-key-store\bin\Debug\netcoreapp3.1\publish\

  6. 将发布目录中的所有文件发送到 zip 文件。 创建 .zip 文件时,请确保目录中的所有文件都位于 .zip 文件的根级别。

  7. 从 FTP 客户端,使用复制的连接信息连接到App 服务。 将上一步中创建的 .zip 文件上传到 Web 应用的根目录。

DKE 已部署,你可以浏览到创建的测试密钥。 接下来, 验证部署

验证部署

使用本文中所述的方法之一部署 DKE 后,请验证部署和密钥存储设置。

运行:

src\customer-key-store\scripts\key_store_tester.ps1 dkeserviceurl/mykey

例如:

key_store_tester.ps1 https://dkeservice.contoso.com/TestKey1

确保输出中未显示任何错误。 准备就绪后, 注册密钥存储

键名称区分大小写。 输入出现在 appsettings.json 文件中的密钥名称。

注册密钥存储

通过以下步骤,可以注册 DKE 服务。 在开始创建标签之前,注册 DKE 服务是部署 DKE 的最后一步。

注册 DKE 服务:

  1. 在浏览器中,打开 Microsoft Azure 门户,然后转到“所有服务>标识>应用注册”。

  2. 选择“ 新建注册”,并输入有意义的名称。

  3. 从显示的选项中选择帐户类型。

    例如:

    新建应用注册。

  4. 在页面底部,选择“ 注册 ”以创建新的应用注册。

  5. 在新的应用注册中,在左窗格中的 “管理”下,选择“ 身份验证”。

  6. 选择添加平台

  7. “配置平台 ”弹出窗口中,选择“ Web”。

  8. “重定向 URI”下,输入双密钥加密服务的 URI。 输入App 服务 URL,包括主机名和域。

    例如:https://mydkeservicetest.com

    • 输入的 URL 必须与部署 DKE 服务的主机名匹配。
    • 域必须是 已验证的域
    • 在所有情况下,方案都必须是 https

    确保主机名与App 服务主机名完全匹配。

  9. “隐式授予”下,选中“ ID 令牌 ”复选框。

  10. 选择保存以保存所做的更改。

  11. 在左窗格中,选择“应用程序 ID URI”旁边的“公开 API”,输入App 服务 URL(包括主机名和域),然后选择“设置”。

  12. 仍在 “公开 API ”页上的“ 此 API 定义的作用域 ”区域中,选择“ 添加范围”。 在新范围内:

    1. 将范围名称定义为 user_impersonation

    2. 选择可以同意的管理员和用户。

    3. 定义所需的任何剩余值。

    4. 选择“添加作用域”。

    5. 选择顶部的“ 保存” 以保存所做的更改。

  13. 仍在 “公开 API ”页上的“ 授权客户端应用程序 ”区域中,选择“ 添加客户端应用程序”。

    在新客户端应用程序中:

    1. 将客户端 ID 定义为 d3590ed6-52b3-4102-aeff-aad2292ab01c。 此值是 Microsoft Office 客户端 ID,使 Office 能够获取密钥存储的访问令牌。

    2. “授权范围”下,选择 user_impersonation 范围。

    3. 选择“添加应用程序”

    4. 选择顶部的“ 保存” 以保存所做的更改。

    5. 重复这些步骤,但这次将客户端 ID 定义为 c00e9d32-3c8d-4a7d-832b-029040e7db99。 此值是信息保护客户端 ID。

DKE 服务现已注册。 继续使用 DKE 创建标签

使用 DKE 创建敏感度标签

在Microsoft Purview 合规门户中,创建新的敏感度标签,并像其他方式一样应用加密。 选择“ 使用双密钥加密 ”,并输入密钥的终结点 URL。 需要在 URL 中包含在 appsettings.json 文件的“TestKeys”部分中提供的密钥名称。

例如:https://testingdke1.azurewebsites.net/KEYNAME

在Microsoft Purview 合规门户中选择“使用双密钥加密”。

添加的任何 DKE 标签都会在最新版本的 Microsoft 365 企业应用版 中为用户显示。

注意

客户端可能需要长达 24 小时才能使用新标签进行刷新。

将受保护的文件从 HYOK 标签迁移到 DKE 标签

如果需要,完成 DKE 设置后,可以将使用 HYOK 标签保护的内容迁移到 DKE 标签。 若要迁移,请使用Microsoft Purview 信息保护扫描程序。 若要开始使用扫描程序,请参阅 了解信息保护扫描程序

如果不迁移内容,HYOK 保护的内容将不受影响。

其他部署选项

我们意识到,对于高度管控行业的某些客户来说,这种使用基于软件的密钥的标准参考实现可能不足以满足其增强的合规性义务和需求。 我们与第三方硬件安全模块 (HSM) 供应商合作,以支持 DKE 服务中增强的密钥管理选项,包括:

请直接与这些供应商联系,获取有关其市场内 DKE HSM 解决方案的详细信息和指导。

设置客户端以应用 DKE 敏感度标签

在每个客户端设备上,完成此任务。

  1. 确保在每个客户端上定义了以下注册表值。 创建尚不存在的注册表项:
[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\MSIPC\flighting]
"DoubleKeyProtection"=dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSIPC\flighting]
"DoubleKeyProtection"=dword:00000001