Azure Data Lake:此请求未被授权执行此操作

Azure Data Lake:此请求未被授权执行此操作,azure,azure-functions,azure-storage,azure-data-lake,azure-virtual-network,Azure,Azure Functions,Azure Storage,Azure Data Lake,Azure Virtual Network,这个问题不是重复的 我想从Azure函数访问Azure数据湖。我使用托管标识,并在我的Data Lake IAM选项卡中为此功能分配了“所有者”角色。只有当我在我的数据池中允许“所有网络”时,一切都能正常工作。当我切换到“选定网络”时,我会得到“此请求未被授权执行此操作”,即使我已将Azure功能的所有出站IP地址添加到数据湖的防火墙规则中 我在Azure函数中添加了对的调用,以查看其公共IP地址。我还使用socket.gethostbyname()获取数据湖主机名的解析IP地址(只是为了检查此

这个问题不是重复的

我想从Azure函数访问Azure数据湖。我使用托管标识,并在我的Data Lake IAM选项卡中为此功能分配了“所有者”角色。只有当我在我的数据池中允许“所有网络”时,一切都能正常工作。当我切换到“选定网络”时,我会得到“此请求未被授权执行此操作”,即使我已将Azure功能的所有出站IP地址添加到数据湖的防火墙规则中

我在Azure函数中添加了对的调用,以查看其公共IP地址。我还使用
socket.gethostbyname()
获取数据湖主机名的解析IP地址(只是为了检查此地址是否可能解析为Microsoft数据中心内的私有IP,但不是,它是公共IP)

我的功能的出站IP也出现在我的防火墙规则中:

但我还是得到了

错误]执行“Functions.json反序列化eventhub”(失败, Id=10554e46-2f5e-42a7-a9f7-a95dad1b4e30,持续时间=1063ms)结果: FailureException:HttpResponseError:此请求未被授权 执行此操作 操作.RequestId:84928ea9-201e-0092-5a97-D46E7800000时间:2020-12-17T17:07:38.279223错误代码:授权失败错误:非堆栈:文件 “/azure functions host/workers/python/3.8/LINUX/X64/azure\u functions\u worker/dispatcher.py”, 第355行,在\u handle\u调用\u requestcall\u result=wait中 self.\u循环。在执行器(文件)中运行 “/usr/local/lib/python3.8/concurrent/futures/thread.py”,中的第57行 runresult=self.fn(*self.args,**self.kwargs)文件 “/azure functions host/workers/python/3.8/LINUX/X64/azure\u functions\u worker/dispatcher.py”, 第542行,在uuu run_sync_func返回func(**params)文件中 “/home/site/wwwroot/json反序列化eventhub/init.py”,第38行, 在maindlc.append_对象(obj_转换,数据_lake_目标_url)文件中 “/home/site/wwwroot/shared/datalake.py”,第41行,在append_objectfor中 文件中的容器\u系统\u容器:文件 “/home/site/wwwroot/.python_packages/lib/site packages/azure/core/paging.py”, 第129行,在下一个返回下一个(self.\u page\u迭代器)文件中 “/home/site/wwwroot/.python_packages/lib/site packages/azure/core/paging.py”, 第76行,在下一个自我回答中= self.\u获取下一个(self.continuation\u令牌)文件 “/home/site/wwwroot/.python_packages/lib/site packages/azure/storage/blob/_models.py”, 第401行,在_get_next_cbprocess_storage_error(错误)文件中 “/home/site/wwwroot/.python\u packages/lib/site packages/azure/storage/blob/\u shared/response\u handlers.py”, 第147行,过程中存储错误上升错误

代码本身非常简单,我基本上只使用
azure.storage.filedatalake
模块中的
DataLakeServiceClient
与数据湖通信


为什么这不起作用?我如何允许我的函数写入/读取数据?VNet集成目前不是一个选项。

从错误中,它表示HTTP响应错误:此请求无权执行此操作

因此,除了添加“所有者”RBAC角色外,还请添加“存储Blob数据所有者”RBAC角色。

在将存储帐户配置为允许从特定的公共internet IP地址范围进行访问时,这是一种特殊情况

与存储帐户部署在同一地区的服务使用 用于通信的专用Azure IP地址。因此,您无法 基于特定Azure服务的公共资源限制对这些服务的访问 出站IP地址范围


我还看到你的截图中有一个私有IP
172.16.0.5
。你可以在Azure Data Lake区域不同区域的另一个Azure函数中创建相同的函数应用程序来验证这一点。

也许你需要datalake Data owner?@BowmanZhu-我尝试过了,但仍然得到了支持“此请求未被授权执行此操作。当在data lake的“网络”菜单中将“选定网络”切换为“所有网络”时,它可以工作…不幸的是,这并不能解决问题。我为我的函数指定了“存储Blob数据所有者”角色,并在网络选项中选择了“选定网络”:403-此请求未被授权执行此操作”。只要我切换到“所有网络”",很好地观察到,这确实有效!问题是:当我不想通过VNet集成路线实现该功能时,我现在如何将这些私有IP列为白名单?如果这不起作用,那将很奇怪,我必须通过间接路线将这两个资源放在不同的区域,以强制它们进入公共网络ic路由将是一个更便宜的选择(因为我不需要VNet集成的高级计划),不幸的是,
IP网络规则只允许用于公共internet IP地址。IP地址范围为专用网络保留(如RFC 1918中的定义)IP规则中不允许使用。
此外,我认为Azure没有为我们暴露PaaS存储帐户的基础结构,我们也不知道特定的私有IP范围。@christian您已经正确指出,当您的Azure功能使用消费计划并且托管在同一区域时,这会成为一个问题。Mo仅为此将功能迁移到其他区域似乎不是一个正确的解决方案。从data lake gen2的角度来看,Azure功能未被识别为“受信任的Azure服务”,这让人感到惊讶。是否有人设法解决了此问题,或者Microsoft是否已经在努力解决此问题?