備註
無密碼連線是跨多個 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 服務。 他們通常使用保險庫來存儲密碼並將其載入到應用程式中,並通過添加密碼輪換要求和過程來進一步降低風險。 這種方法反過來又增加了作複雜性,有時還會導致應用程式連接中斷。
無密碼連接和 Zero Trust
現在,您可以在應用程式中使用無密碼連接來連接到基於 Azure 的服務,而無需輪換密碼。 在某些情況下,您只需要配置,不需要新代碼。 Zero Trust 使用“從不信任、始終驗證和無憑據”的原則。 這意味著只有在驗證身份並授予他們訪問後端服務的許可權之前,才能通過信任機器或用戶來保護所有通信。
對於安全的無密碼連接,建議的身份驗證選項是將託管身份和 Azure 基於角色的訪問控制 (RBAC) 結合使用。 使用此方法,您不必手動跟蹤和管理託管身份的許多不同機密,因為這些任務由 Azure 在內部安全地處理。
您可以使用 Service Connector 設定 Azure 服務的無密碼連線,也可以手動設定它們。 Service Connector 可在應用程式裝載服務中啟用受控識別,例如 Azure Spring Apps、Azure App 服務 和 Azure Container Apps。 Service Connector 還使用託管身份和 Azure RBAC 透過無密碼連接配置後端服務,並使用必要的連接資訊啟動應用程式。
如果檢查配置為無密碼連接的應用程式的運行環境,則可以看到完整的連接字串。 例如,連接字串包含資料庫伺服器位址、資料庫名稱和將身份驗證委託給 Azure 身份驗證外掛程式的指令,但它不包含任何密碼或機密。
以下視頻以 Java 應用程式為例,演示了從應用到 Azure 服務的無密碼連接。 其他語言的類似報導即將推出。
DefaultAzureCredential 簡介
可以使用 Azure 識別用戶端庫通過 Microsoft Entra ID 和基於角色的訪問控制 (RBAC) 實現 DefaultAzureCredential
與 Azure 服務的無密碼連接。
這很重要
有些語言必須在程式碼中明確實作 DefaultAzureCredential
,而有些語言則透過基礎外掛程式或驅動程式在內部使用 DefaultAzureCredential
。
DefaultAzureCredential
支援多個驗證方法,並在執行階段自動判斷應該使用何者。 此方法可讓您的應用程式在不同的環境中 (本機開發或實際執行環境) 使用不同的驗證方法,而不需要實作環境特有的程式碼。
搜尋認證的順序和位置 DefaultAzureCredential
因語言而異:
例如,在本機使用 .NET 時,DefaultAzureCredential
通常會使用開發人員用來登入 Visual Studio、Azure CLI 或 Azure PowerShell 的帳戶進行驗證。 當應用程式部署至 Azure 時,DefaultAzureCredential
會自動探索並使用相關聯裝載服務的受控識別,例如 Azure App Service。 此轉移不需要變更程式碼。
備註
受控識別提供安全性身分識別來代表應用程式或服務。 該身份由 Azure 平臺管理,不需要您預置或輪換機密。 您可以在概觀文件中深入了解受控識別。
下列程式碼範例示範如何使用無密碼連線來連線至服務匯流排。 其他文件更詳細地介紹了如何為特定服務遷移到此設置。 .NET 應用可以將 的實例 DefaultAzureCredential
傳遞到服務用戶端類的構造函數中。
DefaultAzureCredential
會自動探索該環境中可用的認證。
ServiceBusClient serviceBusClient = new(
new Uri("https://<your-service-bus-namespace>.blob.core.windows.net"),
new DefaultAzureCredential());
另請參閱
有關無密碼連接的更詳細說明,請參閱開發人員指南 在多個 Azure 應用和服務之間配置無密碼連接。