Azure 事件中樞的受控識別驗證

受管理身份是 Microsoft Entra ID 中由 Azure 代為管理的身份,因此應用程式可以在不儲存任何憑證的情況下,驗證支援 Microsoft Entra 認證的服務。 Azure 事件中樞 支援 Microsoft Entra 認證,並以管理身份管理 Azure 資源,讓在 Azure 中運行的應用程式能直接連接到 Event Hubs,而不必在程式碼或設定中嵌入連線字串或存取金鑰。

當你使用管理身份搭配 Microsoft Entra 認證時,運行於 Azure 虛擬機器、Azure Functions、Azure App 服務 和 虛擬機器擴展集 等服務中的應用程式可以使用 Azure 自動配置與輪替的憑證存取事件中心資料。 此方法消除了金鑰外洩的風險,並降低憑證管理的營運負擔。

如需逐步操作範例,請參閱 使用受控識別從虛擬機器存取 Azure 事件中樞。

管理身份驗證的運作方式

透過管理身份存取事件中心資源是一個兩步驟流程:

  • 認證:受管理身份向 Microsoft Entra ID 請求 OAuth 2.0 令牌。 Azure 會根據程式碼執行的運算環境自動提供身份,因此應用程式中不會儲存或傳遞任何秘密。
  • 授權:憑證會呈現給事件中心服務,該服務會根據分配給該身份的 Azure 角色基礎存取控制(RBAC)角色授予存取權限。

關於認證與授權流程的完整說明,請參見授權使用 Microsoft Entra ID 授權存取 Azure 事件中樞 資源。

受控識別類型

Event Hubs 同時處理兩種受管理身份:

  • 系統指派管理身份:直接在 Azure 資源上啟用,例如虛擬機器或 App Service 應用程式。 其生命週期與該資源綁定,只有該資源能使用該資源來請求標記。
  • 使用者指派的管理身份:作為獨立的 Azure 資源建立,並指派給一個或多個 Azure 資源,讓多個工作負載共享同一身份。

欲了解更多關於這兩種類型及何時選擇,請參閱 「管理型身份類型」。 關於支援受管理身份的服務清單,請參見支援 Azure 資源管理身份的服務。

Azure 事件中樞的內建角色

啟用管理身份後,指派一個 Azure 內建角色,定義其對事件中心資料的權限。 Azure 提供以下內建角色,用於授權使用 Microsoft Entra ID 存取 Event Hubs 資料:

角色 Description
Azure 事件中樞資料擁有者 授予對活動中心資源的完整存取權限。
Azure 事件中樞數據傳送者 授與將事件傳送至 Event Hubs 資源的權限。
Azure 事件中樞 資料接收器 授與接收來自 Event Hubs 資源之事件的權限。

你可以在消費者群組、活動中心、命名空間、資源群組或訂閱等層級指派角色。 授予符合申請需求的最狹窄範圍。 欲了解完整的範圍與角色詳情,請參閱 Azure 內建角色 for Azure 事件中樞。 要在Azure入口網站指派角色,請參見使用Azure入口網站指派Azure角色。

代幣過期行為

當你從 Event Hubs RBAC 角色中移除受管理身份時,該變更不會立即生效於執行中的應用程式。 如果原始服務或應用程式沒有重新啟動,它可以繼續向事件中心發送或接收事件,直到令牌到期為止。 預設的代幣有效期為 24 小時。 這種行為是刻意設計使然。

若要在將身分識別自角色中移除後立即撤銷存取權,請重新啟動來源應用程式或服務,讓現有權杖到期失效。

客戶端 SDK 支援

Azure SDK 用戶端程式庫會透過 DefaultAzureCredential 為您取得受控識別權杖;此機制會自動偵測託管環境中可用的受控識別。 你將憑證傳遞給 EventHubProducerClient 以傳送事件,並傳遞給 EventHubConsumerClient 以接收事件,而不提供連接字串或金鑰。

var credential = new DefaultAzureCredential();

// Send events with a managed identity.
var producerClient = new EventHubProducerClient(
    "<namespace>.servicebus.windows.net",
    "<event-hub-name>",
    credential);

// Receive events with a managed identity.
var consumerClient = new EventHubConsumerClient(
    EventHubConsumerClient.DefaultConsumerGroupName,
    "<namespace>.servicebus.windows.net",
    "<event-hub-name>",
    credential);

若要使用這些用戶端,請從 NuGet 安裝最新的 Azure.Messaging.EventHubs 套件。 如需可執行範例,請參閱:

Apache Kafka 的事件中樞

Apache Kafka 應用程式可以透過管理身份搭配 OAuth 向 Azure 事件中樞 發送事件並接收事件。 欲看 Java 範例,請參見 Kafka 事件中心:使用管理身份 OAuth 發送與接收訊息。