教學課程:透過 Azure Key Vault 儲存和使用 Azure Cosmos DB 認證
適用於:NoSQL MongoDB Cassandra Gremlin 桌子
重要
存取 Azure Cosmos DB 的建議方法,是使用系統指派的受控識別。 如果受控識別解決方案和以憑證為基礎的解決方案都不符合您的需求,請使用本文中的 Azure Key Vault 解決方案。
如果您使用 Azure Cosmos DB 作為資料庫,可以使用 SDK、API 端點,以及主要或次要金鑰來連線至資料庫、容器和項目。
將端點 URI 和敏感性讀寫金鑰直接儲存在應用程式程式碼或組態檔內,並不是很好的做法。 在理想情況下,應從主機內的環境變數讀取這項資料。 在 Azure App Service 中,應用程式設定可讓您為 Azure Cosmos DB 帳戶插入執行階段認證,而無須由開發人員以不安全的純文字形式儲存這些認證。
Azure Key Vault 可讓您安全地儲存這些認證,同時提供 Azure App Service 對認證的受控存取等服務,使這項最佳做法更加完善。 Azure App Service 會從 Azure Key Vault 中安全地讀取您的認證,並將這些認證插入執行中的應用程式中。
透過此最佳做法,開發人員可以儲存 Azure Cosmos DB 模擬器等工具的認證,或是在開發期間免費試用 Azure Cosmos DB。 然後,作業小組可確保會在執行階段插入正確的生產設定。
在本教學課程中,您會了解如何:
- 建立 Azure 金鑰保存庫執行個體
- 將 Azure Cosmos DB 認證作為秘密新增至金鑰保存庫
- 建立並註冊 Azure App Service 資源,並且授與「讀取金鑰」權限
- 將金鑰保存庫秘密插入 App Service 資源中
注意
本教學課程和範例應用程式使用 Azure Cosmos DB for NoSQL 帳戶。 您可以使用其他 API 執行許多相同的步驟。
必要條件
- 現有的 Azure Cosmos DB for NoSQL 帳戶。
- 如果您有 Azure 訂用帳戶,請建立新的帳戶。
- 如尚未擁有 Azure 訂用帳戶,請在開始之前先建立免費帳戶。
- 或者,您可以在認可之前免費試用 Azure Cosmos DB。
- GitHub 帳戶。
開始之前:取得 Azure Cosmos DB 認證
開始之前,您應取得現有帳戶的認證。
從 Azure Cosmos DB for NoSQL 帳戶頁面,選取 [金鑰] 導覽功能表選項。
記錄 URI 和 PRIMARY KEY 欄位中的值。 本教學課程後續將用到這些值。
建立 Azure Key Vault 資源
首先,建立新的金鑰保存庫來儲存您的 API for NoSQL 認證。
登入 Azure 入口網站。
選取 [建立資源] > [安全性] > [Key Vault]。
在 [建立金鑰保存庫] 頁面上,輸入下列資訊:
設定 描述 訂用帳戶 選取要用於此 Azure Cosmos 帳戶的 Azure 訂用帳戶。 資源群組 選取資源群組,或選取 [新建],然後輸入新資源群組的唯一名稱。 金鑰保存庫名稱 輸入金鑰保存庫的全域唯一名稱。 區域 選取用來裝載 Azure Cosmos DB 帳戶的地理位置。 使用最接近使用者的位置,讓他們能以最快速度存取資料。 定價層 選取 [標準]。 將其餘設定保留為預設值。
選取 [檢閱 + 建立]。
檢閱您提供的設定,然後選取 [建立]。 建立帳戶需要幾分鐘的時間。 繼續進行之前,請等候入口網站頁面顯示 [您的部署已完成] 訊息。
在 Key Vault 新增 Azure Cosmos DB 存取金鑰
現在,將 Azure Cosmos DB 認證儲存為金鑰保存庫中的秘密。
選取 [前往資源],以移至 Azure Key Vault 資源頁面。
在 Azure Key Vault 資源頁面中,選取 [秘密] 導覽功能表選項。
從功能表中選取 [產生/匯入]。
在 [建立祕密] 頁面上,輸入下列資訊:
設定 描述 上傳選項 手動 名稱 cosmos-endpoint 祕密值 輸入您先前在本教學課程中複製的 URI。 選取 [建立] 以建立新的 cosmos-endpoint 秘密。
從功能表中再次選取 [產生/匯入]。 在 [建立祕密] 頁面上,輸入下列資訊:
設定 描述 上傳選項 手動 名稱 cosmos-readwrite-key 祕密值 輸入您先前在本教學課程中複製的主要金鑰。 選取 [建立] 以建立新的 cosmos-readwrite-key 秘密。
在秘密建立後,在 [秘密] 頁面內的秘密清單中加以檢視。
選取每個金鑰、選取最新版本,然後複製秘密識別碼。 稍後您將在本教學課程中將此識別碼用於 cosmos-endpoint 和 cosmos-readwrite-key 秘密。
提示
秘密識別碼的格式將是
https://<key-vault-name>.vault.azure.net/secrets/<secret-name>/<version-id>
。 例如,如果金鑰保存庫的名稱為 msdocs-key-vault,金鑰的名稱為 cosmos-readwrite-key,版本為 83b995e363d947999ac6cf487ae0e12e,則秘密識別碼將是https://msdocs-key-vault.vault.azure.net/secrets/cosmos-readwrite-key/83b995e363d947999ac6cf487ae0e12e
。
使用 Azure Key Vault 建立及註冊 Azure Web 應用程式
在本節中,使用 Azure Key Vault 建立新的 Azure Web 應用程式、部署範例應用程式,然後註冊 Web 應用程式的受控識別。
使用 cosmos-db-nosql-dotnet-sample-web-environment-variables 範本建立新的 GitHub 存放庫。
在 Azure 入口網站中,選取 [建立資源] > [Web] > [Web 應用程式]。
在 [建立 Web 應用程式] 頁面的 [基本] 索引標籤上,輸入下列資訊:
設定 描述 訂用帳戶 選取要用於此 Azure Cosmos 帳戶的 Azure 訂用帳戶。 資源群組 選取資源群組,或選取 [新建],然後輸入新資源群組的唯一名稱。 名稱 輸入 Web 應用程式的全域唯一名稱。 發行 選取 [程式碼]。 執行階段堆疊 選取 [.NET 6 (LTS)]。 作業系統 選取 [Windows]。 區域 選取用來裝載 Azure Cosmos DB 帳戶的地理位置。 使用最接近使用者的位置,讓他們能以最快速度存取資料。 將其餘設定保留為預設值。
選取 [下一步:部署]。
在 [部署] 索引標籤上,輸入下列資訊:
設定 描述 持續部署 選取啟用。 GitHub 帳戶 選取授權。 依照 GitHub 帳戶授權提示,為 Azure 授與讀取您新建立的 GitHub 存放庫的權限。 組織 選取新 GitHub 存放庫的組織。 存放庫 選取新 GitHub 存放庫的名稱。 分支 選取 [主要]。 選取 [檢閱 + 建立]。
檢閱您提供的設定,然後選取 [建立]。 建立帳戶需要幾分鐘的時間。 繼續進行之前,請等候入口網站頁面顯示 [您的部署已完成] 訊息。
Web 應用程式初次部署至 Web 應用程式時,可能需要額外花費幾分鐘的時間。 從 [Azure Web 應用程式資源] 頁面中選取 [瀏覽],以查看應用程式的預設狀態。
選取 [身分識別] 導覽功能表選項。
在 [身分識別] 頁面上,針對 [系統指派的受控識別] 選取 [開啟],然後選取 [儲存]。
將 Azure Key Vault 秘密插入為 Azure Web 應用程式的應用程式設定
最後,將儲存在金鑰保存庫中的秘密插入作為 Web 應用程式內的應用程式設定。 應用程式設定接著會在執行階段將認證插入應用程式中,而無須儲存純文字的認證。
返回 Azure 入口網站中的金鑰保存庫頁面。 從導覽功能表中選取 [存取原則]。
在 [存取原則] 頁面上,從功能表中選取 [建立]。
在 [建立存取原則] 頁面的 [權限] 索引標籤上,選取 [祕密權限] 區段中的 [取得] 選項。 選取 [下一步]。
在 [主體] 索引標籤上,選取您先前在本教學課程中建立的 Web 應用程式名稱。 選取 [下一步]。
注意
在此範例螢幕擷取畫面中,Web 應用程式的名稱為 msdocs-dotnet-web。
再次選取 [下一步] 以略過 [應用程式] 索引標籤。在 [檢閱 + 建立] 索引標籤上檢閱您提供的設定,然後選取 [建立]。
返回 Azure 入口網站中的 Web 應用程式頁面。 從導覽功能表中選取 [設定]。
在 [設定] 頁面上,選取 [新增應用程式設定]。 在 [新增/編輯應用程式設定] 對話方塊中,輸入下列資訊:
設定 描述 名稱 CREDENTIALS__ENDPOINT
索引鍵 在您先前在本教學課程中建立的金鑰保存庫中,取得 cosmos-endpoint 秘密的秘密識別碼。 輸入下列格式的識別碼: @Microsoft.KeyVault(SecretUri=<secret-identifier>)
。提示
請確定環境變數具有雙底線 (
__
) 值,而不是單一底線。 雙底線是 .NET 在所有平台上支援的索引鍵分隔符號。 如需詳細資訊,請參閱環境變數設定。注意
例如,如果秘密識別碼為
https://msdocs-key-vault.vault.azure.net/secrets/cosmos-endpoint/69621c59ef5b4b7294b5def118921b07
,則參考將是@Microsoft.KeyVault(SecretUri=https://msdocs-key-vault.vault.azure.net/secrets/cosmos-endpoint/69621c59ef5b4b7294b5def118921b07)
。選取 [確定] 以保存新的應用程式設定
再次選取 [新增應用程式設定]。 在 [新增/編輯應用程式設定] 對話方塊中輸入下列資訊,然後選取 [確定]:
設定 描述 名稱 CREDENTIALS__KEY
索引鍵 在您先前在本教學課程中建立的金鑰保存庫中,取得 cosmos-readwrite-key 秘密的秘密識別碼。 輸入下列格式的識別碼: @Microsoft.KeyVault(SecretUri=<secret-identifier>)
。回到 [設定] 頁面,選取 [儲存] 以更新 Web 應用程式的應用程式設定。
等候幾分鐘,讓 Web 應用程式以新的應用程式設定重新啟動。 此時,新的應用程式設定應該會指出這是金鑰保存庫參考。
從導覽功能表中選取 [概觀]。 選取 [瀏覽] 以查看已填入認證的應用程式。
下一步
- 若要設定 Azure Cosmos DB 的防火牆,請參閱防火牆支援一文。
- 若要設定虛擬網路服務端點,請參閱使用 VNet 服務端點來保護存取權一文。