为什么我无权使用 Python 在 Data Lake gen2 中创建文件系统

Why am I not autorized to create a file system in Datalake gen2 with Python

使用 Python 中的 azure.storage.filedatalake import DataLakeServiceClient,我创建了将文件上传到我的 Azure datalake gen 2 的功能。这应该可以正常工作,因为我上传的文件确实显示在我的 Datalake 中, 当 运行 我的代码在本地和我的 azurewebsite.net.

我现在正在尝试创建可以在我的 Datalake 中创建一个新 container/file-system 的功能,然后我可以将文件上传到其中。这在本地有效,但是当我在我的 azurewebsite 上尝试此操作时,出现以下错误:

HttpResponseError /project/create_file_container/
This request is not authorized to perform this operation.
ErrorCode: AuthorizationFailiure

我可以看到代码在这个特定点失败了:

service_client = settings.SERVICE_CLIENT
# Creates a new datalake file_system for the org
system_name = 'org-1'
service_client.create_file_system(file_system=system_name) #<-- Fails on this line

我的service_client定义为:

STORAGE_ACCOUNT_NAME = 'my_datalake'
STORAGE_ACCOUNT_KEY = 'my account key'

global SERVICE_CLIENT
SERVICE_CLIENT = DataLakeServiceClient(account_url="{}://{}.dfs.core.windows.net".format(
    "https", STORAGE_ACCOUNT_NAME), credential=STORAGE_ACCOUNT_KEY)

创建 file_systems 时是否需要提供一些额外的身份验证?我假设因为我可以上传文件,所以也允许创建 file_systems。

我遇到过同样的问题,这是一个权限问题。确保在 Data Lake Storage Gen2 存储帐户范围内为服务主体分配了 Blob 存储贡献者角色。

注意:您可以将角色分配给您的父级订阅或资源组,但将其分散到存储帐户需要时间进行分配。如果您将订阅或资源分配给订阅或资源组,然后建立存储帐户,您应该立即继承该任务。当你完成一节课时,你应该直接将你的帐户附加到存储帐户,这样它就不会被阻止,你也不必等待,如果你有一个已经使用的存储帐户。