你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

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

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

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

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

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

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

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

    系统分配的托管标识

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

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

    主体 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": "West US",
        "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 数据参与者
    将访问权限分配到 用户、组或服务主体
    成员 <流分析作业的名称>

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

帐户级访问权限

  1. 转到存储帐户。

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

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

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

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

    显示 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租户中的资源一起使用。

后续步骤