使用 managed identity 從虛擬機存取 Azure 事件中樞

本文將展示如何透過管理身份從執行於 Azure 虛擬機(VM)上的應用程式連接到 Azure 事件中樞。 當你使用管理身份時,你的應用程式會向事件樞紐進行認證,而不會在程式碼或設定中儲存連線字串或存取金鑰。 Azure 會自動配置並輪替憑證。

在本文中,您會完成下列工作:

  • 在虛擬機上啟用系統指派的管理身份。
  • 授予受管理身份權限,將事件傳送到事件中心。
  • 在虛擬機上建立並執行一個使用管理身份的範例應用程式。

欲了解 Event Hubs 的受管理身份驗證如何運作,請參閱 Azure 事件中樞 的管理身份認證。

先決條件

在虛擬機上啟用受管理身份

在虛擬機上啟用系統指派的管理身份。 Azure 會在 Microsoft Entra ID 中建立一個與虛擬機生命週期綁定的身份。

  1. 登入 Azure 入口網站。

  2. 移至您的虛擬機器。

  3. 在虛擬機頁面,從左側選單選擇 安全>身份 。

  4. 在 身分識別 頁面上,確認您位於 系統指派 索引標籤。

  5. 在 狀態 欄位中,選擇 開啟。

  6. 在指令列選擇 「儲存 」,然後選擇 「是 」來確認。

    Azure 建立身份後,物件(主體)ID 會出現在頁面上。 你會在下一節使用這個識別資訊。

若要啟用使用者指派的管理身份,請參見「在虛擬機上配置 Azure 資源的管理身份」。 使用者指派身份是一個獨立資源,你可以指派給多個虛擬機。

授與受控身分識別存取事件中樞的權限

為管理身份指派一個 Azure 內建角色,讓它能將事件傳送到你的事件中心。 此範例在單一事件樞紐的範圍內指派 Azure 事件中樞 資料發送者角色。 授予符合您應用程式需求的最小權限範圍。

  1. 在 Azure 入口網站,前往你的活動中心。
  2. 在活動中心頁面,從左側選單選擇存取控制(IAM)。
  3. 選取 新增>新增角色指派。
  4. 在角色標籤中,選擇 Azure 事件中樞 Data Sender,然後選擇 Next。
  5. 在 [ 成員] 索引標籤上,針對 [ 指派存取權] 選取 [ 受控識別]。
  6. 選取 + 選取成員,選擇您在上一節中啟用的 虛擬機器 受控識別,然後選取 選取。
  7. 選擇 檢閱 + 指派 以完成角色指派。

完整角色與範圍列表,請參閱 Azure 內建角色 for Azure 事件中樞。 若要在 Azure 入口網站中指派角色,請參閱 使用 Azure 入口網站指派 Azure 角色。

Note

角色分配可能需要幾分鐘才能傳播。 如果你的應用程式無法立即驗證,請等待再試一次。

在虛擬機上建立並執行範例應用程式

建立一個 .NET 主控台應用程式,將事件傳送到你的活動中心。 當應用程式在虛擬機上執行時,會DefaultAzureCredential自動偵測到受管理身份,因此你不需要提供 連接字串 或金鑰。

  1. 連線至 VM。 對於 Windows 虛擬機,請使用 遠端桌面。 對於 Linux 虛擬機,請使用 SSH。

  2. 在虛擬機的終端機中,建立專案並新增所需的套件:

    dotnet new console --name EventHubsManagedIdentitySample
    cd EventHubsManagedIdentitySample
    dotnet add package Azure.Messaging.EventHubs
    dotnet add package Azure.Identity
    
  3. 請將 Program.cs 的內容替換成以下代碼。 請將 <namespace> 替換為你的 Event Hubs 命名空間名稱,並將 <event-hub-name> 替換為你的事件中樞名稱。

    using Azure.Identity;
    using Azure.Messaging.EventHubs;
    using Azure.Messaging.EventHubs.Producer;
    
    // DefaultAzureCredential detects the managed identity available on the VM.
    var credential = new DefaultAzureCredential();
    
    var producerClient = new EventHubProducerClient(
        "<namespace>.servicebus.windows.net",
        "<event-hub-name>",
        credential);
    
    using EventDataBatch eventBatch = await producerClient.CreateBatchAsync();
    eventBatch.TryAdd(new EventData("First event from a managed identity"));
    eventBatch.TryAdd(new EventData("Second event from a managed identity"));
    
    await producerClient.SendAsync(eventBatch);
    await producerClient.DisposeAsync();
    
    Console.WriteLine("Events sent to the event hub.");
    
  4. 在虛擬機上建置並執行應用程式:

    dotnet run
    

    應用程式會使用虛擬機的管理身份來驗證並發送事件。 當事件發送時,主控台會顯示 Events sent to the event hub.

  5. 要確認事件是否已抵達,請使用 Azure 入口網站中的 Data Explorer 來開啟你的事件中心,或使用命名空間概覽頁面上的指標。

Tip

當你使用使用者指定的管理身份,或虛擬機上有多個身份時,請設定用戶端 ID 以選擇 DefaultAzureCredential 正確的身份。 欲了解更多資訊,請參閱 DefaultAzureCredentialOptions.ManagedIdentityClientId。