这个问题不是此请求未被授权执行此操作。Azure blobClient的翻版
我想从Azure函数访问Azure数据湖。我使用托管标识,并在Data选项卡中为该函数指定了一个“所有者”角色。当我允许数据湖中的“所有网络”时,一切都可以工作,但是只有当我允许“所有网络”在我的数据湖中。一旦我切换到“选定的网络”,即使我将Azure功能的所有出站IP地址添加到数据湖的防火墙规则中,也会得到“此请求无权执行此操作”。
我在Azure函数中添加了一个对https://api.ipify.org的调用,以查看其公共IP地址。我还使用socket.gethostbyname()
获取数据池主机名的解析IP地址(只是为了检查这是否可能被解析为微软数据中心内的私有IP,但它不是,它是一个公共IP)
我函数的出站IP也出现在我的防火墙规则中:
但我还是得到
执行的‘Functions.json-deserialize’( File,Id=10554e46-2f5e-42a7-a9f7-a95dad1b4e30,Duration=1063ms)结果: FailureException: HttpResponseError:此请求未被授权执行此文件"/azure-functions-host/workers/python/3.8/LINUX/X64/azure_functions_worker/dispatcher.py",行355,在"/usr/local/lib/python3.8/concurrent/futures/thread.py",=self._loop.run_in_executor(文件_handle__invocation_requestcall_result第57行)中,在_handle__invocation_requestcall_result= self.fn(*self.args,**self.kwargs)文件第542行中,在文件"/home/site/wwwroot/json-deserialize-eventhub/init.py",(**params)第38行中,在maindlc.append_object(obj_converted,data_lake_target_url)文件"/home/site/wwwroot/shared/datalake.py“中,第41行,在file_system_containers:File "/home/site/wwwroot/.python_packages/lib/site-packages/azure/core/paging.py",第129行的append_objectfor容器中,在"/home/site/wwwroot/.python_packages/lib/site-packages/azure/core/paging.py",的__next__return next(self._page_iterator)文件第76行,在__next__self._response =self._get_next(self.continuation_token)文件的第401行,在"/home/site/wwwroot/.python_packages/lib/site-packages/azure/storage/blob/_shared/response_handlers.py",文件_get_next_cbprocess_storage_error(错误)第147行中,在process_storage_errorraise错误中
代码本身很简单,我基本上只是使用来自azure.storage.filedatalake
模块的azure.storage.filedatalake
来与数据湖进行通信。
为什么这不管用?如何允许我的函数写入/读取数据?VNet集成目前还不是一种选择。
发布于 2020-12-21 06:33:42
当您将存储帐户配置为允许从特定的公共internet IP地址范围访问时,那里是一种特例。
部署在与存储帐户相同区域的服务使用专用的Azure IP地址进行通信。因此,您不能根据特定Azure服务的公共出站IP地址范围限制对它们的访问。
我还在截图中看到了一个私有的IP 172.16.0.5
。您可以在与Azure Data区域不同的区域中的另一个Azure函数中创建相同的函数应用程序来验证这一点。
发布于 2020-12-18 01:45:00
从错误中可以看出HTTP响应错误:此请求未被授权执行此操作。
因此,除了添加“所有者”RBAC角色之外,还请添加“Storage数据所有者”RBAC角色。
https://stackoverflow.com/questions/65345629
复制相似问题