You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Fabric:外部应用写入OneLake的权限配置及上传错误排查

问题描述

我有一个包含Lakehouse的Microsoft Fabric工作区,需要将外部财务系统导出的CSV文件直接上传到该Lakehouse的Files区域。由于Fabric不支持SAS URI或账户密钥授权,因此采用服务主体(Service Principal,简称SP)进行操作。

已完成的配置

  • 创建服务主体并生成密钥,将其加入安全组,且为该SP授予工作区的Contributor访问权限
  • 在Fabric中启用两项必要权限:
    • Service principals can use Fabric APIs
    • Users can access data stored in OneLake with apps external to Fabric
  • 在Azure中为该服务主体配置Tenant.ReadWrite.All API权限,并已获得管理员同意

遇到的错误

PowerShell上传403错误

通过PowerShell测试文件上传时,返回HTTP 403(禁止访问)错误,具体信息:

User is not authorized to perform current operation for workspace '{workspace GUID}' and artifact '{lakehouse GUID}'

StorageException,Microsoft.WindowsAzure.Commands.Storage.Blob.Cmdlet.NewAzDataLakeGen2ItemCommand

推测是权限缺失,但Fabric无法像ADLS Gen2那样直接分配Storage Blob Data Contributor RBAC角色,因此询问所需的委托权限。

AzCopy端点错误

尝试用AzCopy上传文件时,日志显示**"Incorrect Endpoint"**(端点错误)。


解决方案

1. 补充Lakehouse级权限

Fabric中针对OneLake的文件操作,仅工作区Contributor权限不足,需为服务主体添加Lakehouse专属权限:

  • 进入Fabric工作区,打开目标Lakehouse
  • 点击右上角「管理权限」,将服务主体添加为Lakehouse Contributor或Lakehouse Admin(按需选择)

同时,Azure AD中需调整API权限(无需Tenant.ReadWrite.All,该权限范围过大且非必要),添加以下应用权限并获取管理员同意:

  • Microsoft.Fabric/workspaces/lakehouses/files/write
  • Microsoft.Fabric/workspaces/read

2. 修复AzCopy端点格式

OneLake的专属DFS端点格式为:

https://onelake.dfs.fabric.microsoft.com/<WorkspaceID>/<LakehouseID>/Files/

示例AzCopy上传命令:

azcopy copy "本地文件路径\file.csv" "https://onelake.dfs.fabric.microsoft.com/<工作区GUID>/<LakehouseGUID>/Files/" --recursive --service-principal --application-id <SP应用ID> --tenant-id <租户ID> --client-secret <SP密钥>

注意:不要使用ADLS Gen2的常规端点格式,必须使用OneLake专属端点。

3. PowerShell命令修正

若继续使用PowerShell,需对接OneLake的存储上下文,示例命令:

# 服务主体身份验证
Connect-AzAccount -ServicePrincipal -ApplicationId <SP应用ID> -TenantId <租户ID> -Credential (Get-Credential)

# 获取OneLake存储账户上下文(存储账户信息可在Lakehouse属性中查看)
$storageContext = (Get-AzStorageAccount -ResourceGroupName <Fabric资源组> -Name <OneLake存储账户名>).Context

# 上传文件到Lakehouse的Files区域
New-AzDataLakeGen2Item -FileSystem "Files" -Path "目标文件名.csv" -Source "本地文件路径\file.csv" -Context $storageContext

内容的提问来源于stack exchange,提问作者Jazza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 00:50:02