設定雙重金鑰加密

Microsoft Purview 服務描述

服務說明: 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 8.0 SDK。 從 Download .NET 8.0 下載並安裝 SDK。

Visual Studio Code。 從 . 下載 Visual Studio Code。https://code.visualstudio.com/ 安裝完成後,執行 Visual Studio Code 並選擇「檢視>擴充功能」。 安裝這些擴充功能。

  • C# for Visual Studio Code

  • NuGet 套件管理器

git資源。 下載並安裝以下其中一項。

OpenSSL。 部署 DKE 後,必須安裝 OpenSSL 才能 產生測試金鑰 。 確保你是從環境變數路徑正確調用它。 例如,詳情請參閱「將安裝目錄加入 PATH」。https://www.osradar.com/install-openssl-windows/

複製 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. 在螢幕右側,選擇 「程式碼」。 你的介面版本可能會顯示 複製或下載 按鈕。 接著,在出現的下拉選單中,選擇複製圖示,將網址複製到你的剪貼簿。

    例如:

    從 GitHub 複製 Double Key Encryption 服務倉庫。

  3. 在 Visual Studio Code 中,選擇「檢視>指令面板」並選擇「Git: Clone」。 要跳到列表中的選項,開始輸入 git: clone 篩選條目,然後從下拉選單選擇。 例如:

    Visual Studio Code GIT:Clone 選項。

  4. 在文字框裡,貼上你從 Git 複製的 URL,然後選擇 Clone from GitHub

  5. 在出現的 「選擇資料夾 」對話框中,瀏覽並選擇儲存庫的位置。 選取 [開啟]

    該儲存庫以 Visual Studio Code 開啟,並在左下角顯示目前的 Git 分支。 分支應該是 線。 例如:

    Visual Studio Code 中 DKE 儲存庫顯示主分支的截圖。

  6. 如果你不在主分支,請選擇它。 在 Visual Studio Code 中,選擇分支,並從顯示的分支列表中選擇 main

    重要事項

    選擇主分支可以確保你擁有正確的檔案來建立專案。 如果你沒選對分支,部署就會失敗。

你現在已經在本地設置了 DKE 原始碼倉庫。 接著,修改你組織的 應用程式設定

修改應用程式設定

要部署 DKE 服務,您必須修改以下類型的應用程式設定:

你要修改appsettings.json檔案中的應用程式設定。 這個檔案位於你本地克隆的 DoubleKeyEncryptionService 倉庫裡,底下是 DoubleKeyEncryptionService\src\customer-key-store。 例如,在 Visual Studio Code 中,你可以像下圖所示瀏覽到檔案。

尋找DKE的appsettings.json檔案。

金鑰存取設定

選擇使用電子郵件或角色授權。 DKE 一次只支援其中一種認證方式。

  • Email授權。 允許您的組織僅根據電子郵件地址授權存取金鑰。

  • 角色授權。 允許您的組織根據 Active Directory 群組授權存取金鑰,並要求網路服務能夠查詢 LDAP。

使用 email authorization 設定 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檔案顯示電子郵件授權方式。

使用 Role authorization 設定 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> 成你的租戶編號,並確保租戶編號末尾保留斜線。 你可以透過 Azure 入口網站查看租戶屬性來找到你的租戶 ID。 例如:

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

注意事項

如果您想啟用外部 B2B 存取您的金鑰庫,也需要將這些外部租戶納入有效的發行者清單。

找到 JwtAudience. 將 json 中的佔位值 "https://dkeservice.contoso.com" 替換成你想執行 DKE 服務的機器主機名稱。

重要事項

JwtAudience 值必須完全 符合你主機的名字。

  • TestKeys:Name. 輸入你的鑰匙名稱。 例如:TestKey1
  • TestKeys:Id. 建立一個 GUID,並以數值輸入 TestKeys:ID 。 例如,DCE1CC21-FF9B-4424-8FF4-9914BD19A1BE。 你可以用像 Online GUID Generator 這樣的網站隨機生成 GUID。
  • JwtAuthorization. 換 {tenant-id} 成你的租戶識別碼。

以下 json 顯示了 appsettings.json 中租戶和金鑰設定的正確格式。 LDAPPath 設定為角色授權。

{
  "TokenValidationParameters": {
    "ValidIssuers": [
      "https://sts.windows.net/9c99431e-b513-44be-a7d9-e7b50002d4b/"
    ]
  },
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "AllowedHosts": "*",
  "JwtAudience": "https://dkeservice.contoso.com/",
  "JwtAuthorization": "https://login.microsoftonline.com/{tenant-id}/oauth2/v2.0/authorize",
  "RoleAuthorizer": {
    "LDAPPath": ""
  },
  "TestKeys": [
    {
      "Name": "TestKey1",
      "Id": "DCE1CC21-FF98-4424-8FF4-9914BD19A1BE"
    }
  ]
}

產生測試金鑰

一旦你定義好應用程式設定,就可以開始產生公開和私有測試金鑰。

要產生金鑰:

  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 檔案中除了第一行和最後一行外的所有內容複製到 appsettings.json 檔案的區塊PublicPem

  7. 在文字編輯器中,打開 privkeynopass.pem。 將 privkeynopass.pem 檔案中除了第一行和最後一行外的所有內容複製到 appsettings.json 檔案的區塊PrivatePem

  8. 移除所有空白和換行, PublicPem 涵蓋 和 PrivatePem 區段。

    重要事項

    複製此內容時,請勿刪除任何 PEM 資料。

  9. Visual Studio Code時,瀏覽Startup.cs檔案。 這個檔案位於你本地克隆的 DoubleKeyEncryptionService 倉庫裡,底下是 DoubleKeyEncryptionService\src\customer-key-store。

  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 服務倉庫中,選擇「檢視>指令調色盤」,然後在提示符輸入「build」。

  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 設定的 keystore 之前,請確保主機名稱的值與你App Service主機名稱完全一致。

部署 DKE 服務並發布金鑰儲存

對於生產部署,請將服務部署於第三方雲端或發布 至本地系統

你可能偏好其他方式來部署你的金鑰。 選擇最適合你組織的方法。

對於試點部署,你可以直接在 Azure 部署並開始。

要建立一個 Azure Web App 實例來架設你的 DKE 部署

要發佈金鑰儲存庫,請建立一個 Azure App 服務實例來承載你的 DKE 部署。 接著,將你產生的金鑰發佈到 Azure。

  1. 在瀏覽器中登入 Microsoft Azure 入口網站,然後前往 App Services> 建立>網頁應用程式

  2. 建立一個新的資源群組或選擇現有的資源群組。

  3. 為實例命名,例如 contosodke1。 這個名稱和設定檔裡的名字不符。 你為名稱提供的值也是 WebAppInstanceName。

  4. 在定價方案中,選擇允許自訂網域的大小,例如基本 B1。

  5. 對於 發佈,選擇 程式碼;對於執行 環境堆疊,選擇 .NET 8 (LTS)

  6. 選擇 評論 + 創建

例如:

建立網頁應用程式

  1. 在新建立的網頁應用程式中,點到「設定」、「自訂網域」,選擇 新增自訂網域

  2. 網域提供者中,選擇所有其他網域服務

  3. 網域中,輸入你想安裝 DKE 服務的電腦主機名稱。

重要事項

請確保主機名稱與 appsettings.json 檔案中 JwtAudience 設定所定義的名稱相同。

  1. 在公開 DNS 中,依照網域驗證區段指示的建議變更執行,並選擇 驗證

例如:

新增自訂網域。

  1. 請執行以下步驟以公開你產生的金鑰:

例如,FTP

透過 ZipDeployUI 發佈

  1. 移至https://<WebAppInstanceName>.scm.<location>.azurewebsites.net/ZipDeployUI

    例如:https://dkeservice-ctaugtfwh7d3c3c.scm.westcentralus-01.azurewebsites.net/ZipDeployUI

  2. 啟動一個 PowerShell 提示詞。

  3. 在金鑰儲存的程式碼庫中,前往 customer-key-store\src\customer-key-store 資料夾,確認該資料夾是否包含 customerkeystore.csproj 檔案。

  4. 執行: dotnet 發佈

    輸出視窗顯示發佈部署的目錄。

    例如:customer-key-store\src\customer-key-store\bin\Debug\net8.0\publish\

  5. 將發佈目錄中的所有檔案都傳送到 .zip 檔案。 建立 .zip 檔案時,請確保目錄中所有檔案都在 .zip 檔案的根級。

  6. 把你建立的 .zip 檔案拖放到你之前開啟的 ZipDeployUI 網站。

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. 「配置平台 」彈窗中,選擇 「網頁」。

  8. 重定向 URI 中,輸入你雙重金鑰加密服務的 URI。 輸入 App Service 網址,包含主機名稱和網域。

    例如:https://mydkeservicetest.com

    • 你輸入的網址必須與你部署 DKE 服務的主機名稱相符。
    • 網域必須是 已驗證的網域
    • 在所有情況下,該方案必須是 https

    確保主機名稱與你的 App Service 主機名稱完全一致。

  9. 隱性授權中,選擇 ID tokens 勾選框。

  10. 選取 [儲存] 以儲存變更。

  11. 在左側窗格,選擇「Expose an API」,在 Application ID URI 旁邊,輸入你的 App Service URL,包含主機名稱和網域,然後選擇「設定」。

  12. 仍在 Expose an API 頁面,在這個 API 區域定義的範圍 中,選擇 新增 scope。 在新範圍中:

    1. 將範圍名稱定義為 user_impersonation

    2. 選擇能同意的管理員和使用者。

    3. 定義剩餘的值。

    4. 選取 新增範圍

    5. 在頂端選擇 「儲存 」來儲存你的更改。

  13. 仍然在 Expose an API 頁面的 授權客戶端應用程式 區,選擇 新增客戶端應用程式

    在新的客戶端應用程式中:

    1. 將客戶端 ID 定義為 d3590ed6-52b3-4102-aeff-aad2292ab01c。 這個值就是 Microsoft Office 用戶端 ID,讓 Office 能取得你的金鑰儲存的存取權杖。

    2. 授權範圍中,選擇 user_impersonation 範圍。

    3. 選擇 新增應用程式

    4. 在頂端選擇 「儲存 」來儲存你的更改。

    5. 重複這些步驟,但這次將客戶端 ID 定義為 0e25d998-b19a-4080-811c-d74d60d65e42。 此值即為 Purview 資訊保護用戶端識別碼。

您的DKE服務現已註冊。 接著用 DKE 建立標籤

使用 DKE 建立敏感度標籤

在 Microsoft Purview 入口網站中,建立新的敏感性標籤,並像平常一樣套用加密。 選擇 使用雙重金鑰加密 ,並輸入你的金鑰端點網址。 你需要在 appsettings.json 檔案的「TestKeys」區塊中加入你提供的金鑰名稱。

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

在 Microsoft Purview 入口網站選擇使用雙重金鑰加密。

你新增的任何 DKE 標籤,都會在最新版本的 Microsoft 365 Apps 企業版中顯示給使用者使用。

注意事項

客戶可能需要長達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