Azure Databricks:在安装目录上执行 dbutils.fs.ls 时出现错误 403

问题描述 投票:0回答:1

我有一个 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 数据贡献者权限。

我做错了什么?任何帮助将不胜感激。

azure-blob-storage databricks azure-databricks
1个回答
0
投票

正如您所提到的,您已向 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 时,我遵循了以下步骤:

  • 我已向 SPN 和 Azuredatabricks 应用程序提供了我的 KEYVAULT KeyVault adminstartor。
  • 我已向 azuredatabricks 应用程序
  • 另请检查存储是否受到防火墙保护。如果存储帐户的存储受到防火墙保护,您可以将出站IP添加到存储白名单中。

enter image description here

enter image description here

如果您使用的是启用 Unity 目录的工作区,请参阅创建用于连接到 Azure Data Lake Storage Gen2 的存储凭据

© www.soinside.com 2019 - 2024. All rights reserved.