使用受控識別進行事件傳遞
本文說明如何針對 Azure 事件方格系統主題、自訂主題或網域使用受控服務身分識別。 使用此功能將事件轉送到支援的目的地,例如,服務匯流排佇列和主題、事件中樞,以及儲存體帳戶。
必要條件
將系統指派的身分識別或使用者指派的身分識別指派給系統主題、自訂主題或網域。
- 如需自訂主題和網域,請參閱啟用自訂主題和網域的受控身分識別。
- 如需系統主題,請參閱啟用系統主題的受控身分識別
將身分識別新增至目的地 (例如,服務匯流排佇列) 的適當角色 (例如,服務匯流排資料傳送者)。 如需詳細步驟,請參閱將身分識別新增至目的地上的 Azure 角色
建立可使用身分識別的事件訂用帳戶
在您的事件方格自訂主題或系統主題或是網域具有受控身分識別,並且已將該身分識別新增至目的地的適當角色之後,您就可以建立使用該身分識別的訂用帳戶。
使用 Azure 入口網站
建立事件訂用帳戶時,您會看到一個選項,可讓您針對 ENDPOINT DETAILS 區段中的端點,使用系統指派的身分識別或使用者指派的身分識別。
以下範例說明如何在建立事件訂用帳戶時啟用系統指派的身分識別,而此事件訂用帳戶將服務匯流排佇列作為目的地。
您也可以在 [其他功能] 索引標籤上啟用系統指派的身分識別,以用於進行無效信件處理。
您可以在建立事件訂用帳戶之後,於其上啟用受控身分識別。 在事件訂用帳戶的 [事件訂用帳戶] 頁面上,切換至 [其他功能] 索引標籤來查看選項。 您也可以在此頁面上啟用無效信件的身分識別。
如果您已啟用主題的使用者指派身分識別,則會在 [受控身分識別類型] 的下拉式清單中看到已啟用的使用者指派身分識別選項。 如果您針對 [受控身分識別類型] 選取 [使用者指派],則可以選取您想要用來傳遞事件的使用者指派身分識別。
使用 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 資源的受控身分識別。