你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
使用 托管标识身份验证输出到 Azure Blob 存储时,流分析作业无需使用连接字符串即可直接访问存储帐户。 此功能可提高安全性,并使你能够在Azure内将数据写入虚拟网络(VNET)中的存储帐户。
本文展示如何通过 Azure 门户和 Azure 资源管理器部署,为流分析作业的 Blob 输出启用托管标识。
使用 Azure 门户创建流分析作业
首先,为 Azure 流分析 作业创建托管标识。
在 Azure 门户中,打开 Azure 流分析作业。
从左侧导航菜单中,选择“配置”下的“托管标识”。 然后,选中“使用系统分配的托管标识”旁的框,然后选择“保存”。
Azure 将在 Microsoft Entra ID 中为流分析作业的标识创建服务主体。 Azure管理新创建的标识的生命周期。 删除流分析作业时,Azure会自动删除关联的标识(即服务主体)。
保存配置时,服务主体的对象 ID(OID)显示为主体 ID,如以下部分所示:
服务主体与流分析作业同名。 例如,如果作业的名称是
MyASAJob,则服务主体的名称也是MyASAJob。
Azure 资源管理器部署
通过使用Azure 资源管理器,可以完全自动化流分析作业的部署。 可以使用 Azure PowerShell 或 Azure CLI 部署资源管理器模板。 以下示例使用Azure CLI。
创建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创建作业后,请使用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 中的作业托管标识,在下一步中将用于授予流分析作业访问存储帐户的权限。
创建作业后,请参阅本文的 授予 Stream Analytics 作业访问存储帐户权限 部分。
为流分析作业授予对存储帐户的访问权限
可以为流分析作业提供两个级别的访问权限:
- 容器级别访问: 此访问级别授予对特定现有容器的作业访问权限。
- 帐户级别访问权限: 此访问级别授予作业对存储帐户的常规访问权限,包括创建新容器的功能。
除非需要该作业来创建容器,否则请选择 容器级别访问权限 以授予作业所需的最低访问权限级别。 以下部分介绍了Azure门户和命令行的两个选项。
注意
由于全局复制或缓存延迟,撤销或授予权限可能需要一些时间。 更改应在八分钟内显示。
通过 Azure 门户授予访问权限
容器级访问权限
转到存储帐户中的容器配置窗格。
选择“访问控制 (IAM)”。
选择添加>“添加角色分配”以打开“添加角色分配”页面。
分配以下角色。 有关详细步骤,请参阅使用 Azure 门户分配 Azure 角色。
设置 值 角色 存储 Blob 数据参与者 将访问权限分配到 用户、组或服务主体 成员 <流分析作业的名称>
帐户级访问权限
转到存储帐户。
选择“访问控制 (IAM)”。
选择添加>添加角色分配以打开添加角色分配页面。
分配以下角色。 有关详细步骤,请参阅使用 Azure 门户分配 Azure 角色。
设置 值 角色 存储 Blob 数据参与者 将访问权限分配到 用户、组或服务主体 成员 <流分析作业的名称>
通过命令行授予访问权限
容器级访问权限
若要授予对特定容器的访问权限,请使用 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 资源作为输入或输出添加到流分析作业了。
在 Azure Blob 存储输出接收器的输出属性窗口中,选择“身份验证模式”下拉列表并选择“托管标识”。 有关其他输出属性的信息,请参阅了解 Azure 流分析的输出。 完成后,选择“保存”。
启用虚拟网络访问
配置存储帐户的 防火墙和虚拟网络时,可以选择允许来自其他受信任的微软服务的网络流量。 当流分析使用托管标识进行身份验证时,它提供请求源自受信任的服务的证据。 以下说明说明如何启用此虚拟网络访问异常。
- 转到存储帐户配置窗格中的 “防火墙和虚拟网络 ”窗格。
- 确保启用“允许受信任的 Microsoft 服务访问此存储帐户”选项。
- 如果启用它,请选择“ 保存”。
删除托管标识
为流分析作业创建的托管标识只在删除该作业时才会被删除。 不能在未删除作业的情况下删除托管标识。 如果不想再使用托管标识,可以更改对输出的身份验证方法。 在删除作业之前,托管标识将继续存在,如果决定再次使用托管标识身份验证,则会使用该标识。
限制
此功能的当前限制包括:
经典 Azure 存储帐户。
没有 Microsoft Entra ID 的 Azure 帐户。
不支持多租户访问。 为给定流分析作业创建的服务主体必须位于创建作业的同一Microsoft Entra租户中,并且不能将其与驻留在不同的Microsoft Entra租户中的资源一起使用。