共用方式為


使用 Microsoft Entra ID 進行驗證和授權

本文說明如何使用 Microsoft Entra ID 驗證 Azure 事件方格發佈用戶端。

概觀

Microsoft 身分識別平台會針對使用 Microsoft Entra ID 作為其身分識別提供者的資源和應用程式,提供整合式驗證和存取控制管理。 使用 Microsoft 身分識別平台,以在應用程式中提供驗證和授權支援。 其是以開放標準 (例如 OAuth 2.0 和 OpenID Connect) 為基礎,並提供支援許多驗證案例的工具和開放原始碼程式庫。 這提供進階功能 (例如條件式存取),以讓您設定需要多重要素驗證的原則,或允許從特定位置存取 (舉例來說)。

使用 Microsoft Entra ID 時改善安全性態勢的優點,是您不需要在程式碼或存放庫中儲存認證 (例如驗證金鑰)。 相反地,您會依賴從 Microsoft 身分識別平台取得 OAuth 2.0 存取權杖,而應用程式會在向受保護的資源進行驗證時出示該存取權杖。 您可以使用 Microsoft Entra ID 來註冊事件發佈應用程式,並取得與您用來管理和使用的應用程式相關聯的服務主體。 相反地,您可以使用受控身分識別 (系統指派或使用者指派) 作為甚至更簡單的身分識別管理模型,因為系統會管理身分識別生命週期的某些層面。

角色型存取控制 (RBAC) 可讓您使用下列方式設定授權:特定安全性主體 (使用者、群組或應用程式的身分識別) 具有對 Azure 資源執行作業的特定權限。 因此,將事件傳送至事件方格的用戶端應用程式所使用的安全性主體必須具有與相關聯的 RBAC 角色「事件方格資料傳送者」

安全性主體

討論事件方格發佈用戶端的驗證時,有兩種廣泛的安全性主體類別適用:

  • 受控身分識別。 受控身分識別可以由系統指派 (您可以在 Azure 資源上啟用,並且只與該資源相關聯),或由使用者指派 (您已明確建立和命名)。 使用者指派的受控身分識別可以與多個資源相關聯。
  • 應用程式安全性主體。 這種安全性主體類型代表應用程式,可存取受 Microsoft Entra ID 保護的資源。

不論使用何種安全性主體、受控身分識別或應用程式安全性主體,您的用戶端都會使用該身分識別在 Microsoft Entra ID 之前進行驗證,並在將事件傳送至事件方格時取得隨著要求傳送的 OAuth 2.0 存取權杖。 該權杖會以密碼編譯方式進行簽署,並在事件方格接收到權杖之後驗證權杖。 例如,將對象 (權杖的預定收件者) 確認為事件方格 (https://eventgrid.azure.net) 等。 權杖包含用戶端身分識別的相關資訊。 事件方格會採用該身分識別,並驗證用戶端是否已獲指派「EventGrid 資料傳送者」角色。 更精確地說,事件方格會先驗證身分識別是否具有身分識別相關聯 RBAC 角色的 Microsoft.EventGrid/events/send/action 權限,再允許事件發佈要求完成。

如果您使用事件方格 SDK,則不需要擔心有關如何實作存取權杖取得以及如何將它包含在事件方格的每個要求中的詳細資料,因為事件方格資料平面 SDK會為您執行該動作。

使用 Microsoft Entra 驗證的用戶端設定步驟

將事件傳送至主題、網域或合作夥伴命名空間時,執行下列步驟,以將用戶端設定為使用 Microsoft Entra ID 驗證。

  1. 建立或使用您想要用來驗證的安全性主體。 您可以使用 受控身分識別應用程式安全性主體
  2. 將「EventGrid 資料傳送者」角色指派給安全性主體,以將權限授與安全性主體來發佈事件
  3. 使用事件方格 SDK 將事件發佈至事件方格。

使用受控識別進行驗證

受控身分識別是與 Azure 資源相關聯的身分識別。 受控身分識別提供一種身分識別,而應用程式會在支援 Microsoft Entra 驗證的 Azure 資源時使用此身分識別。 應用程式可以使用裝載資源 (例如虛擬機器或 Azure App Service) 的受控身分識別,來取得將事件發佈至事件方格時與要求一起呈現的 Microsoft Entra 權杖。 應用程式連線時,事件方格會將受控實體的內容繫結至用戶端。 將其與受控身分識別相關聯之後,您的事件方格發佈用戶端就可以執行所有授權的作業。 將受控實體與事件方格 RBAC 角色相關聯,以授與授權。

受控身分識別會在 Microsoft Entra ID 中將自動受控身分識別提供給 Azure 服務。 相較於其他驗證方法,不論是針對身分識別本身還是您需要存取的資源,您都不需要在應用程式碼或設定中儲存和保護存取金鑰或共用存取簽章 (SAS)。

若要使用受控身分識別來驗證事件發佈用戶端,請先決定用戶端應用程式的裝載 Azure 服務,然後在該 Azure 服務執行個體上啟用由系統指派或使用者指派的受控身分識別。 例如,您可以在 VMAzure App Service 或 Azure Functions 上啟用受控身分識別。

在裝載服務中設定受控身分識別之後,請指派將事件發佈至該身分識別的權限

使用用戶端應用程式的安全性主體進行驗證

除了受控身分識別之外,另一個身分識別選項是為您的用戶端應用程式建立安全性主體。 為此,您必須向 Microsoft Entra ID 註冊應用程式。 註冊應用程式是一種手勢,您可以透過此手勢將身分識別和存取管理控制委派給 Microsoft Entra ID。 請遵循註冊應用程式一節和新增用戶端秘密一節中的步驟。 開始之前,請務必檢閱必要條件

在您擁有應用程式安全性主體並遵循上述步驟之後,請指派將事件發佈至該身分識別的權限

注意

當您在入口網站中註冊應用程式時,會自動在您的主租用戶中建立應用程式物件服務主體。 或者,您可以使用 Microsot Graph 來註冊您的應用程式。 不過,如果您使用 Microsoft Graph API 來註冊或建立應用程式,則建立服務主體物件是個別的步驟。

將發佈事件的權限指派給安全性主體

用來將事件發佈至事件方格的身分識別必須具有 Microsoft.EventGrid/events/send/action 權限,才能將事件傳送至事件方格。 該權限包含在內建 RBAC 角色事件方格資料傳送者中。 此角色可以指派給所指定範圍安全性主體,而此範圍可以是管理群組、Azure 訂用帳戶、資源群組或特定事件方格主題、網域或合作夥伴命名空間。 請遵循指派 Azure 角色中的步驟,將「EventGrid 資料傳送者」角色指派給安全性主體,因此會使用該安全性主體將事件傳送存取權授與應用程式。 或者,您可以定義包含 Microsoft.EventGrid/events/send/action 權限的自訂角色,並將該自訂角色指派給安全性主體。

透過處理 RBAC 權限,您現在可以建置用戶端應用程式以傳送事件至事件方格。

注意

除了傳送事件以外,事件方格還支援其他 RBAC 角色。 如需詳細資訊,請參閱事件方格內建角色

使用事件方格的用戶端 SDK 來發佈事件

使用事件方格的資料平面 SDK,將事件發佈至事件方格。 事件方格 SDK 支援所有驗證方法,包括 Microsoft Entra 驗證。

以下是使用 .NET SDK 將事件發佈至事件方格的範例程式碼。 您可以在 Azure 入口網站中事件方格主題的 [概觀] 頁面上取得主題端點。 其格式為:https://<TOPIC-NAME>.<REGION>-1.eventgrid.azure.net/api/events

ManagedIdentityCredential managedIdentityCredential = new ManagedIdentityCredential();
EventGridPublisherClient client = new EventGridPublisherClient( new Uri("<TOPIC ENDPOINT>"), managedIdentityCredential);


EventGridEvent egEvent = new EventGridEvent(
        "ExampleEventSubject",
        "Example.EventType",
        "1.0",
        "This is the event data");

// Send the event
await client.SendEventAsync(egEvent);

必要條件

以下是向事件方格驗證的必要條件。

使用 Microsoft Entra 驗證發佈事件

若要將事件傳送至主題、網域或合作夥伴命名空間,您可以使用下列方式來建置用戶端。 第一次提供 Microsoft Entra 驗證支援的 API 版本為 2018-01-01。 請在應用程式中使用該 API 版本或較新版本。

範例:

此 C# 程式碼片段會搭配使用應用程式 (服務主體) 與用戶端祕密來建立事件方格發佈者用戶端,以啟用您新增 Azure.Identity 程式庫所需的 DefaultAzureCredential 方法。 如果您使用官方 SDK,則其會為您處理版本。

Environment.SetEnvironmentVariable("AZURE_CLIENT_ID", "");
Environment.SetEnvironmentVariable("AZURE_TENANT_ID", "");
Environment.SetEnvironmentVariable("AZURE_CLIENT_SECRET", "");

EventGridPublisherClient client = new EventGridPublisherClient(new Uri("your-event-grid-topic-domain-or-partner-namespace-endpoint"), new DefaultAzureCredential());

如需詳細資訊,請參閱下列文章:

停用金鑰和共用存取簽章驗證

Microsoft Entra 驗證所提供的驗證支援優於存取金鑰或共用存取簽章 (SAS) 權杖驗證所提供的驗證支援。 使用 Microsoft Entra 驗證時,會根據 Microsoft Entra 識別提供者來驗證身分識別。 身為開發人員,如果您使用 Microsoft Entra 驗證,則不需要使用程式碼來處理金鑰。 您也將受益於 Microsoft 身分識別平台內建的所有安全性功能 (例如條件式存取),以協助您改善應用程式的安全性態勢。

在您決定使用 Microsoft Entra 驗證之後,可以根據存取金鑰或 SAS 權杖來停用驗證。

注意

存取金鑰或 SAS 權杖驗證是一種「本機驗證」形式。 您有時會在討論這個不依賴 Microsoft Entra 的驗證機制類別時參考「本機驗證」。 適當地呼叫用來停用本機驗證的 API 參數,因此 disableLocalAuth

Azure 入口網站

建立新主題時,您可以在 [建立主題] 頁面的 [進階] 索引標籤上停用本機驗證。

顯示您可停用本地驗證時,[建立主題] 頁面中 [進階] 索引標籤的螢幕擷取畫面。

針對現有主題,請遵循下列步驟以停用本機驗證:

  1. 導覽至主題的 [事件方格主題] 頁面,然後選取 [本機驗證] 下的 [已啟用]

    顯示現有主題 [概觀] 頁面的螢幕擷取畫面。

  2. 在 [本機驗證] 快顯視窗中,選取 [已停用],然後選取 [確定]

    螢幕擷取畫面顯示 [本機驗證] 視窗。

Azure CLI

下列 CLI 命令顯示如何建立已停用本機驗證的自訂主題。 停用本機驗證功能目前為預覽版,而您需要使用 API 版本 2021-06-01-preview

az resource create --subscription <subscriptionId> --resource-group <resourceGroup> --resource-type Microsoft.EventGrid/topics --api-version 2021-06-01-preview --name <topicName> --location <location> --properties "{ \"disableLocalAuth\": true}"

如需參考,以下是您可以根據所建立或更新主題所使用的資源類型值。

主題類型 資源類型
網域 Microsoft.EventGrid/domains
合作夥伴命名空間 Microsoft.EventGrid/partnerNamespaces
自訂主題 Microsoft.EventGrid/topics

Azure PowerShell

如果您使用 PowerShell,則請使用下列 Cmdlet 來建立已停用本機驗證的自訂主題。


Set-AzContext -SubscriptionId <SubscriptionId>

New-AzResource -ResourceGroupName <ResourceGroupName> -ResourceType Microsoft.EventGrid/topics -ApiVersion 2021-06-01-preview -ResourceName <TopicName> -Location <Location> -Properties @{disableLocalAuth=$true}

注意

資源