尝试从 Databricks Unity Catalog 连接到存储帐户时出现 403 错误

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

我设置了一个启用了 Unity Catalog 的 Databricks 实例。我已设置系统分配的托管标识 Databricks 访问连接器,并将访问连接器分配给

Storage Blob Data Contributor
角色。一切工作正常,我将存储帐户设置为 Unity Catalog 上的外部位置,并且能够读取/写入数据。

决定创建一个虚拟机跳转箱,以提高存储帐户内底层数据访问的安全性(只有选定的用户可以通过虚拟机访问存储帐户)。我创建了一个带有子网和

Microsoft.Storage
服务端点的 VNET。然后,我将存储帐户上的网络设置从
'Enable from all networks'
更改为
'Enabled from selected virtual networks and IP addresses'
。我将 VNET、Databricks Access Connector 和 Azure 数据工厂添加到防火墙中的资源实例列表中(设置为 .

我能够从 VM 内很好地连接和访问容器中的数据,我还能够使用 Azure 数据工厂成功测试与存储帐户的连接。但不幸的是,我无法读取/写入数据到存储帐户。

我收到了 403 错误,并带有指向以下消息的链接:

{
    "error": {
        "code": "AuthenticationFailed",
        "message": "Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature.\nRequestId:1d66f454-a01f-0045-599f-2bea5e000000\nTime:2024-10-31T14:13:32.0426358Z"
    }
}

我尝试解决这个问题的事情:

  1. 分配
    Storage Blob Data Contributor
    角色 Databricks 相关应用程序的所有相关系统分配的托管标识(访问连接器、实际的 databrickapp、Databricks 资源提供程序、AzureDatabricks 等)- 相同的错误。

希望这些托管身份之一能够提供身份验证(根据我的理解,这是来自访问连接器 - 但我必须通过尝试所有这些身份来确定) 2. 尝试将 Azure Databricks 的所有相关服务标签 IP 列入白名单 - 相同错误 我想也许将 IP 列入白名单可以设法绕过防火墙规则。

我对 azure 上的 databricks 比较陌生 - 不确定我忽略了什么。之前有其他人遇到过这个问题吗?

我试图尽可能避免使用私有端点,并尝试通过白名单来解决此问题。

databricks azure-databricks azure-virtual-network azure-storage-account azure-entra-id
1个回答
0
投票

错误:命令“g++”失败:没有这样的文件或目录[输出结束] 注意:此错误源自子进程,并且可能不是 点的问题。错误:pyodbc 构建轮子失败

安装

pyodbc
时会发生错误,因此系统没有构建 pyodbc 所需的编译器 (g++)。 我同意@Pratik Lad 的评论,

您可以尝试以下方法:

  • 您可以使用基于Linux的Azure VM
  • 运行 shell 脚本来设置并安装requirements.txt 中的依赖项。

pyodbc 需要 unixODBC 驱动程序管理器,您可以使用以下命令安装它们:

!apt install unixodbc-dev
!pip install pyodbc

结果:

Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
unixodbc-dev is already the newest version (2.3.9-5ubuntu0.1).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Requirement already satisfied: pyodbc in /databricks/python3/lib/python3.11/site-packages (4.0.38)
Note: you may need to restart the kernel using %restart_python or dbutils.library.restartPython() to use updated packages.

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