Azure 服務的無密碼連線

備註

無密碼連線是一項涵蓋多個 Azure 服務且與程式語言無關的功能。 儘管當前文檔側重於幾種語言和服務,但我們目前正在為其他語言和服務製作其他文檔。

本文介紹了密碼的安全挑戰,並介紹了 Azure 服務的無密碼連接。

密碼和機密的安全挑戰

使用密碼和秘密金鑰時請謹慎。 切勿將他們放在不安全的地方。 許多應用程式透過使用者名稱、密碼和存取金鑰連接後端資料庫、快取、訊息和事件服務。 一旦被揭露,惡意行為者可能會利用這些憑證取得未經授權的敏感資訊,例如你為即將到來的活動所建立的銷售目錄,或必須保密的客戶資料。

由於許多原因,將密碼內嵌在應用程式本身會產生巨大的安全性風險,包括透過程式代碼存放庫進行探索。 許多開發者透過使用環境變數將此類密碼外部化,讓應用程式能從不同環境中載入密碼。 然而,這種做法僅將風險從程式碼本身轉移到執行環境。 任何取得環境存取權的人都可以竊取密碼,進而增加您的數據外泄風險。

以下程式碼範例示範如何利用儲存帳號金鑰連接 Azure 儲存體。 許多開發人員傾向於這種解決方案,因為它與他們過去使用過的選項感覺很熟悉,即使它不是一個理想的解決方案。 如果您的應用程式目前使用訪問金鑰,請考慮遷移到無密碼連接。

// Connection using secret access keys
BlobServiceClient blobServiceClient = new(
    new Uri("https://<storage-account-name>.blob.core.windows.net"),
    new StorageSharedKeyCredential("<storage-account-name>", "<your-access-key>"));

開發人員務必謹慎,切勿在不安全的位置暴露這類金鑰或秘密資訊。 許多公司都有嚴格的安全要求,可以在不向開發人員、作員或其他任何人公開密碼的情況下連接到 Azure 服務。 他們通常使用保險庫來存儲密碼並將其載入到應用程式中,並通過添加密碼輪換要求和過程來進一步降低風險。 這種方法反過來又增加了作複雜性,有時還會導致應用程式連接中斷。

無密碼連線與零信任

現在,您可以在應用程式中使用無密碼連接來連接到基於 Azure 的服務,而無需輪換密碼。 在某些情況下,您只需要配置,不需要新代碼。 零信任 使用“從不信任、始終驗證和無憑據”的原則。 此原則意味著,僅在驗證身份且授權後端服務存取權前,透過信任機器或使用者來保護所有通訊。

對於安全的無密碼連接,建議的身份驗證選項是將託管身份和 Azure 基於角色的訪問控制 (RBAC) 結合使用。 採用這種方法,你不必手動追蹤和管理許多不同的受管理身份秘密,因為 Azure 會安全地內部處理這些任務。

你可以用 Service Connector 設定無密碼連線到 Azure 服務,也可以手動設定。 Service Connector 允許應用程式托管服務如 Azure App 服務 和 Azure 容器應用程式 中的受管理身份。 Service Connector 也透過管理身份與 Azure RBAC 配置無密碼連線的後端服務,並為應用程式提供必要的連線資訊。

如果檢查配置為無密碼連接的應用程式的運行環境,則可以看到完整的連接字串。 例如,連接字串包含資料庫伺服器位址、資料庫名稱和將身份驗證委託給 Azure 身份驗證外掛程式的指令,但它不包含任何密碼或機密。

以下視頻以 Java 應用程式為例,演示了從應用到 Azure 服務的無密碼連接。 其他語言的類似報導即將推出。


DefaultAzureCredential 簡介

你可以使用 DefaultAzureCredential Azure Identity 用戶端函式庫,透過 Microsoft Entra ID 和角色基礎存取控制(RBAC)實作無密碼連線到 Azure 服務。

這很重要

有些語言要求你在程式碼中明確實作 DefaultAzureCredential ,而有些則透過底層外掛或驅動程式內部使用 DefaultAzureCredential

DefaultAzureCredential 支援多種認證方法,並自動決定執行時應使用哪種方法。 此方法可讓您的應用程式在不同的環境中 (本機開發或實際執行環境) 使用不同的驗證方法,而不需要實作環境特有的程式碼。

不同語言間,查詢憑證的順序與地點 DefaultAzureCredential 有所不同:

舉例來說,當你在本地使用 .NET 時,DefaultAzureCredential通常會用你用來登入 Visual Studio、Azure CLI 或 Azure PowerShell 的帳號來驗證。 當你將應用程式部署到 Azure 時,DefaultAzureCredential會自動發現並使用相關主機服務(例如 Azure App 服務)的管理身份。 這次轉換不需要做任何程式碼修改。

備註

受控識別提供安全性身分識別來代表應用程式或服務。 Azure 平台負責管理身份,你不需要配置或輪換秘密。 欲了解更多,請參閱 概述 文件。

以下程式碼範例示範如何利用無密碼連線連接 服務匯流排。 其他文件更詳細地介紹了如何為特定服務遷移到此設置。 .NET 應用程式可以將 DefaultAzureCredential 的執行個體傳遞給服務用戶端類別的建構函式。 DefaultAzureCredential 自動發現該環境中可用的憑證。

ServiceBusClient serviceBusClient = new(
    new Uri("https://<your-service-bus-namespace>.servicebus.windows.net"),
    new DefaultAzureCredential());

另請參閱

有關無密碼連接的更詳細說明,請參閱開發人員指南 在多個 Azure 應用和服務之間配置無密碼連接