您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn.

使用托管标识在 Azure Data Lake Storage Gen1 中对流分析进行身份验证

Azure 流分析支持使用 Azure Data Lake Storage (ADLS) Gen1 输出进行托管标识身份验证。 标识是 Azure Active Directory 中注册的表示给定流分析作业的托管应用程序,可用于对目标资源进行身份验证。 托管标识消除了基于用户的身份验证方法的如下限制:发生密码更改或用户令牌过期(每隔 90 天过期)时需要重新进行身份验证。 此外,托管标识有助于将输出到 Azure Data Lake Storage Gen1 的流分析作业部署自动化。

本文将介绍下面三种方法,用于为输出到 Azure Data Lake Storage Gen1 的 Azure 流分析作业启用托管标识:通过 Azure 门户、Azure 资源管理器模板部署以及适用于 Visual Studio 的 Azure 流分析工具。

备注

本文已经过更新,以便使用 Azure Az PowerShell 模块。 若要与 Azure 交互,建议使用的 PowerShell 模块是 Az PowerShell 模块。 若要开始使用 Az PowerShell 模块,请参阅安装 Azure PowerShell。 若要了解如何迁移到 Az PowerShell 模块,请参阅 将 Azure PowerShell 从 AzureRM 迁移到 Az

Azure 门户

  1. 首先创建新的流分析作业,或在 Azure 门户中打开现有的作业。 在屏幕左侧的菜单栏中,选择“配置”下面的“托管标识”。

    配置流分析托管标识

  2. 在右侧显示的窗口中选择“使用系统分配的托管标识”。 单击“保存”,为 Azure Active Directory 中的流分析作业标识创建服务主体。 新建标识的生命周期将由 Azure 管理。 删除流分析作业时,Azure 会自动删除关联的标识(即服务主体)。

    保存配置后,服务主体的对象 ID (OID) 将列为主体 ID,如下所示:

    流分析服务主体 ID

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

  3. 在 ADLS Gen1 输出接收器的输出属性窗口中,单击“身份验证模式”下拉列表并选择“托管标识”。

  4. 填写其余的属性。 若要详细了解如何创建 ADLS 输出,请参阅使用流分析创建 Data Lake Store 输出。 完成后,单击“保存”。

    配置 Azure Data Lake Storage

  5. 导航到 ADLS Gen1 的“概述”页,单击“数据资源管理器”。

    配置 Data Lake Storage - 概述

  6. 在“数据资源管理器”窗格中选择“访问”,然后在“访问”窗格中单击“添加”。

    配置 Data Lake Storage - 访问

  7. 在“选择用户或组”窗格中的文本框内,键入服务主体的名称。 请记住,服务主体的名称也是相应流分析作业的名称。 开始键入主体名称时,它会显示在文本框下面。 选择所需的服务主体名称,然后单击“选择”。

    选择服务主体名称

  8. 在“权限”窗格中,选中“写入”和“执行”权限并将其分配到“此文件夹和所有子文件夹”。 然后单击“确定”。

    选择写入和执行权限

  9. 该服务主体将列在“访问”窗格中“分配的权限”下面,如下所示。 现在,可以返回并启动流分析作业。

    门户中的流分析访问列表

    若要详细了解 Data Lake Storage Gen1 文件系统权限,请参阅 Azure Data Lake Storage Gen1 中的访问控制

适用于 Visual Studio 的流分析工具

  1. 在 JobConfig.json 中,将“使用系统分配的标识”设置为“True”。

    流分析作业配置托管标识

  2. 在 ADLS Gen1 输出接收器的输出属性窗口中,单击“身份验证模式”下拉列表并选择“托管标识”。

    ADLS 输出托管标识

  3. 填写其余的属性,然后单击“保存”。

  4. 在查询编辑器中,单击“提交到 Azure”。

    在你提交作业时,这些工具将执行下面两项操作:

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

    • 为作业中使用的 ADLS Gen1 前缀路径自动设置“写入”和“执行”权限,并将这些权限分配给此文件夹和所有子级。

  5. 可以在生成计算机上(在 Visual Studio 之外)使用流分析 CI.CD NuGet 包 1.5.0 或更高版本生成带有以下属性的资源管理器模板。 按照下一节中的资源管理器模板部署步骤获取服务主体,并通过 PowerShell 授予对该服务主体的访问权限。

资源管理器模板部署

  1. 可以通过在资源管理器模板的 resource 节中包含以下属性,来创建带有托管标识的 Microsoft.StreamAnalytics/streamingjobs 资源:

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

    此属性告知 Azure 资源管理器为你的 Azure 流分析作业创建和管理标识。

    示例作业

    {
      "Name": "AsaJobWithIdentity",
      "Type": "Microsoft.StreamAnalytics/streamingjobs",
      "Location": "West US",
      "Identity": {
        "Type": "SystemAssigned",
      },
      "properties": {
        "sku": {
          "name": "standard"
        },
        "outputs": [
          {
            "name": "string",
            "properties":{
              "datasource": {
                "type": "Microsoft.DataLake/Accounts",
                "properties": {
                  "accountName": "myDataLakeAccountName",
                  "filePathPrefix": "cluster1/logs/{date}/{time}",
                  "dateFormat": "YYYY/MM/DD",
                  "timeFormat": "HH",
                  "authenticationMode": "Msi"
              }
            }
          }
        }
      }
    }
    

    示例作业响应

    {
     "Name": "mySAJob",
     "Type": "Microsoft.StreamAnalytics/streamingjobs",
     "Location": "West US",
     "Identity": {
       "Type": "SystemAssigned",
         "principalId": "GUID",
         "tenantId": "GUID",
       },
       "properties": {
         "sku": {
           "name": "standard"
         },
      }
    }
    

    记下作业响应中的主体 ID,以授予对所需 ADLS 资源的访问权限。

    “租户 ID”是在其中创建了服务主体的 Azure Active Directory 租户的 ID。 服务主体在订阅信任的 Azure 租户中创建的。

    “类型”表示托管标识的类型(参阅“托管标识的类型”)。 仅支持系统分配的类型。

  2. 使用 PowerShell 提供对服务主体的访问权限。 若要通过 PowerShell 授予对服务主体的访问权限,请执行以下命令:

    Set-AzDataLakeStoreItemAclEntry -AccountName <accountName> -Path <Path> -AceType User -Id <PrinicpalId> -Permissions <Permissions>
    

    PrincipalId 是服务主体的对象 ID,创建服务主体后,会在门户屏幕上列出此 ID。 如果使用资源管理器模板部署创建了作业,则对象 ID 将列在作业响应的标识属性中。

    示例

    PS > Set-AzDataLakeStoreItemAclEntry -AccountName "adlsmsidemo" -Path / -AceType
    User -Id 14c6fd67-d9f5-4680-a394-cd7df1f9bacf -Permissions WriteExecute
    

    若要详细了解上述 PowerShell 命令,请参阅 Set-AzDataLakeStoreItemAclEntry 文档。

删除托管标识

仅当删除流分析作业后,才会删除为该作业创建的托管标识。 如果不删除作业,则无法删除其托管标识。 如果不想再使用托管标识,可以更改对输出的身份验证方法。 在删除作业之前,托管标识会始终存在,如果决定再次使用托管标识身份验证,将再次使用该标识。

限制

此功能不支持以下特性:

  1. 多租户访问:为给定流分析作业创建的服务主体将驻留在创建该作业的 Azure Active Directory 租户上,不能用于驻留在不同 Azure Active Directory 租户上的资源。 因此,只能将 MSI 用在 ADLS Gen 1 资源上,且这些资源必须位于 Azure 流分析作业所在的 Azure Active Directory 租户中。

  2. 用户分配的标识 :不支持。 这意味着,用户不能输入自己的供流分析作业使用的服务主体。 服务主体由 Azure 流分析生成。

后续步骤