使用 Microsoft Entra ID 來驗證受控識別,以存取 Azure 服務匯流排資源

Azure 資源受控識別會在 Microsoft Entra ID 中為 Azure 服務提供自動受控識別。 您可以使用此身分識別來向任何支援 Microsoft Entra 驗證的服務 (例如,Azure 服務匯流排) 進行驗證,完全不需要程式碼中的認證。 如果您不熟悉受控識別,請參閱 Azure 資源的受控識別,再繼續閱讀本文。

以下是使用受控識別來存取服務匯流排實體的高階步驟:

  1. 為您的用戶端應用程式或環境啟用受控識別。 例如,為您的 Azure App Service 應用程式、Azure Functions 應用程式或執行應用程式的虛擬機器啟用受控識別。 以下是協助您進行此步驟的文章:

  2. 將 Azure 服務匯流排資料擁有者、Azure 服務匯流排資料傳送者或 Azure 服務匯流排資料接收者角色指派給適當範圍的受控識別 (Azure 訂用帳戶、資源群組、服務匯流排命名空間或服務匯流排佇列或主題)。 如需將角色指派給受控識別的指示,請參閱使用 Azure 入口網站指派 Azure 角色

  3. 在您的應用程式中,使用受控識別和服務匯流排命名空間的端點來聯機到命名空間。 例如,在 .NET 中,您可以使用採用 TokenCredentialfullyQualifiedNamespace (字串,例如:cotosons.servicebus.windows.net) 的 ServiceBusClient 建構函式) 參數,以使用受控識別連線到服務匯流排。 您會傳入 DefaultAzureCredential,其衍生自 TokenCredential 並使用受控識別。

    重要

    您可以停用服務匯流排命名空間的本機或 SAS 金鑰驗證,只允許透過 Microsoft Entra 驗證。 如需逐步指示,請參閱停用本機驗證

Azure 服務匯流排的 Azure 內建角色

Microsoft Entra 會透過 Azure 角色型存取控制 (Azure RBAC) 來授與受保護資源的存取權。 Azure 服務匯流排會定義一組 Azure 內建角色,其中包含用來存取服務匯流排實體的一般權限集合。 您也可以定義自訂角色以存取資料。

Azure 提供下列 Azure 內建角色,以授權存取服務匯流排命名空間:

若要在 Azure 入口網站中將角色指派給受控識別,請使用存取控制 (IAM) 頁面。 在 [服務匯流排命名空間] 頁面或 [服務匯流排佇列] 頁面或 [服務匯流排主題] 頁面上選取 [存取控制 (IAM)],以瀏覽至此頁面。 如需指派角色的逐步指示,請參閱使用 Azure 入口網站指派 Azure 角色

資源範圍

將 Azure 角色指派給受控識別之前,請先判斷受控識別應該具有的存取範圍。 最佳做法指出,最好只授與最窄的可能範圍。

下列清單說明您可以將服務匯流排資源的存取範圍設定在什麼層級 (從最小的範圍開始):

  • 佇列主題訂閱:角色指派適用於特定的服務匯流排實體。

  • 服務匯流排命名空間:角色指派的範圍為該命名空間下服務匯流排的整個拓撲,以及相關聯的取用者群組。

  • 資源群組:角色指派會套用至資源群組下的所有服務匯流排資源。

  • 訂用帳戶:角色指派會套用至訂用帳戶中所有資源群組的所有服務匯流排資源。

    注意

    請記住,Azure 角色指派最多可能需要五分鐘的時間傳播。

目前,Azure 入口網站不支援將使用者/群組/受控識別指派給主題訂用帳戶層級的服務匯流排 Azure 角色。 以下是使用 Azure CLI 命令的範例:az-role-assignment-create 能將身分識別指派給服務匯流排 Azure 角色:

az role assignment create \
    --role $service_bus_role \
    --assignee $assignee_id \
    --scope /subscriptions/$subscription_id/resourceGroups/$resource_group/providers/Microsoft.ServiceBus/namespaces/$service_bus_namespace/topics/$service_bus_topic/subscriptions/$service_bus_subscription

如需內建角色定義方式的詳細資訊,請參閱了解角色定義。 如需建立 Azure 自訂角色的相關資訊,請參閱 Azure 自訂角色

使用 SDK

在 .NET 中,ServiceBusClient 物件是使用採用完整命名空間和 TokenCredential 的建構函式來初始化。 DefaultAzureCredential 衍生自 TokenCredential,其會自動使用為應用程式設定的受控識別。 受控識別內容到服務匯流排和授權交握的流程,都是由權杖認證自動處理。 它是比使用 SAS 更簡單的模型。

var client = new ServiceBusClient('cotosons.servicebus.windows.net', new DefaultAzureCredential());

您可以使用 ServiceBusSenderServiceBusReceiverServiceBusProcessor 一般傳送和接收訊息。

如需使用受控識別來傳送和接收訊息的完整逐步指示,請參閱下列快速入門。 這些快速入門具有使用服務主體來傳送和接收訊息的程式碼,但程式代碼與使用受控識別相同。

注意

受控識別只能在 Azure 環境中、在應用程式服務、Azure VM 和擴展集上運作。 對於 .NET 應用程式,Microsoft.Azure.Services.AppAuthentication 程式庫 (由服務匯流排 NuGet 套件使用) 提供讓應用程式透過此通訊協定進行提取的功能,也能支援本機部署經驗。 該程式庫還能讓您使用來自 Visual Studio、Azure CLI 2.0 或 Active Directory 整合式驗證的使用者帳戶,在部署機器上以本機方式測試程式碼。 如需使用此程式庫的本機開發選項詳細資訊,請參閱使用 .NET 對 Azure Key Vault 進行服務對服務驗證

下一步

請參閱 GitHub上的這個 .NET Web 應用程式範例,此範例會使用受控識別來連線到服務匯流排來傳送和接收訊息。 將應用程式服務的身分識別新增至 Azure 服務匯流排資料擁有者角色。