本页介绍如何使用 Azure 托管标识以 Unity Catalog 用户的身份连接至存储容器。
什么是Azure托管标识?
Unity Catalog 可以配置为使用 Azure 托管标识 代表 Unity Catalog 用户访问存储容器。 托管标识为应用程序提供标识,以便在应用程序连接到支持Microsoft Entra ID身份验证的资源时使用。
可使用 Unity Catalog 中的托管标识来支持两个主要用例:
- 作为连接到用于存储托管表的元存储托管存储帐户的标识。
- 作为连接到其他外部存储帐户的身份标识(无论是用于文件访问,还是通过外部表访问现有数据集)。
与使用服务主体配置 Unity Catalog 相比,使用托管标识配置 Unity Catalog 具有以下优点:
- 托管标识不需要你维护凭据或轮换机密。
- 如果 Azure Databricks 工作区部署在自己的 VNet(也称为 VNet 注入)中,并且使用存储防火墙来保护 Azure Data Lake Storage 帐户,则可以使用托管身份将工作区连接到该帐户。 请参阅 (建议用于 VNet 注入的工作区)根据托管标识配置受信任的访问到 Azure 存储。
为 Unity Catalog 配置托管标识
若要将托管标识配置为与 Unity 目录一起使用,请先为 Azure 中的 Azure Databricks 创建访问连接器。 默认情况下,访问连接器将使用系统分配的托管标识进行部署。 你可以选择附加用户分配的托管标识。 然后,向 Azure Data Lake Storage 帐户授予托管身份的访问权限,并在创建 Unity Catalog 元存储或存储凭据时使用访问连接器。
要求
创建访问连接器的 Azure 用户或服务主体必须:
- 是Azure资源组的
Contributor或Owner。
向存储帐户授予托管标识的Azure用户或服务主体必须:
- 是
Owner或在存储帐户上具有User Access AdministratorAzure RBAC 角色的用户。
步骤 1:为 Azure Databricks 创建 访问连接器
用于 Azure Databricks 的 Access 连接器是第一方Azure资源,可用于将托管标识连接到 Azure Databricks 帐户。 Azure Databricks 的每个access连接器都可以包括系统分配的托管标识、一个或多个用户分配的托管标识,或同时包含这两者。
以资源组的参与者或所有者身份登录到Azure Portal。
单击“+ 创建”或“创建新资源”。
搜索 Access Connector for Azure Databricks 并选择它。
单击 “创建” 。
在“基本信息”选项卡上,接受、选择或输入以下字段的值:
- Subscription:这是 Azure 订阅中将创建访问连接器的订阅。 默认值为当前使用的Azure订阅。 它可以是租户中的任何订阅。
- Resource group:这是access连接器将在其中创建的Azure资源组。
- 名称:输入表明连接器用途的名称。
- Region:这应与您要连接的存储帐户所在的区域相同。
单击 下一步,输入标记,然后单击 下一步。
在“托管标识”选项卡上,按如下所示创建托管标识:
- 若要使用系统分配的托管标识,请将“状态”设置为“打开”
- 若要添加用户分配的托管标识,请单击 + 添加 并选择一个或多个用户分配的托管标识。
单击 审阅 + 创建。
看到“验证通过”消息后,单击“创建”。
部署完成后,单击“转到资源”。
记下“资源 ID”。
资源 ID 的格式为:
/subscriptions/12f34567-8ace-9c10-111c-aea8eba12345c/resourceGroups/<resource-group>/providers/Microsoft.Databricks/accessConnectors/<connector-name>
步骤 2:向存储帐户授予托管标识的访问权限
若要授予此步骤中的权限,必须在 storage 帐户上具有 Owner 或 User Access Administrator Azure RBAC 角色。
向存储帐户和容器授予托管标识的访问权限时,您有以下选项:
- 使用
Storage Blob Data Contributor角色授予整个存储帐户读取和写入访问权限。 - 在存储账户上使用
Storage Blob Delegator角色授予更有限的权限,并使用Storage Blob Data Contributor角色读取和写入特定容器的访问权限。
以下说明假定你在存储帐户上授予 Storage Blob Data Contributor 角色,但你可以根据需要替换其他选项:
登录到Azure Data Lake Storage帐户。
转到 Access Control (IAM),单击 + 添加,然后选择 Add 角色分配。
选择 Storage Blob 数据参与者角色,然后单击 Next。
在将访问权限分配到下,选择托管身份(Managed Identity)。
单击+选择成员,然后选择Azure Databricks 的访问连接器或用户分配的托管标识。
搜索连接器名称或用户分配的标识,将其选中,然后单击“查看并分配”。
步骤 3:向托管身份授予对文件事件的访问权限
若要配置所需的Azure角色并为外部位置启用文件事件,请参阅(建议)为外部位置启用文件事件。
使用托管标识访问 Unity Catalog 的根存储帐户
本节介绍了在创建 Unity Catalog 元存储时,如何授予托管身份对根存储帐户的访问权限。
若要了解如何升级现有 Unity Catalog 元存储以使用托管标识,请参阅 将现有 Unity Catalog 元存储升级为使用托管标识来访问其根存储。
作为 Azure Databricks 帐户管理员,登录到 Azure Databricks 帐户控制台。
单击
目录。
单击创建数据存储。
输入以下字段的值:
元存储的名称。
将在其中部署元存储的区域。
为了获得最佳性能,请在同一云区域中共同定位访问连接器、工作区位置、元存储和云存储位置。
ADLS Gen 2 路径:请输入用作元数据存储根目录的存储容器路径。
前缀
abfss://会自动添加。Access 连接器 ID:请输入 Azure Databricks 访问连接器的资源 ID,格式为:
/subscriptions/12f34567-8ace-9c10-111c-aea8eba12345c/resourceGroups/<resource-group>/providers/Microsoft.Databricks/accessConnectors/<connector-name>(可选)Managed Identity ID:如果使用用户分配的托管身份创建访问连接器,请输入托管身份的资源 ID。
单击 “创建” 。
出现提示时,选择工作区以链接到元存储。
使用托管身份访问通过 Unity Catalog 管理的外部存储。
Unity 目录使你能够使用存储凭证和外部位置来访问存储帐户中的现有数据。 存储凭证存储托管身份,外部位置定义存储路径并引用存储凭证。 可以使用此方法授予和控制对云存储中现有数据的访问,并在 Unity Catalog 中注册外部表。
存储凭据可以保存托管标识或服务主体。 使用托管标识的好处是允许 Unity Catalog 访问受网络规则保护的存储帐户,这在使用服务主体时是无法实现的,并且免去了管理和轮换密钥的需要。
若要使用托管标识创建存储凭据,并将该存储凭据分配给外部位置,请按照使用 Unity Catalog 连接到云对象存储中的说明进行操作。
(建议用于 VNet 注入的工作区) 配置受信任的访问到 Azure Storage,基于您的托管身份标识。
如果 Azure Databricks 工作区部署在您自己的 Azure 虚拟网络中,也称为 “VNet 注入”,并且使用存储防火墙来保护 Azure Data Lake Storage 帐户,则必须:
启用您的 Azure Databricks 工作区以访问 Azure Storage。
使托管标识能够访问 Azure 存储。
步骤 1. 使您的 Azure Databricks 工作区能够访问 Azure Storage
必须配置网络设置,以允许 Azure Databricks 工作区访问 Azure Data Lake Storage。 可以在 Azure Data Lake Storage 上配置专用终结点或从虚拟网络访问,以便允许从子网连接到 Azure Data Lake Storage 账户。
有关说明,请参阅 为 Azure Databricks 工作区授予对 Azure Data Lake Storage 的访问权限。
步骤 2:启用托管标识以访问 Azure 存储
仅当 Azure Storage 帐户中“允许受信任的服务列表中的 Azure 服务访问此存储帐户”功能被禁用时,才需要执行此步骤。 如果启用了该配置,那么:
- 任何与存储账户位于同一租户中的 Azure Databricks 访问连接器都可以访问存储账户。
- 任何Azure受信任的服务都可以访问存储帐户。 请参阅 授予对受信任的 Azure 服务的访问权限。
以下说明包括用于禁用此配置的步骤。 可以使用Azure Portal或Azure CLI。
使用Azure Portal
登录到Azure Portal,找到并选择Azure Storage帐户,然后转到Networking选项卡。
将 公共网络访问 设置为从所选虚拟网络和 IP 地址启用。
可以选择将 Public Network Access 设置为 Disabled。 托管身份可用于绕过对公有网络访问的检查。
在 Resource 实例下,选择 资源类型 为 Microsoft.Databricks/accessConnectors,然后选择您的 Azure Databricks 访问连接器。
在 例外 下,取消选中 允许受信任服务列表中的 Azure 服务访问此存储帐户 复选框。
使用Azure CLI
install Azure CLI 和 sign in。 若要使用用户帐户或服务主体登录,请参阅 Sign with the Azure CLI。
向存储帐户添加网络规则:
az storage account network-rule add \ --subscription <subscription id of the resource group> \ --resource-id <resource Id of the access connector for Azure Databricks> \ --tenant-id <tenant Id> \ -g <name of the Azure Storage resource group> \ --account-name <name of the Azure Storage resource> \按以下格式添加资源 ID:
/subscriptions/12f34567-8ace-9c10-111c-aea8eba12345c/resourceGroups/<resource-group>/providers/Microsoft.Databricks/accessConnectors/<connector-name>创建网络规则后,转到Azure Portal中的Azure Storage帐户,在 Networking 选项卡的 resource 实例资源类型
Microsoft.Databricks/accessConnectors下查看托管标识。在 Exceptions 下,取消选中“允许受信任服务列表中的 Azure 服务访问该存储帐户”复选框。
(可选)将 Public Network Access 设置为 Disabled。 托管标识符可用于绕过对公共网络访问的检查。
标准方法是将此值设置为“从选定的虚拟网络和 IP 地址启用”。
(推荐)配置 Azure 存储防火墙以允许无服务器 SQL 仓库进行访问。
无服务器 SQL 仓库 是在 Azure Databricks 的 Azure 订阅中运行的计算资源,而不是在您的 Azure 订阅中。 如果您在 Azure Data Lake Storage 上配置防火墙,并计划使用无服务 SQL 仓库,则必须配置防火墙以允许从无服务 SQL 仓库进行访问。
升级您现有的 Unity Catalog 元存储,以使用托管身份访问其根存储
如果你具有使用服务主体创建的 Unity Catalog 元存储,并且希望将其升级为使用托管标识,则可以使用 API 调用对其进行更新。
根据 配置 Unity Catalog 的托管标识中的说明,为 Azure Databricks 创建访问连接器,并将其权限分配给用于 Unity Catalog 元存储根存储的存储容器。
可以使用系统分配的托管标识或用户分配的托管标识创建该访问连接器。
记下访问连接器的资源 ID。 如果使用了用户分配的托管标识,也请记下其资源 ID。
作为帐户管理员,登录到分配给元数据存储的 Azure Databricks 工作区。
你不必是工作区管理员。
在本地环境中创建Azure Databricks 身份验证配置文件,其中包含以下内容:
- 在生成个人访问令牌的工作区中,提供工作区实例名称和工作区 ID。
- 个人访问令牌值。
使用 Databricks CLI 运行以下命令以重新创建存储凭据。
替换占位符的值:
-
<credential-name>:存储凭据的名称。 -
<access-connector-id>:Azure Databricks access 连接器的资源 ID,格式为/subscriptions/12f34567-8ace-9c10-111c-aea8eba12345c/resourceGroups/<resource-group>/providers/Microsoft.Databricks/accessConnectors/<connector-name> -
<managed-identity-id>:如果使用用户分配的托管标识创建了访问连接器,请指定管理标识的资源 ID。 -
<profile-name>:Azure Databricks 身份验证配置文件的名称。
databricks storage-credentials create --json '{ "name\": "<credential-name>", "azure_managed_identity": { "access_connector_id": "<access-connector-id>", "managed_identity_id": "<managed-identity-id>" } }' --profile <profile-name>-
记下响应中的storage凭据 ID。
运行以下 Databricks CLI 命令以检索
metastore_id。 将<profile-name>替换为 Azure Databricks 身份验证配置文件的名称。databricks metastores summary --profile <profile-name>运行以下 Databricks CLI 命令,使用新的根存储凭据更新元存储库。
替换占位符的值:
-
<metastore-id>:在上一步中检索到的元存储 ID。 -
<storage-credential-id>:存储凭据 ID。 -
<profile-name>:Azure Databricks 身份验证配置文件的名称。
databricks metastores update <metastore-id> \ --storage-root-credential-id <storage-credential-id> \ --profile <profile-name>-