Microsoft Entra 標識符搭配 Azure Key Vault 使用時,提供強固且安全的方法來向需要存取密鑰或認證的 Azure 服務和第三方平臺驗證應用程式。 此組合不需要在應用程式程式代碼中硬式編碼秘密,而是依賴受控識別、角色型訪問控制 (RBAC),以及透過 Key Vault 進行集中式秘密管理。 這種方法可簡化身分識別管理,並增強雲端環境中的安全性狀態。
本逐步解說會透過 GitHub 存放庫中提供的實用範例探索這些驗證機制: github.com/Azure-Samples/python-integrated-authentication。
此範例示範 Python 應用程式如何:
使用 DefaultAzureCredential 向 Azure 進行驗證
存取 Azure Key Vault 秘密而不儲存認證
與 Azure 記憶體、Cosmos DB 等其他 Azure 服務安全地通訊
本文是系列文章的一部分,提供使用 Azure Python SDK azure-identity 函式庫,透過 Microsoft Entra ID、Azure Key Vault 和 Azure 佇列儲存體,對 Python 應用程式進行身份驗證的詳細逐步解說。
第 1 部分:背景
雖然許多 Azure 服務完全依賴角色型存取控制 (RBAC),而其他服務則需要透過秘密或密鑰進行存取。 此類服務包括 Azure 儲存、資料庫、Foundry Tools、Key Vault 及事件中心
建置與這些服務互動的雲端應用程式時,開發人員可以使用 Azure 入口網站、CLI 或 PowerShell 來產生和設定服務特定的存取密鑰。 這些金鑰會系結至特定的存取原則,以防止未經授權的存取。 不過,此模型需要您的應用程式明確地管理密鑰,並分別向每個服務進行驗證,這是一個既乏味又容易出錯的程式。
將秘密直接內嵌在程式碼中,或將它們儲存在開發人員機器上,可能會暴露在:
- 源碼管理
- 不安全的本地環境
- 意外生成的紀錄或配置匯出
Azure 提供兩項金鑰服務來改善安全性和簡化驗證:
- Azure Key Vault Azure Key Vault 為秘密提供安全的雲端式存放區,包括存取密鑰、連接字串和憑證。 應用程式只會在運行時間從 Key Vault 擷取秘密,以避免在原始程式碼或組態檔中公開敏感數據。
- 透過 Microsoft Entra 受控識別,您的應用程式可以使用Microsoft Entra標識符進行一次驗證。 您可以從該處存取其他 Azure 服務,包括 Key Vault,而不需要直接管理認證。
此方法提供:
- 沒有認證程式代碼 (原始檔控制中沒有秘密)
- 與 Azure 服務無縫整合
- 環境一致性:相同的程序代碼會在本機和雲端中執行,且設定最少
本操作指南示範如何在相同的應用程式中使用 Microsoft Entra 受管理的身分和 Key Vault。 藉由同時使用Microsoft Entra ID 和 Key Vault,您的應用程式永遠不需要向個別 Azure 服務驗證自己,而且可以輕鬆地安全地存取第三方服務所需的任何密鑰。
這很重要
本文使用通用的泛型詞彙「金鑰」來參考 Azure Key Vault 中儲存為「秘密」的內容,例如 REST API 的存取密鑰。 此使用方式不應與 Key Vault 的密碼 編譯密鑰管理 混淆,這是與 Key Vault 秘密不同的功能。
範例雲端應用程式案例
若要更深入地瞭解 Azure 的驗證程式,請考慮下列案例:Flask Web 應用程式會部署到 Azure App Service。 它會公開公用、未經驗證的 API 端點,以傳回 JSON 數據以回應 HTTP 要求。
為了產生其回應,API 會叫用需要存取密鑰的第三方 API。 應用程式會使用 Microsoft Entra 受控識別,從 Azure Key Vault 安全地從運行時間擷取密鑰,而不是將此金鑰儲存在程式代碼或組態檔中。
在將回應傳回給用戶端之前,應用程式會將訊息寫入至 Azure 記憶體佇列以進行異步處理。 雖然下游處理不是此案例的焦點,但訊息可能代表工作、記錄或訊號。
備註
雖然公用 API 端點通常受到自己的存取金鑰或驗證機制保護,但本逐步解說假設端點已開啟且未經驗證。
此簡化有助於將應用程式的內部驗證需求,如存取 Azure Key Vault 和 Azure 儲存體,與外部客戶端相關的任何驗證問題隔離開來。
此案例僅著重於應用程式的行為,且不會示範或牽涉到向端點進行驗證的外部呼叫端。