我有一个 Azure Databricks 工作区、一个启用了分层命名空间的存储帐户和一个服务主体。我已成功安装存储(输出为“True”):
configs = {
"fs.azure.account.auth.type": "OAuth",
"fs.azure.account.oauth.provider.type": "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider",
"fs.azure.account.oauth2.client.id": "[redacted]",
"fs.azure.account.oauth2.client.secret": "[redacted]",
"fs.azure.account.oauth2.client.endpoint": "https://login.microsoftonline.com/[redacted]/oauth2/token"
}
dbutils.fs.mount(
source = "abfss://[redacted]@[redacted].dfs.core.windows.net/",
mount_point = "/mnt/demo",
extra_configs = configs
)
现在我尝试查看挂载的目录内容:
dbutils.fs.ls("/mnt/demo")
我收到错误:
操作失败:“该请求无权执行此操作 使用此权限进行操作。", 403, GET, https://[redacted].dfs.core.windows.net/[redacted]?upn=false&resource=filesystem&maxResults=5000&timeout=90&recursive=false, AuthorizationPermissionMismatch, "此请求未被授权 使用此权限执行此操作。
我已仔细检查我的服务主体是否具有存储帐户的存储 Blob 数据贡献者权限。
我做错了什么?任何帮助将不胜感激。
正如您所提到的,您已向 SPN 提供了存储 Blob 贡献者角色。
我尝试安装 ADLS 并使用下面的方法,它确实对我有用:
dbutils.fs.ls("/mnt/new_raw")
结果:
[FileInfo(path='dbfs:/mnt/new_raw/Delta_folder/', name='Delta_folder/', size=0, modificationTime=1726556613000),
FileInfo(path='dbfs:/mnt/new_raw/Parquet_folder/', name='Parquet_folder/', size=0, modificationTime=1726567040000),
FileInfo(path='dbfs:/mnt/new_raw/control_table/', name='control_table/', size=0, modificationTime=1726556615000),
FileInfo(path='dbfs:/mnt/new_raw/synapse/', name='synapse/', size=0, modificationTime=1726031781000)]
当我安装 ADLS 时,我遵循了以下步骤:
如果您使用的是启用 Unity 目录的工作区,请参阅创建用于连接到 Azure Data Lake Storage Gen2 的存储凭据