【发布时间】:2021-03-28 10:25:16
【问题描述】:
这个问题不是This request is not authorized to perform this operation. Azure blobClient的重复问题
我想从 Azure 函数访问 Azure 数据湖。我使用托管身份,并在我的 Data Lake IAM 选项卡中为此功能分配了“所有者”角色。一切正常,但只有当我在我的数据湖中允许“所有网络”时。一旦我切换到“选定的网络”,即使我将 Azure Function 的所有出站 IP 地址都添加到了数据湖的防火墙规则中,我也会收到“此请求无权执行此操作”。
我在 Azure 函数中添加了对 https://api.ipify.org 的调用,以查看其公共 IP 地址。我还使用socket.gethostbyname() 来获取数据湖主机名的解析 IP 地址(只是为了检查这是否可能被解析为 Microsoft 数据中心内的私有 IP,但不是,它是公共 IP)
我的函数的出站 IP 也出现在我的防火墙规则中:
我还是得到了
错误] 执行“Functions.json-deserialize-eventhub”(失败, Id=10554e46-2f5e-42a7-a9f7-a95dad1b4e30,持续时间=1063ms)结果: FailureException: HttpResponseError: 此请求无权 执行此操作 operation.RequestId:84928ea9-201e-0092-5a97-d46e78000000Time:2020-12-17T17:07:38.2792923ZErrorCode:AuthorizationFailureError:NoneStack: File "/azure-functions-host/workers/python/3.8/LINUX/X64/azure_functions_worker/dispatcher.py", 第 355 行,在 _handle__invocation_requestcall_result = await self._loop.run_in_executor(文件 “/usr/local/lib/python3.8/concurrent/futures/thread.py”,第 57 行,在 运行结果 = self.fn(*self.args, **self.kwargs)文件 "/azure-functions-host/workers/python/3.8/LINUX/X64/azure_functions_worker/dispatcher.py", 第 542 行,在 __run_sync_funcreturn func(**params)File “/home/site/wwwroot/json-deserialize-eventhub/init.py”,第 38 行, 在 maindlc.append_object(obj_converted, data_lake_target_url) 文件中 “/home/site/wwwroot/shared/datalake.py”,第 41 行,在 append_objectfor file_system_containers 中的容器:文件 "/home/site/wwwroot/.python_packages/lib/site-packages/azure/core/paging.py", 第 129 行,在 __next__return next(self._page_iterator)File "/home/site/wwwroot/.python_packages/lib/site-packages/azure/core/paging.py", 第 76 行,在 __next__self._response = self._get_next(self.continuation_token)文件 "/home/site/wwwroot/.python_packages/lib/site-packages/azure/storage/blob/_models.py", 第 401 行,在 _get_next_cbprocess_storage_error(error) 文件中 "/home/site/wwwroot/.python_packages/lib/site-packages/azure/storage/blob/_shared/response_handlers.py", 第 147 行,在 process_storage_errorraise 错误
代码本身比较简单,我基本上只是使用azure.storage.filedatalake模块中的DataLakeServiceClient与数据湖通信。
为什么这不起作用?如何允许我的函数写入/读取数据? VNet 集成目前不是一种选择。
【问题讨论】:
-
也许您需要数据湖数据所有者?
-
@BowmanZhu - 我试过了,但仍然得到“此请求无权执行此操作”。在数据湖的“网络”菜单中将“选定网络”切换为“所有网络”时,它可以工作...
标签: azure azure-functions azure-storage azure-data-lake azure-virtual-network