向托管标识授予对事件网格目标的访问权限

本部分介绍如何将系统主题、自定义主题或域的标识添加到 Azure 角色。

先决条件

按照下文说明分配系统所分配的托管标识:

支持的目标和 Azure 角色

为事件网格自定义主题或域启用标识后,Azure 会自动在 Microsoft Entra ID 中创建标识。 将此标识添加到适当的 Azure 角色,使自定义主题或域可以将事件转发到受支持的目标。 例如,将标识添加到 Azure 事件中心命名空间的“Azure 事件中心数据发送方”角色,使事件网格自定义主题可以将事件转发到该命名空间中的事件中心

当前,Azure 事件网格支持配置有系统分配的托管标识的自定义主题或域,允许将事件转发到以下目标。 此表还为你提供标识应位于的角色,以便自定义主题可以转发事件。

目标 Azure 角色
服务总线队列和主题 Azure 服务总线数据发送方
Azure 事件中心 Azure 事件中心数据发送方
Azure Blob 存储 存储 Blob 数据参与者
Azure 队列存储 存储队列数据消息发送方

使用 Azure 门户

你可以使用 Azure 门户将自定义主题或域标识分配给相应的角色,让自定义主题或域可以将事件转发到目标。

以下示例将名为“msitesttopic”的事件网格自定义主题的托管标识添加到包含队列或主题资源的服务总线命名空间的“Azure 服务总线数据发送方”角色。 在命名空间级别添加到角色时,事件网格自定义主题可以将事件转发到命名空间中的所有实体。

  1. Azure 门户中,转到“服务总线命名空间”。

  2. 在左窗格中选择“访问控制”。

  3. 在“添加角色分配(预览)”部分中选择“添加”。

    Image showing the selection of Add role assignment (Preview) menu

  4. 在“添加角色分配”页上,选择“Azure 服务总线数据发送方”,然后选择“下一步”。

    Image showing the selection of the Azure Service Bus Data Sender role

  5. 在“成员”选项卡中,执行以下步骤:

    1. 选择“用户、组或服务主体”,然后单击“+ 选择成员”。 “托管标识”选项尚不支持事件网格标识。

    2. 在“选择成员”窗口中,搜索并选择与自定义主题同名的服务主体。 下面的示例中采用的是 spcustomtopic0728。

      Image showing the selection of the User, group, or service principal option

    3. 在“选择成员”窗口中,单击“选择”。

      Image showing the selection of the Managed identity option

  6. 现在,回到“成员”选项卡,选择“下一步”。

    Image showing the selection of the Next button on the Members page

  7. 在“查看 + 分配”页上,在查看设置后选择“查看 + 分配”。

这些步骤与向表中提到的其他角色添加标识相似。

使用 Azure CLI

本部分中的示例展示了如何使用 Azure CLI 向 Azure 角色添加标识。 示例命令适用于事件网格自定义主题。 适用于事件网格域的命令也是类似的。

获取自定义主题的系统标识的主体 ID

首先,获取自定义主题的系统托管标识的主体 ID,并将该标识分配给相应的角色。

topic_pid=$(az ad sp list --display-name "$<TOPIC NAME>" --query [].objectId -o tsv)

在不同范围内创建事件中心的角色分配

以下 CLI 示例演示如何在命名空间级别或事件中心级别将自定义主题的标识添加到“Azure 事件中心数据发送方”角色。 如果在命名空间级别创建角色分配,则自定义主题可以将事件转发到该命名空间中的所有事件中心。 如果在事件中心级别创建角色分配,则自定义主题只能将事件转发到该特定事件中心。

role="Azure Event Hubs Data Sender" 
namespaceresourceid=$(az eventhubs namespace show -n $<EVENT HUBS NAMESPACE NAME> -g <RESOURCE GROUP of EVENT HUB> --query "{I:id}" -o tsv) 
eventhubresourceid=$(az eventhubs eventhub show -n <EVENT HUB NAME> --namespace-name <EVENT HUBS NAMESPACE NAME> -g <RESOURCE GROUP of EVENT HUB> --query "{I:id}" -o tsv) 

# create role assignment for the whole namespace 
az role assignment create --role "$role" --assignee "$topic_pid" --scope "$namespaceresourceid" 

# create role assignment scoped to just one event hub inside the namespace 
az role assignment create --role "$role" --assignee "$topic_pid" --scope "$eventhubresourceid" 

在不同的范围内创建服务总线主题的角色分配

以下 CLI 示例演示如何在命名空间级别或服务总线主题级别将事件网格自定义主题的标识添加到“Azure 服务总线数据发送方”角色。 如果在命名空间级别创建角色分配,则事件网格主题可以将事件转发到该命名空间中的所有实体(服务总线队列或主题)。 如果在服务总线队列或主题级别创建角色分配,则事件网格自定义主题只能将事件转发到该特定的服务总线队列或主题。

role="Azure Service Bus Data Sender" 
namespaceresourceid=$(az servicebus namespace show -n $RG\SB -g "$RG" --query "{I:id}" -o tsv 
sbustopicresourceid=$(az servicebus topic show -n topic1 --namespace-name $RG\SB -g "$RG" --query "{I:id}" -o tsv) 

# create role assignment for the whole namespace 
az role assignment create --role "$role" --assignee "$topic_pid" --scope "$namespaceresourceid" 

# create role assignment scoped to just one hub inside the namespace 
az role assignment create --role "$role" --assignee "$topic_pid" --scope "$sbustopicresourceid" 

后续步骤

由于你已经将系统分配的标识分配给相应系统主题、自定义主题或域,并将该标识添加到目标上的对应角色中,请参阅使用托管标识传递事件中有关使用标识传递事件到目标的对应内容。