使用 Microsoft Entra ID 驗證受控識別以存取事件中樞資源
Azure 事件中樞支援以 Microsoft Entra 驗證 Azure 資源的受控識別。 Azure 資源的受控識別可以從執行於 Azure 虛擬機器 (VM)、函式應用程式和虛擬機器擴展集及其他服務中的應用程式中,Microsoft Entra AD 認證來授與事件中樞資源的存取權。 藉由使用適用於 Azure 資源的受控識別搭配 Microsoft Entra 驗證,您可以避免使用在雲端執行的應用程式儲存認證。 本文說明如何從 Azure VM 使用受控識別來授權存取事件中樞。
在 VM 上啟用受控識別
您必須先在 VM 上啟用 Azure 資源的受控識別,才能從 VM 使用 Azure 資源的受控識別來存取事件中樞資源。 若要了解如何啟用 Azure 資源受控識別,請參閱設定 Azure VM 的受控識別。
在 Microsoft Entra ID 中將權限授與受控識別
若要授權從應用程式中的受控識別對事件中樞服務的要求,請先為該受控識別完成 Azure 角色型存取控制 (RBAC) 設定。 Azure 事件中樞定義的 Azure 角色具有權限從事件中樞傳送和接收事件。 將 Azure 角色指派給受控識別時,受控識別即獲權在適當範圍內存取事件中樞資料。 如需有關指派 Azure 角色的詳細資訊,請參閱使用 Microsoft Entra ID 驗證以存取事件中樞資源。
範例應用程式
本節中的程序以一個簡單的應用程式為例,該應用程式以受控識別執行,並存取事件中樞資源。
我們使用一個託管於 Azure App Service 的範例 Web 應用程式。 如需有關建立 Web 應用程式的逐步指示,請參閱在 Azure 中建立 ASP.NET Core Web 應用程式
建立應用程式之後,請遵循下列步驟:
移至 [設定] 並選取 [身分識別]。
將 [狀態] 設定為 [開啟]。
選取 [儲存] 以儲存設定。
在確認訊息上選取 [是]。
一旦啟用此設定,Microsoft Entra ID 中會建立新的服務識別,並設定給 App Service 主機。
現在,在所需範圍內,將此服務識別指派給事件中樞資源中的角色。
使用 Azure 入口網站指派 Azure 角色
在所需範圍內 (事件中樞命名空間、資源群組、訂用帳戶),將其中一個事件中樞角色指派給受控識別。 如需詳細步驟,請參閱使用 Azure 入口網站指派 Azure 角色。
注意
關於支援受控識別的服務清單,請參閱支援以受控識別存取 Azure 資源的服務。
測試 Web 應用程式
- 建立事件中樞命名空間和事件中樞。
- 將 Web 應用程式部署至 Azure。 如需了解 GitHub 上範例 Web 應用程式的連結,請參閱下列索引標籤式段落。
- 確保 SendReceive.aspx 設定為 Web 應用程式的預設文件。
- 啟用 Web 應用程式的身分識別。
- 在命名空間層級或事件中樞層級上,將此身分識別指派給事件中樞資料擁有者角色。
- 執行 Web 應用程式,輸入命名空間名稱和事件中樞名稱、訊息,然後選取 [傳送]。 若要接收事件,請選取 [接收]。
在 GitHub 存放庫中,您可以找到往返事件中樞資源收送資料的範例 Web 應用程式。
從 NuGet 安裝最新套件,並開始使用 EventHubConsumerClient 將事件傳送至事件中樞,以及使用 EventHubProducerClient 來接收事件。
注意
有關使用受控識別將事件發佈至事件中樞的 JAVA 範例,請參閱 GitHub 上使用 Azure 身分識別發佈事件的範例。
protected async void btnSend_Click(object sender, EventArgs e)
{
await using (EventHubProducerClient producerClient = new EventHubProducerClient(txtNamespace.Text, txtEventHub.Text, new DefaultAzureCredential()))
{
// create a batch
using (EventDataBatch eventBatch = await producerClient.CreateBatchAsync())
{
// add events to the batch. only one in this case.
eventBatch.TryAdd(new EventData(Encoding.UTF8.GetBytes(txtData.Text)));
// send the batch to the event hub
await producerClient.SendAsync(eventBatch);
}
txtOutput.Text = $"{DateTime.Now} - SENT{Environment.NewLine}{txtOutput.Text}";
}
}
protected async void btnReceive_Click(object sender, EventArgs e)
{
await using (var consumerClient = new EventHubConsumerClient(EventHubConsumerClient.DefaultConsumerGroupName, $"{txtNamespace.Text}.servicebus.windows.net", txtEventHub.Text, new DefaultAzureCredential()))
{
int eventsRead = 0;
try
{
using CancellationTokenSource cancellationSource = new CancellationTokenSource();
cancellationSource.CancelAfter(TimeSpan.FromSeconds(5));
await foreach (PartitionEvent partitionEvent in consumerClient.ReadEventsAsync(cancellationSource.Token))
{
txtOutput.Text = $"Event Read: { Encoding.UTF8.GetString(partitionEvent.Data.Body.ToArray()) }{ Environment.NewLine}" + txtOutput.Text;
eventsRead++;
}
}
catch (TaskCanceledException ex)
{
txtOutput.Text = $"Number of events read: {eventsRead}{ Environment.NewLine}" + txtOutput.Text;
}
}
}
適用於 Kafka 的事件中樞
您可以在 Apache Kafka 應用程式中利用受控識別 OAuth,以往返 Azure 事件中樞收送訊息。 請參閱 GitHub 上提供的下列範例:Kafka 的事件中樞 - 使用受控識別 OAuth 來傳送和接收訊息。
範例
- .NET。
- 如需使用最新版 Azure.Messaging.EventHubs 套件的範例,請參閱使用受控識別發佈事件
- 如需使用舊版 Microsoft.Azure.EventHubs 套件的範例,請參閱 GitHub 上的此 .NET 範例
- Java - 請參閱下列範例。
- GitHub 上的 [以 Azure 身分識別發佈事件] 範例。
- 若要了解如何使用 Apache Kafka 通訊協定,以利用受控識別將事件傳送至事件中樞,並從事件中樞接收事件,請參閱使用受控識別來傳送及接收訊息的 Kafka 事件中樞範例。
相關內容
- 請參閱下文以了解 Azure 資源的受控識別:什麼是 Azure 資源的受控識別?
- 請參閱下列相關文章: