具有对象ID的客户端无权执行操作' Microsoft.DataFactory / datafactories / datapipelines / read'超范围

时间:2017-02-09 11:00:14

标签: azure azure-functions azure-data-factory

我试图以编程方式从azure函数调用数据工厂管道。抛出以下错误。

  

链接:   http://eatcodelive.com/2016/02/24/starting-an-azure-data-factory-pipeline-from-c-net/

     

授权失败:客户' XXXX-XXXXX-XXXX'对象ID' XXX829e05' XXXX-XXXXX'没有授权执行操作   ' Microsoft.DataFactory / datafactories / datapipelines /读取'超范围   ' /subscriptions/XXXXXX-4bf5-84c6-3a352XXXXXX/resourcegroups/fffsrg/providers/Microsoft.DataFactory/datafactories/ADFTestFFFS/datapipelines/ADFTutorialPipelineCustom'

试图搜索类似的问题,但搜索结果都没有给我解决我的问题,你能指导我们这可能是什么问题吗?

目标是,只要将文件添加到blob,就运行数据工厂管道。所以为了实现结果,我们尝试使用blob触发器从azure函数调用数据工厂管道。

非常感谢这方面的任何帮助。

由于

8 个答案:

答案 0 :(得分:6)

您收到的错误是您无权执行操作' Microsoft.DataFactory / datafactories / datapipelines / read'超出管道范围,因为您没有对datafactory具有相关权限。

您需要拥有"贡献者" /" DataFactoryContributor"权限创建&管理数据工厂资源或子资源。有关azure RBAC角色的更多详细信息,请参见以下链接:

https://docs.microsoft.com/en-us/azure/active-directory/role-based-access-built-in-roles

由于客户尝试从Azure Function中使用ADF客户端,因此建议使用AAD应用程序和服务主体来验证ADF客户端。您可以在此处找到有关创建AAD应用程序和服务主体的说明:

https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-authenticate-service-principal

请按照有关如何创建Active Directory应用程序,服务主体,然后将其分配给以下链接中的Data Factory Contributor角色的说明以及将服务主体与ADF客户端一起使用的代码示例。

答案 1 :(得分:5)

第1步:登录到您的Azure门户
步骤2:在左侧菜单栏中找到“订阅”,然后单击。
enter image description here

第3步:点击访问控制IAM,然后点击添加。enter image description here

步骤4:在“添加权限”窗口中,选择角色的贡献者。在“选择输入”框中,键入您在Azure AD中创建的应用名称(在Azure Active Directory中创建),然后选择它。就我而言,我创建了Azure资源管理。enter image description here

第5步:获得成功的许可后,在订阅窗口中单击“刷新”,您将看到您的应用程序显示在列表中。请参见以下示例。 enter image description here

答案 2 :(得分:2)

我们最近在同一条消息中遇到了这个问题,发现这是由于用户使用其他订阅(我们有2个)登录所导致的。使用az登录--subscription为我们解决了这个问题。

答案 3 :(得分:2)

使用Azure资源组和RBAC时常见问题 https://blogs.msdn.microsoft.com/azure4fun/2016/10/20/common-problem-when-using-azure-resource-groups-rbac/

此问题更有可能在较新的订阅中发生,并且通常发生在以前从未在该订阅中创建过某种资源类型的情况下。

订阅管理员通常通过在订阅级别授予资源组所有者的贡献者权限来解决此问题,这与他们将访问隔离到资源组级别而不是订阅级别的策略相矛盾。

根本原因

一些管理员说,某些资源需要访问订阅级别才能创建这些资源,并且资源组级别的“所有者”权限还不够。那是不对的。

让我们退后一步,首先了解它们的工作原理。

要以天蓝色方式配置任何资源(使用资源管理器模型),您需要有一个支持该资源创建的资源提供程序。例如,如果要配置虚拟机,则必须先在订阅中提供“ Microsoft.Compute”资源提供程序,然后才能执行此操作。

资源提供者仅在订阅级别上注册。

幸运的是,Azure资源管理器(ARM)足够智能,可以为您解决这一问题。设置新的Azure资源后,如果尚未在订阅中注册该资源类型所需的资源提供者,则ARM将尝试为您注册它。该操作(资源提供者注册)需要访问订阅级别。

默认情况下,所有新的Azure订阅都将预先注册有常用资源提供者的列表。例如,IoTHub的资源提供者就是其中之一。

当仅向用户授予特定资源组的所有者权限时,如果该用户尝试提供需要首次注册资源提供者的资源,则该操作将失败。这就是我们上面尝试配置IoThub时发生的情况。

因此,最重要的是,我们不要需要授予订阅级别的访问权限,以便用户能够在其资源组中创建HDInsight,IotHub和SQLDW等资源。只要已经注册了这些资源的资源提供者,便拥有所有者权利。

答案 4 :(得分:0)

解决方案:

  1. 步骤1:在Azure Active目录中注册应用程序。
  2. 第2步:分配'数据工厂贡献者'角色到同一个应用程序。我们可以通过使用电源壳实现这一点。
  3. 以下代码适合我。使用Azure凭据登录后,请在power shell中试用。
    实现:

    1. 第1步:$azureAdApplication = New-AzureRmADApplication -DisplayName <AppName> -HomePage <URL> -IdentifierUris <URL with domain> -Password <Password>
    2. 第2步:New-AzureRmRoleAssignment -RoleDefinitionName "Data Factory Contributor" -ServicePrincipalName $azureAdApplication.ApplicationId

答案 5 :(得分:0)

关注此帖子:https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-create-service-principal-portal

在本文中,将角色指定为“读者”,而应将其设置为“所有者”,否则将在部署时出现权限错误。

答案 6 :(得分:0)

我通过关注此帖子解决了: https://www.nwcadence.com/blog/resolving-authorizationfailed-2016 在PowerShell中使用命令:

Get-AzureRmResourceProvider -ListAvailable | Select-Object ProviderNamespace | Foreach-Object { Register-AzureRmResourceProvider -ProviderName $_.ProviderNamespace}

答案 7 :(得分:-1)

我通过找到企业应用程序>对象ID来解决。 (很奇怪,它没有使用App Reg> Application ID)

https://jeanpaul.cloud/2020/02/03/azure-data-factory-pipeline-execution-error/