使用托管标识对Azure 流分析作业进行身份验证到Azure Blob 存储

使用 托管标识身份验证输出到 Azure Blob 存储时,流分析作业无需使用连接字符串即可直接访问存储帐户。 此功能可提高安全性,并使你能够在Azure内将数据写入虚拟网络(VNET)中的存储帐户。

本文介绍如何通过 Azure 门户和 Azure 资源管理器部署为流分析作业的 Blob 输出启用托管标识。

使用 Azure 门户创建流分析作业

首先,为 Azure 流分析 作业创建托管标识。 

  1. 在 Azure 门户中,打开 Azure 流分析作业。 

  2. 在左侧导航菜单中,选择位于 配置 下的 托管标识。 然后,选中“使用系统分配的托管标识”旁的框,然后选择“保存”。

    系统分配的托管标识

  3. Azure为Microsoft Entra ID中的流分析作业标识创建服务主体。 Azure管理新创建的标识的生命周期。 删除流分析作业时,Azure会自动删除关联的标识(即服务主体)。 

    保存配置时,服务主体的对象 ID(OID)显示为主体 ID,如以下部分所示:

    主体标识符

    服务主体与流分析作业的名称相同。 例如,如果作业的名称是 MyASAJob,则服务主体的名称也是 MyASAJob。 

Azure 资源管理器部署

通过使用Azure 资源管理器,可以完全自动化流分析作业的部署。 可以使用 Azure PowerShell 或 Azure CLI 部署资源管理器模板。 以下示例使用Azure CLI。

  1. 创建Microsoft/StreamAnalytics/streamingjobs资源时,为其添加托管身份,可在 资源管理器 模板的资源部分中包含以下属性:

    "Identity": {
      "Type": "SystemAssigned",
    },
    

    此属性告知 Azure 资源管理器为流分析作业创建和管理标识。 以下示例资源管理器模板部署启用了托管标识的流分析作业,以及使用托管标识的 Blob 输出接收器:

    {
        "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "resources": [
            {
                "apiVersion": "2017-04-01-preview",
                "name": "MyStreamingJob",
                "location": "[resourceGroup().location]",
                "type": "Microsoft.StreamAnalytics/StreamingJobs",
                "identity": {
                    "type": "systemAssigned"
                },
                "properties": {
                    "sku": {
                        "name": "standard"
                    },
                    "outputs":[
                        {
                            "name":"output",
                            "properties":{
                                "serialization": {
                                    "type": "JSON",
                                    "properties": {
                                        "encoding": "UTF8"
                                    }
                                },
                                "datasource":{
                                    "type":"Microsoft.Storage/Blob",
                                    "properties":{
                                        "storageAccounts": [
                                            { "accountName": "MyStorageAccount" }
                                        ],
                                        "container": "test",
                                        "pathPattern": "segment1/{date}/segment2/{time}",
                                        "dateFormat": "yyyy/MM/dd",
                                        "timeFormat": "HH",
                                        "authenticationMode": "Msi"
                                    }
                                }
                            }
                        }
                    ]
                }
            }
        ]
    }
    

    可以使用以下 Azure CLI 命令将上述作业部署到资源组 ExampleGroup

    az deployment group create --resource-group ExampleGroup -template-file StreamingJob.json
    
  2. 创建作业后,请使用Azure 资源管理器检索作业的完整定义。

    az resource show --ids /subscriptions/{SUBSCRIPTION_ID}/resourceGroups/{RESOURCE_GROUP}/providers/Microsoft.StreamAnalytics/StreamingJobs/{RESOURCE_NAME}
    

    上述命令返回如下例所示的响应:

    {
        "id": "/subscriptions/{SUBSCRIPTION_ID}/resourceGroups/{RESOURCE_GROUP}/providers/Microsoft.StreamAnalytics/streamingjobs/{RESOURCE_NAME}",
        "identity": {
            "principalId": "{PRINCIPAL_ID}",
            "tenantId": "{TENANT_ID}",
            "type": "SystemAssigned",
            "userAssignedIdentities": null
        },
        "kind": null,
        "location": "China North",
        "managedBy": null,
        "name": "{RESOURCE_NAME}",
        "plan": null,
        "properties": {
            "compatibilityLevel": "1.0",
            "createdDate": "2019-07-12T03:11:30.39Z",
            "dataLocale": "en-US",
            "eventsLateArrivalMaxDelayInSeconds": 5,
            "jobId": "{JOB_ID}",
            "jobState": "Created",
            "jobStorageAccount": null,
            "jobType": "Cloud",
            "outputErrorPolicy": "Stop",
            "package": null,
            "provisioningState": "Succeeded",
            "sku": {
                "name": "Standard"
            }
        },
        "resourceGroup": "{RESOURCE_GROUP}",
        "sku": null,
        "tags": null,
        "type": "Microsoft.StreamAnalytics/streamingjobs"
    }
    

    记下作业定义中的 principalId,该定义标识Microsoft Entra ID中的作业托管标识,在下一步中用于授予流分析作业对存储帐户的访问权限。

  3. 创建作业后,请参阅本文的 授予 Stream Analytics 作业访问存储帐户权限 部分。

为流分析作业授予对存储帐户的访问权限

可以为流分析作业提供两个级别的访问权限:

  1. 容器级别访问: 此访问级别授予对特定现有容器的作业访问权限。
  2. 帐户级别访问权限: 此访问级别授予作业对存储帐户的常规访问权限,包括创建新容器的功能。

除非需要该作业来创建容器,否则请选择 容器级别访问权限 以授予作业所需的最低访问权限级别。 以下部分介绍了Azure门户和命令行的两个选项。

注释

由于全局复制或缓存延迟,撤销或授予权限可能需要一些时间。 更改应在八分钟内显示。

通过 Azure 门户授予访问权限

容器级访问权限

  1. 转到存储帐户中的容器配置窗格。

  2. 选择“访问控制(IAM)”

  3. 选择添加>添加角色分配以打开添加角色分配页面。

  4. 分配以下角色。 有关详细步骤,请参阅使用 Azure 门户分配 Azure 角色

    设置 价值
    角色 存储 Blob 数据参与者
    将访问权限分配到 用户、组或服务主体
    成员 <你的 Stream Analytics 作业名称>

    显示 Azure 门户中“添加角色分配”页面的屏幕截图。

帐户级访问权限

  1. 前往你的存储帐户。

  2. 选择“访问控制(IAM)”

  3. 选择添加>添加角色分配以打开添加角色分配页面。

  4. 分配以下角色。 有关详细步骤,请参阅使用 Azure 门户分配 Azure 角色

    设置 价值
    角色 存储 Blob 数据参与者
    将访问权限分配到 用户、组或服务主体
    成员 <你的 Stream Analytics 作业名称>

    显示 Azure 门户中“添加角色分配”页面的屏幕截图。

通过命令行授予访问权限

容器级访问权限

若要授予对特定容器的访问权限,请使用 Azure CLI 运行以下命令:

az role assignment create --role "Storage Blob Data Contributor" --assignee <principal-id> --scope /subscriptions/<subscription-id>/resourcegroups/<resource-group>/providers/Microsoft.Storage/storageAccounts/<storage-account>/blobServices/default/containers/<container-name>

帐户级访问权限

若要授予对整个帐户的访问权限,请使用 Azure CLI 运行以下命令:

az role assignment create --role "Storage Blob Data Contributor" --assignee <principal-id> --scope /subscriptions/<subscription-id>/resourcegroups/<resource-group>/providers/Microsoft.Storage/storageAccounts/<storage-account>

创建 Blob 输入或输出

现在你的托管标识已配置完成,即可将 Blob 资源添加为流分析作业的输入或输出。

  1. 在 Azure Blob 存储输出接收器的输出属性窗口中,选择“身份验证模式”下拉列表并选择“托管标识”。 有关其他输出属性的信息,请参阅了解 Azure 流分析的输出。 完成后,选择“ 保存”。

    配置 Azure Blob 存储输出

启用虚拟网络访问

配置存储帐户的 防火墙和虚拟网络时,可以选择允许来自其他受信任的微软服务的网络流量。 当流分析使用托管标识进行身份验证时,它提供请求源自受信任的服务的证据。 以下说明说明如何启用此虚拟网络访问异常。

  1. 转到存储帐户配置窗格中的 “防火墙和虚拟网络 ”窗格。
  2. 确保启用“允许受信任的 Microsoft 服务访问此存储帐户”选项。
  3. 如果启用它,请选择“ 保存”。

启用 VNET 访问权限

删除托管标识

为流分析作业创建的托管标识只在删除该作业时才会被删除。 不能在不删除作业的情况下删除托管标识。 如果不想再使用托管标识,可以更改对输出的身份验证方法。 在删除作业之前,托管标识将继续存在,如果决定再次使用托管标识身份验证,则会使用该标识。

局限性

此功能的当前限制包括:

  1. 经典 Azure 存储帐户。

  2. 没有 Microsoft Entra ID 的 Azure 帐户。

  3. 不支持多租户访问。 为给定流分析作业创建的服务主体必须位于创建作业的同一Microsoft Entra租户中,并且不能将其与驻留在不同的Microsoft Entra租户中的资源一起使用。

后续步骤