Azure 服務匯流排支援使用 Microsoft Entra ID 來授權對服務匯流排實體 (佇列、主題、訂用帳戶或篩選器) 的要求。 使用 Microsoft Entra 識別符,您可以使用 Azure 角色型存取控制 (Azure RBAC) 將權限授與安全性主體。 安全主體可以是 Azure 資源的使用者、群組、應用程式服務主體或 管理身份。
使用 Microsoft Entra ID 搭配 Azure 服務匯流排的主要優點是您不再需要將認證儲存在程式碼中。 您可以改為從 Microsoft 身分識別平台請求一個 OAuth 2.0 存取權杖。 若認證成功,Microsoft Entra ID 會回傳一個存取權杖給應用程式。 應用程式接著可以使用存取權杖來授權對 Service Bus 資源的請求。
你可以為服務匯流排命名空間停用本地或共享存取簽章(SAS)金鑰認證,並只允許 Microsoft Entra 認證。 如需逐步指示,請參閱停用本機驗證。
概觀
當安全性主體 (使用者、群組或應用程式) 嘗試存取服務匯流排實體時,要求必須獲得授權。 使用 Microsoft Entra 身分識別存取資源時,是兩個步驟的過程:
- 安全主體的身份會被驗證,並回傳一個 OAuth 2.0 令牌。 要求令牌的資源名稱為
https://servicebus.azure.net。 - 令牌被包含在向服務匯流排服務發出的請求中,用於授權存取指定的資源。
驗證步驟要求應用程式要求在執行階段包含 OAuth 2.0 存取權杖。 如果應用程式是在 Azure 實體中執行,例如 Azure 虛擬機、虛擬機擴展集或函式應用程式,它可以使用管理身份來存取資源。 欲了解如何驗證受管理身份對服務匯流排服務提出的請求,請參閱「 使用管理身份搭配 Azure 服務匯流排」。
授權步驟需要將一個或多個 Azure 角色指派給安全主體。 Service Bus 提供 Azure 角色,包含對 Service Bus 資源的權限集合。 分配給安全主體的角色決定了主體對於服務匯流排資源的權限。 欲了解更多將 Azure 角色指派給 Azure 服務匯流排的資訊,請參閱 Azure 服務匯流排的內建角色。
對服務匯流排提出要求的原生應用程式和 Web 應用程式,也可以使用 Microsoft Entra ID 來進行授權。 本文說明如何要求存取權杖,並使用它授權對服務匯流排資源的要求。
Azure 服務匯流排的 Azure 內建角色
Microsoft Entra 會透過 Azure RBAC 來授與存取受保護資源的權限。 Azure 服務匯流排會定義一組 Azure 內建角色,其中包含用來存取服務匯流排實體的一般權限集合。 您也可以定義自訂角色以存取資料。
將 Azure 角色指派給 Microsoft Entra 安全性主體時,Azure 會將那些資源的存取權授與該安全性主體。 存取權限可依訂閱、資源群組、服務匯流排命名空間或實體(佇列、主題或訂閱)來設定範圍。 Microsoft Entra 安全性主體可以是使用者、群組或應用程式服務主體,或是適用於 Azure 資源的受控識別。
對於 Azure Service Bus,Azure RBAC 模型透過 Azure 入口網站和 Azure 資源管理 API 來保護命名空間及所有相關資源的管理。 Azure 提供下列內建角色,以授權存取服務匯流排命名空間:
- Azure 服務匯流排資料擁有者:使用此角色來授與服務匯流排資源的完整存取權。
- Azure 服務匯流排資料發送器:使用此角色賦予服務匯流排命名空間及其實體的發送存取權限。
- Azure 服務匯流排資料接收者:使用此角色授與服務匯流排命名空間及其實體的接收存取權。
資源範圍
將 Azure 角色指派給安全性主體之前,請先決定安全性主體應該具備的存取範圍。 最佳做法指出,最好只授與最窄的可能範圍。
下列清單說明您可以將服務匯流排資源的存取範圍設定在什麼層級 (從最小的範圍開始):
佇列、主題或訂閱:角色指派適用於特定的服務總線實體。 目前,Azure 入口網站不支援在主題訂閱層級為 Service Bus Azure 角色指派使用者、群組或受管理身份。
服務匯流排命名空間:角色指派的範圍為該命名空間下服務匯流排的整個拓撲,以及相關聯的佇列或主題訂用帳戶。
資源群組:角色指派會套用至資源群組下的所有服務匯流排資源。
Azure 訂閱:角色指派適用於訂閱中所有資源群組中的所有服務總線資源。
請記住,Azure 角色指派最多可能需要五分鐘的時間來傳播。
欲了解更多內建角色定義的資訊,請參閱 「了解 Azure 角色定義」。 如需建立 Azure 自訂角色的相關資訊,請參閱 Azure 自訂角色。
從應用程式進行驗證
使用 Microsoft Entra ID 搭配服務匯流排的主要優點是您的認證不再需要儲存在程式碼中。 您可以改為從 Microsoft 身分識別平台請求一個 OAuth 2.0 存取權杖。
Microsoft Entra 可驗證執行應用程式的安全性主體 (使用者、群組、應用程式服務主體,或是適用於 Azure 資源的受控識別)。 若認證成功,Microsoft Entra ID 會將存取權杖回傳給應用程式。 應用程式接著可以使用存取權杖授權向 Service Bus 發送請求。
以下章節說明如何配置您的原生應用程式或網頁應用程式以使用 Microsoft 身份平台 2.0 進行認證。 欲了解更多平台資訊,請參閱「 什麼是 Microsoft 身份平台?」。
關於 OAuth 2.0 程式碼授權流程的概述,請參閱 Microsoft 身份平台與 OAuth 2.0 授權碼流程。
將您的應用程式註冊在 Microsoft Entra 租戶中
使用 Microsoft Entra ID 授權服務匯流排實體的第一步,是先從 Azure 入口網站,向 Microsoft Entra 租用戶註冊您的用戶端應用程式。 當您註冊客戶端應用程式時,您會向 Active Directory 提供該應用程式的相關資訊。 Microsoft Entra ID 接著提供一個用戶端 ID(也稱為應用程式 ID),你可以用它來將應用程式與 Microsoft Entra 執行環境關聯起來。 若要深入了解用戶端識別碼,請參閱 Microsoft Entra ID 中的應用程式和服務主體物件。
要以 Microsoft Entra ID 註冊您的應用程式,請依照 「在 Microsoft Entra ID 註冊應用程式」中的步驟操作。
注意
如果你將應用程式註冊為原生應用程式,你可以指定任何有效的 URI 作為重定向 URI。 對於原生應用程式來說,這個值不一定要是真實的 URL。 對於 Web 應用程式,重新導向 URI 必須是有效 URI,因為它會指定提供權杖的 URL。
註冊應用程式後,應用程式 (客戶端)ID 和 目錄(租戶)ID 會出現在 設定中。 請記下這些價值觀。 你需要它們來執行應用程式。
建立用戶端密碼
應用程式需要客戶端密鑰,才能在要求權杖時證明身分。 要加入客戶端秘密,請依照以下步驟操作:
如果你還沒在應用程式註冊頁面,請在 Azure 入口網站中前往該頁面。
在左側選單中,選擇「憑證與秘密」。
在 [用戶端秘密] 下,選取 [新增用戶端秘密] 以建立新的密碼。
提供對此秘密的描述,選擇到期的時間間隔,然後點選新增。
請立即將新祕密的值複製到安全的位置。 完整數值只會出現一次。
新增服務匯流排 API 權限
如果你的應用程式是主控台應用程式,你必須註冊一個原生應用程式,並將 的 Microsoft.ServiceBus API 權限加入所需權限集合。
原生應用程式也需要在 Microsoft Entra ID 中加入 重定向 URI ,作為識別碼。 URI 不一定要是網路目的地。 在此範例中使用 https://servicebus.microsoft.com,因為程式碼範例已使用該 URI。
透過 Azure 入口網站指派 Azure 角色
將其中一個 服務匯流排角色 指派給應用程式的服務主體,位於所需的範圍(實體、服務匯流排命名空間、資源群組或 Azure 訂閱)。 如需詳細步驟,請參閱使用 Azure 入口網站指派 Azure 角色。
定義角色及其範圍後,你可以用 GitHub 上的範例測試這個行為。
服務匯流排用戶端的認證
註冊應用程式並授權它在 Azure Service Bus 中傳送/接收資料後,你可以用客戶端秘密憑證來認證客戶端。 此認證讓您能對 Azure Service Bus 提出請求。
有關支援取得令牌的情境清單,請參閱 Microsoft 認證庫(MSAL)中 .NET GitHub 倉庫的情境區塊。
透過使用最新的 Azure.Messaging.ServiceBus 函式庫,你可以用 ClientSecretCredential 認證 ServiceBusClient,該憑證在 Azure.Identity 函式庫中定義。
TokenCredential credential = new ClientSecretCredential("<tenant_id>", "<client_id>", "<client_secret>");
var client = new ServiceBusClient("<fully_qualified_namespace>", credential);
如果你使用的是較舊的 .NET 套件,請參考 GitHub 上的 Azure RBAC 服務總線範例。
相關內容
如需 Azure RBAC 的詳細資訊,請參閱什麼是 Azure 角色型存取控制 (Azure RBAC)?
想了解如何使用 Azure PowerShell、Azure CLI 或 REST API 來指派和管理 Azure 角色指派,請參閱以下文章:
欲了解更多服務總線訊息,請參閱以下文章: