本文將展示如何透過管理身份從執行於 Azure 虛擬機(VM)上的應用程式連接到 Azure 事件中樞。 當你使用管理身份時,你的應用程式會向事件樞紐進行認證,而不會在程式碼或設定中儲存連線字串或存取金鑰。 Azure 會自動配置並輪替憑證。
在本文中,您會完成下列工作:
- 在虛擬機上啟用系統指派的管理身份。
- 授予受管理身份權限,將事件傳送到事件中心。
- 在虛擬機上建立並執行一個使用管理身份的範例應用程式。
欲了解 Event Hubs 的受管理身份驗證如何運作,請參閱 Azure 事件中樞 的管理身份認證。
先決條件
- 一個有有效訂閱的 Azure 帳號。 如果您還沒有帳戶,請建立免費帳戶。
- 事件中樞命名空間和事件中樞。 要建立它們,請參考快速入門:使用 Azure 入口建立事件中心。
- Azure 虛擬機器。 要建立一個,請參考快速入門:在 Azure 入口網站建立 Windows 虛擬機,或快速入門:在 Azure 入口網站建立 Linux 虛擬機。
- 在目標範圍內指派 Azure 角色的權限。 擁有者或使用者存取管理員角色包含此權限。
- .NET SDK 安裝在虛擬機上,用來建置並執行範例應用程式。
在虛擬機上啟用受管理身份
在虛擬機上啟用系統指派的管理身份。 Azure 會在 Microsoft Entra ID 中建立一個與虛擬機生命週期綁定的身份。
登入 Azure 入口網站。
移至您的虛擬機器。
在虛擬機頁面,從左側選單選擇 安全>身份 。
在 身分識別 頁面上,確認您位於 系統指派 索引標籤。
在 狀態 欄位中,選擇 開啟。
在指令列選擇 「儲存 」,然後選擇 「是 」來確認。
Azure 建立身份後,物件(主體)ID 會出現在頁面上。 你會在下一節使用這個識別資訊。
若要啟用使用者指派的管理身份,請參見「在虛擬機上配置 Azure 資源的管理身份」。 使用者指派身份是一個獨立資源,你可以指派給多個虛擬機。
授與受控身分識別存取事件中樞的權限
為管理身份指派一個 Azure 內建角色,讓它能將事件傳送到你的事件中心。 此範例在單一事件樞紐的範圍內指派 Azure 事件中樞 資料發送者角色。 授予符合您應用程式需求的最小權限範圍。
- 在 Azure 入口網站,前往你的活動中心。
- 在活動中心頁面,從左側選單選擇存取控制(IAM)。
- 選取 新增>新增角色指派。
- 在角色標籤中,選擇 Azure 事件中樞 Data Sender,然後選擇 Next。
- 在 [ 成員] 索引標籤上,針對 [ 指派存取權] 選取 [ 受控識別]。
- 選取 + 選取成員,選擇您在上一節中啟用的 虛擬機器 受控識別,然後選取 選取。
- 選擇 檢閱 + 指派 以完成角色指派。
完整角色與範圍列表,請參閱 Azure 內建角色 for Azure 事件中樞。 若要在 Azure 入口網站中指派角色,請參閱 使用 Azure 入口網站指派 Azure 角色。
Note
角色分配可能需要幾分鐘才能傳播。 如果你的應用程式無法立即驗證,請等待再試一次。
在虛擬機上建立並執行範例應用程式
建立一個 .NET 主控台應用程式,將事件傳送到你的活動中心。 當應用程式在虛擬機上執行時,會DefaultAzureCredential自動偵測到受管理身份,因此你不需要提供 連接字串 或金鑰。
連線至 VM。 對於 Windows 虛擬機,請使用 遠端桌面。 對於 Linux 虛擬機,請使用 SSH。
在虛擬機的終端機中,建立專案並新增所需的套件:
dotnet new console --name EventHubsManagedIdentitySample cd EventHubsManagedIdentitySample dotnet add package Azure.Messaging.EventHubs dotnet add package Azure.Identity請將
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.");在虛擬機上建置並執行應用程式:
dotnet run應用程式會使用虛擬機的管理身份來驗證並發送事件。 當事件發送時,主控台會顯示
Events sent to the event hub.要確認事件是否已抵達,請使用 Azure 入口網站中的 Data Explorer 來開啟你的事件中心,或使用命名空間概覽頁面上的指標。
Tip
當你使用使用者指定的管理身份,或虛擬機上有多個身份時,請設定用戶端 ID 以選擇 DefaultAzureCredential 正確的身份。 欲了解更多資訊,請參閱 DefaultAzureCredentialOptions.ManagedIdentityClientId。