使用受控識別進行事件傳遞

本文說明如何針對 Azure 事件方格系統主題、自訂主題或網域使用受控服務身分識別。 使用此功能將事件轉送到支援的目的地,例如,服務匯流排佇列和主題、事件中樞,以及儲存體帳戶。

必要條件

  1. 將系統指派的身分識別或使用者指派的身分識別指派給系統主題、自訂主題或網域。

  2. 將身分識別新增至目的地 (例如,服務匯流排佇列) 的適當角色 (例如,服務匯流排資料傳送者)。 如需詳細步驟,請參閱將身分識別新增至目的地上的 Azure 角色

    注意

    目前無法使用私人端點來傳遞事件。 如需詳細資訊,請參閱本文最後的私人端點一節。

建立可使用身分識別的事件訂用帳戶

在您的事件方格自訂主題或系統主題或是網域具有受控身分識別,並且已將該身分識別新增至目的地的適當角色之後,您就可以建立使用該身分識別的訂用帳戶。

使用 Azure 入口網站

建立事件訂用帳戶時,您會看到一個選項,可讓您針對 ENDPOINT DETAILS 區段中的端點,使用系統指派的身分識別或使用者指派的身分識別。

以下範例說明如何在建立事件訂用帳戶時啟用系統指派的身分識別,而此事件訂用帳戶將服務匯流排佇列作為目的地。

Screenshot that shows how to enable an identity when creating an event subscription for a Service Bus queue.

您也可以在 [其他功能] 索引標籤上啟用系統指派的身分識別,以用於進行無效信件處理。

Screenshot that shows how to enable a system-assigned identity for dead-lettering.

您可以在建立事件訂用帳戶之後,於其上啟用受控身分識別。 在事件訂用帳戶的 [事件訂用帳戶] 頁面上,切換至 [其他功能] 索引標籤來查看選項。 您也可以在此頁面上啟用無效信件的身分識別。

Screenshot that shows how to enable a system-assigned identity on an existing event subscription.

如果您已啟用主題的使用者指派身分識別,則會在 [受控身分識別類型] 的下拉式清單中看到已啟用的使用者指派身分識別選項。 如果您針對 [受控身分識別類型] 選取 [使用者指派],則可以選取您想要用來傳遞事件的使用者指派身分識別。

Screenshot that shows how to enable a user-assigned identity on an event subscription.

使用 Azure CLI - 服務匯流排佇列

在本節中,您將了解如何利用 Azure CLI 來使用系統指派的身分識別,以將事件傳遞至服務匯流排佇列。 身分識別必須是 Azure 服務匯流排資料傳送者角色的成員。 在用於進行無效信件處理的儲存體帳戶上,該身分識別也必須是儲存體 Blob 資料參與者角色的成員。

定義變數

首先,針對要在 CLI 命令中使用的下列變數,指定值。

subid="<AZURE SUBSCRIPTION ID>"
rg = "<RESOURCE GROUP of EVENT GRID CUSTOM TOPIC>"
topicname = "<EVENT GRID TOPIC NAME>"

# get the service bus queue resource id
queueid=$(az servicebus queue show --namespace-name <SERVICE BUS NAMESPACE NAME> --name <QUEUE NAME> --resource-group <RESOURCE GROUP NAME> --query id --output tsv)
sb_esname = "<Specify a name for the event subscription>" 

使用受控身分識別來建立事件訂用帳戶,以進行傳遞

此範例命令會建立事件方格自訂主題的事件訂用帳戶,並將端點類型設定為「服務匯流排佇列」

az eventgrid event-subscription create  
    --source-resource-id /subscriptions/$subid/resourceGroups/$rg/providers/Microsoft.EventGrid/topics/$topicname
    --delivery-identity-endpoint-type servicebusqueue  
    --delivery-identity systemassigned 
    --delivery-identity-endpoint $queueid
    -n $sb_esname 

使用受控身分識別來建立事件訂用帳戶,以進行傳遞和無效信件處理

此範例命令會建立事件方格自訂主題的事件訂用帳戶,並將端點類型設定為「服務匯流排佇列」。 其也會指定要用於無效信件的系統管理的身分識別。

storageid=$(az storage account show --name demoStorage --resource-group gridResourceGroup --query id --output tsv)
deadletterendpoint="$storageid/blobServices/default/containers/<BLOB CONTAINER NAME>"

az eventgrid event-subscription create  
    --source-resource-id /subscriptions/$subid/resourceGroups/$rg/providers/Microsoft.EventGrid/topics/$topicname 
    --delivery-identity-endpoint-type servicebusqueue
    --delivery-identity systemassigned 
    --delivery-identity-endpoint $queueid
    --deadletter-identity-endpoint $deadletterendpoint 
    --deadletter-identity systemassigned 
    -n $sb_esnameq 

使用 Azure CLI - 事件中樞

在本節中,您將了解如何利用 Azure CLI 來使用系統指派的身分識別,以將事件傳遞至事件中樞。 身分識別必須是 Azure 事件中樞資料傳送者角色的成員。 在用於進行無效信件處理的儲存體帳戶上,該身分識別也必須是儲存體 Blob 資料參與者角色的成員。

定義變數

subid="<AZURE SUBSCRIPTION ID>"
rg = "<RESOURCE GROUP of EVENT GRID CUSTOM TOPIC>"
topicname = "<EVENT GRID CUSTOM TOPIC NAME>"

hubid=$(az eventhubs eventhub show --name <EVENT HUB NAME> --namespace-name <NAMESPACE NAME> --resource-group <RESOURCE GROUP NAME> --query id --output tsv)
eh_esname = "<SPECIFY EVENT SUBSCRIPTION NAME>" 

使用受控身分識別來建立事件訂用帳戶,以進行傳遞

此範例命令會建立事件方格自訂主題的事件訂用帳戶,並將端點類型設定為事件中樞

az eventgrid event-subscription create  
    --source-resource-id /subscriptions/$subid/resourceGroups/$rg/providers/Microsoft.EventGrid/topics/$topicname 
    --delivery-identity-endpoint-type eventhub 
    --delivery-identity systemassigned 
    --delivery-identity-endpoint $hubid
    -n $sbq_esname 

使用受控身分識別來建立事件訂用帳戶,以進行傳遞和無效信件處理

此範例命令會建立事件方格自訂主題的事件訂用帳戶,並將端點類型設定為事件中樞。 其也會指定要用於無效信件的系統管理的身分識別。

storageid=$(az storage account show --name demoStorage --resource-group gridResourceGroup --query id --output tsv)
deadletterendpoint="$storageid/blobServices/default/containers/<BLOB CONTAINER NAME>"

az eventgrid event-subscription create
    --source-resource-id /subscriptions/$subid/resourceGroups/$rg/providers/Microsoft.EventGrid/topics/$topicname 
    --delivery-identity-endpoint-type servicebusqueue  
    --delivery-identity systemassigned 
    --delivery-identity-endpoint $hubid
    --deadletter-identity-endpoint $eh_deadletterendpoint
    --deadletter-identity systemassigned 
    -n $eh_esname 

使用 Azure CLI - Azure 儲存體佇列

在本節中,您將了解如何利用 Azure CLI 來使用系統指派的身分識別,以將事件傳遞至 Azure 儲存體佇列。 此身分識別必須是儲存體帳戶上「儲存體佇列資料訊息傳送者」角色的成員。 在用於進行無效信件處理的儲存體帳戶上,該身分識別也必須是儲存體 Blob 資料參與者角色的成員。

定義變數

subid="<AZURE SUBSCRIPTION ID>"
rg = "<RESOURCE GROUP of EVENT GRID CUSTOM TOPIC>"
topicname = "<EVENT GRID CUSTOM TOPIC NAME>"

# get the storage account resource id
storageid=$(az storage account show --name <STORAGE ACCOUNT NAME> --resource-group <RESOURCE GROUP NAME> --query id --output tsv)

# build the resource id for the queue
queueid="$storageid/queueservices/default/queues/<QUEUE NAME>" 

sa_esname = "<SPECIFY EVENT SUBSCRIPTION NAME>" 

使用受控身分識別來建立事件訂用帳戶,以進行傳遞

az eventgrid event-subscription create 
    --source-resource-id /subscriptions/$subid/resourceGroups/$rg/providers/Microsoft.EventGrid/topics/$topicname 
    --delivery-identity-endpoint-type storagequeue  
    --delivery-identity systemassigned 
    --delivery-identity-endpoint $queueid
    -n $sa_esname 

使用受控身分識別來建立事件訂用帳戶,以進行傳遞和無效信件處理

storageid=$(az storage account show --name demoStorage --resource-group gridResourceGroup --query id --output tsv)
deadletterendpoint="$storageid/blobServices/default/containers/<BLOB CONTAINER NAME>"

az eventgrid event-subscription create  
    --source-resource-id /subscriptions/$subid/resourceGroups/$rg/providers/Microsoft.EventGrid/topics/$topicname 
    --delivery-identity-endpoint-type storagequeue  
    --delivery-identity systemassigned 
    --delivery-identity-endpoint $queueid
    --deadletter-identity-endpoint $deadletterendpoint 
    --deadletter-identity systemassigned 
    -n $sa_esname 

私人端點

目前無法使用私人端點來傳遞事件。 也就是說,如果您的嚴格網路隔離需求是所傳遞的事件流量不得離開私人 IP 空間,則不予支援。

不過,如果您的需求需要一種安全的方式,以使用公用 IP 空間並利用加密通道和傳送者已知身分識別 (在此情況下為事件方格) 來傳送事件,則您可以使用 Azure 事件方格自訂主題或有受控身分識別的網域,以將事件傳遞至事件中樞、服務匯流排或 Azure 儲存體服務,如本文所示。 然後,您可以使用 Azure Functions 中或虛擬網路上所部署的 Webhook 中設定的私人連結來提取事件。 請參閱教學課程:使用 Azure Functions 連線至私人端點

在此設定下,流量會透過公用 IP/網際網路從事件方格流向事件中樞、服務匯流排或 Azure 儲存體,但可以加密通道,並使用事件方格的受控身分識別。 如果您將 Azure Functions 或部署至虛擬網路的 Webhook 設定為透過私人連結來使用事件中樞、服務匯流排或 Azure 儲存體,則流量的該區段顯然會保留在 Azure 內。

下一步

若要了解受控身分識別,請參閱什麼是 Azure 資源的受控身分識別