使用以下 PySpark 代码,我成功挂载了 Azure OneLake 存储帐户。但是,当我尝试使用以下命令读取显示路径时,display(dbutils.fs.ls('/mnt/lake'))
出现以下错误:
操作失败:“禁止”,403,GET,https ://onelake.dfs.fabric.microsoft.com/DataEngineeringWKSP ?upn=false&resource=filesystem&maxResults=5000&directory=my_lakehouse.Lakehouse&timeout=90&recursive=false,禁止,“用户无权对工作区‘xxxxxx-ad19-489b-944e-82d6fc013b87’、工件‘xxxxx-3c39-44b8-8982-ddecef9e829c’执行当前操作。”
当我尝试读取 onelake 帐户中的文件时,出现类似的错误:
操作失败:“禁止”,403,HEAD,https://onelake.dfs.fabric.microsoft.com/DataEngineeringWKSP/sqlite_lakehouse.Lakehouse/Files/expdata.csv ?upn=false&action=getStatus&timeout=90
我用来挂载onelake存储账户的代码如下:
url = "abfss://[email protected]/sqlite_lakehouse.Lakehouse"
mount_folder = "/mnt/lake"
# OAuth configuration settings for OneLake
configs = {
"fs.azure.account.auth.type.onelake.dfs.fabric.microsoft.com": "OAuth",
"fs.azure.account.oauth.provider.type.onelake.dfs.fabric.microsoft.com": "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider",
"fs.azure.account.oauth2.client.id.onelake.dfs.fabric.microsoft.com": "xxxxxx-a061-4899-994b-81253d864bc8",
"fs.azure.account.oauth2.client.secret.onelake.dfs.fabric.microsoft.com": "xxxxxx~1Q.B-Ey12zs066D_G3.E6bslnE_LqY-aFs",
"fs.azure.account.oauth2.client.endpoint.onelake.dfs.fabric.microsoft.com": "https://login.microsoftonline.com/xxxxxxxxxxxxxf12fc6/oauth2/token"
}
mounted_list = dbutils.fs.mounts()
mounted_exist = False
for item in mounted_list:
if mount_folder in item.mountPoint:
mounted_exist = True
break
if not mounted_exist:
dbutils.fs.mount(source=url, mount_point=mount_folder, extra_configs=configs)
我认为我需要在 Azure Fabric 工作区中添加权限,但我很难找到添加权限的确切位置
意味着您当前的用户身份无权访问指定的 OneLake 工作区或 Lakehouse 工件。
正如您所提到的,您想要向服务主体提供权限,您可以按照以下步骤操作:
首先在管理门户下
接下来,授予服务主体访问权限。现在该功能已启用,您可以授予服务主体或托管标识对 Fabric 工作区的访问权限。为此,请导航到所需的工作区并选择“管理访问权限”。
接下来,点击“+ 添加人员或组”,然后键入服务主体或托管标识的名称。当它出现在建议中时,选择它并点击“添加”。
可用角色:
管理员:授予对工作区的完全控制权,包括删除权限。由于访问权限级别较高,通常不建议服务主体使用该权限。
成员:提供几乎完全的访问权限,但不包括修改工作区设置或管理访问权限的能力。
贡献者(推荐):允许执行大多数操作,例如管理内容,但无法修改成员访问权限或共享项目。此角色提供通过 API 访问 OneLake 所需的最低权限。
查看者:提供只读权限,用于查看工作区项目、运行 SQL 查询和执行管道。请注意,此角色不允许访问OneLake 的 API。
使用 Azure CLI 以下命令
此命令将生成一个名为Fabricator的新服务主体并显示以下详细信息:
appId代表客户端 ID,password 代表客户端密钥。这些凭证用于通过 Python SDK 向 OneLake 进行身份验证。
您需要安装以下软件包:
安装必要的软件包后,您可以使用以下代码片段进行身份验证并连接到 OneLake。
从 azure.identity 导入 ClientSecretCredential 从 azure.storage.filedatalake 导入 FileSystemClient
参考: 感谢@Sam Debruyn 撰写的关于如何使用服务主体身份验证访问 Microsoft Fabric 的 OneLake deltalake 0.25.5 的精彩文章