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 在內部安全地處理。

您可以使用服務 連線 或手動設定 Azure 服務的無密碼連線。 服務 連線 or 可在 Azure Spring Apps、Azure App 服務 和 Azure Container Apps 等應用程式裝載服務中啟用受控識別。 服務 連線 or 也會使用受控識別和 Azure RBAC 設定無密碼連線的後端服務,並使用必要的連線資訊來凍結應用程式。

如果您檢查針對無密碼連線設定的應用程式執行環境,您可以看到完整的 連接字串。 例如,連接字串 會攜帶資料庫伺服器位址、資料庫名稱,以及將驗證委派給 Azure 驗證外掛程式的指示,但不包含任何密碼或秘密。

下列影片說明如何使用 Java 應用程式作為範例,從應用程式到 Azure 服務的無密碼連線。 其他語言的類似涵蓋範圍即將來臨。


DefaultAzureCredential 簡介

您可以從 Azure 身分識別用戶端連結庫使用 DefaultAzureCredential ,透過 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>.blob.core.windows.net"),
    new DefaultAzureCredential());

另請參閱

如需無密碼連線的更詳細說明,請參閱開發人員指南 設定多個 Azure 應用程式和服務之間的無密碼連線。