创建用于连接到 Azure Data Lake Storage Gen2 的存储凭据

本文介绍了如何在 Unity Catalog 中创建存储凭据以连接到 Azure Data Lake Storage Gen2。

为了管理对保存着表的基础云存储的访问,Unity Catalog 使用以下对象类型:

  • 存储凭据 - 封装提供对云存储的访问权限的长期云凭据。
  • 外部位置 - 包含对存储凭据和云存储路径的引用。

有关详细信息,请参阅 使用 Unity 目录管理对云存储的访问权限。

注意

如果要使用 Unity 目录来管理对外部服务(而不是云存储)的访问,请参阅 使用服务凭据管理对外部云服务的访问。

Unity Catalog 支持 Azure Databricks 的两个云存储选项:Azure Data Lake Storage Gen2 容器和 Cloudflare R2 存储桶。 Cloudflare R2 主要用于你希望避免产生数据流出量费用的 Delta Sharing 用例。 Azure Data Lake Storage Gen2 适用于大多数其他用例。 本文重点介绍了如何为 Azure Data Lake Storage Gen2 容器创建存储凭据。 对于 Cloudflare R2,请参阅创建用于连接到 Cloudflare R2 的存储凭据

若要创建用于访问 Azure Data Lake Storage Gen2 容器的存储凭据,请创建一个引用 Azure 托管标识的 Azure Databricks 访问连接器,为其分配存储容器的权限。 然后,你在存储凭据定义中引用该访问连接器。

要求

在 Azure Databricks 中:

  • 启用了 Unity Catalog 的 Azure Databricks 工作区。

  • 附加到工作区的 Unity Catalog 元存储的 CREATE STORAGE CREDENTIAL 权限。 默认情况下,帐户管理员和元存储管理员具有此权限。

    注意

    服务主体必须具有帐户管理员角色才能创建使用托管标识的存储凭据。 不能将 CREATE STORAGE CREDENTIAL 委托给服务主体。 它适用于 Azure Databricks 服务主体和 Microsoft Entra ID 服务主体。

在你的 Azure 租户中:

  • 与你要从中访问数据的工作区位于同一区域中的 Azure Data Lake Storage Gen2 存储容器。

    该 Azure Data Lake Storage Gen2 存储帐户必须有一个分层命名空间。

  • Azure 资源组的参与者或所有者。

  • 所有者,或者是在存储帐户中具有用户访问管理员 Azure RBAC 角色的用户。

使用托管标识创建存储凭据

可以使用 Azure 托管标识或服务主体作为授权访问存储容器的标识。 强烈建议使用托管标识。 它们的优点是允许 Unity Catalog 访问受网络规则保护的存储帐户(而使用服务主体无法实现此目的),并且无需管理和轮换机密。 如果要使用服务主体,请参阅使用服务主体(旧版)创建 Unity Catalog 托管存储

  1. 在 Azure 门户中创建 Azure Databricks 访问连接器,并使用为 Unity Catalog 配置托管标识中的说明向其分配对希望访问的存储容器的权限。

    Azure Databricks 访问连接器是一种第一方 Azure 资源,让你可以将托管标识连接到 Azure Databricks 帐户。 必须在 Azure 的访问连接器资源上具有参与者角色或更高权限才能添加存储凭据。

    记下访问连接器的资源 ID。

  2. 以具有 CREATE STORAGE CREDENTIAL 特权的用户身份登录到已启用 Unity Catalog 的 Azure Databricks 工作区。

    元存储管理员和帐户管理员角色都包含此特权。 如果以服务主体身份登录(无论是 Microsoft Entra ID 还是本机 Azure Databricks 服务主体),则必须具有帐户管理员角色才能创建使用托管标识的存储凭据。

  3. 单击 目录图标目录”。

  4. “快速访问 ”页上,单击“ 外部数据 > ”按钮,转到 “凭据 ”选项卡,然后选择“ 创建凭据”。

  5. 选择 “存储凭据”。

  6. 选择“Azure 托管标识”作为凭据类型。

  7. 输入凭据的名称,并按以下格式输入访问连接器的资源 ID:

    /subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.Databricks/accessConnectors/<connector-name>
    
  8. (可选)如果使用用户分配的托管标识创建了访问连接器,请在“用户分配的托管标识 ID”字段中输入托管标识的资源 ID,格式如下:

    /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<managed-identity-name>
    
  9. (可选)如果希望用户对使用此存储凭据的外部位置具有只读访问权限,请选择“只读”。 有关详细信息,请参阅将存储凭据标记为只读

  10. 单击 “创建”

  11. (可选)将存储凭据绑定到特定工作区。

    默认情况下,任何特权用户都可以在附加到元存储的任何工作区上使用存储凭据。 如果只想允许从特定工作区进行访问,请转到“工作区”选项卡并分配工作区。 请参阅(可选)将存储凭据分配到特定工作区

  12. 创建引用此存储凭据的外部位置

(可选)将存储凭据分配到特定工作区

重要

此功能目前以公共预览版提供。

默认情况下,存储凭据可从元存储中的所有工作区访问。 这意味着,如果用户已被授予该存储凭据的权限(例如 CREATE EXTERNAL LOCATION),则可以从附加到元存储的任何工作区行使该权限。 如果使用工作区来隔离用户数据访问,则可能需要仅允许从特定工作区访问存储凭据。 此功能称为工作区绑定或存储凭据隔离。

将存储凭据绑定到特定工作区的典型用例是云管理员使用生产云帐户凭据配置存储凭据的场景,并且你希望确保 Azure Databricks 用户仅在生成工作区中使用此凭据创建外部位置。

有关工作区绑定的详细信息,请参阅(可选)为特定工作区分配外部位置仅限特定工作区能访问目录

注意

在对存储凭据行使特权时引用工作区绑定。 例如,如果用户使用存储凭据创建外部位置,则仅当创建外部位置时,才会检查存储凭据上的工作区绑定。 创建外部位置后,它将独立于在存储凭据上配置的工作区绑定而运行。

将存储凭据绑定到一个或多个工作区

若要将存储凭据分配到特定的工作区,可以使用目录资源管理器或 Databricks CLI。

所需的权限:元存储管理员或存储凭据所有者

注意

元存储管理员可以使用目录资源管理器查看元存储中的所有存储凭据,存储凭据所有者可以查看他们在元存储中拥有的所有存储凭据,无论存储凭据是否已分配到当前工作区。 未分配给工作区的存储凭据显示为灰色。

目录资源管理器

  1. 登录到链接到元存储的工作区。

  2. 在边栏中,单击 目录图标“目录”

  3. “快速访问”页上,单击“外部数据>”按钮并转到“凭据”选项卡。

  4. 选择存储凭据,然后转到“工作区”选项卡

  5. 在“工作区”选项卡上,清除“所有工作区拥有访问权限”复选框。

    如果存储凭据已绑定到一个或多个工作区,则此复选框已清除。

  6. 单击“分配到工作区”,然后输入或查找要分配的工作区

若要撤销访问权限,请转到“工作区”选项卡,选择该工作区,然后单击“撤销”。 若要允许从所有工作区进行访问,请选中“所有工作区都具有访问权限”复选框

CLI

有两个 Databricks CLI 命令组,以及将存储凭据分配给工作区所需的两个步骤。

在以下示例中,将 <profile-name> 替换为 Azure Databricks 身份验证配置文件的名称。 它应包括个人访问令牌的值,以及生成个人访问令牌的工作区的工作区实例名称和工作区 ID。 请参阅 Azure Databricks 个人访问令牌身份验证

  1. 使用 storage-credentials 命令组的 update 命令将存储凭据的 isolation mode 设置为 ISOLATED

    databricks storage-credentials update <my-storage-credential> \
    --isolation-mode ISOLATED \
    --profile <profile-name>
    

    对于附加到元存储的所有工作区,默认的 isolation-mode 设置为 OPEN

  2. 使用 workspace-bindings 命令组的 update-bindings 命令将工作区分配到存储凭据:

    databricks workspace-bindings update-bindings storage-credential <my-storage-credential> \
    --json '{
      "add": [{"workspace_id": <workspace-id>}...],
      "remove": [{"workspace_id": <workspace-id>}...]
    }' --profile <profile-name>
    

    使用 "add""remove" 属性添加或删除工作区绑定。

    注意

    只读绑定 (BINDING_TYPE_READ_ONLY) 不适用于存储凭据。 因此,没有理由为存储凭据绑定设置 binding_type

要列出存储凭据的所有工作区分配,可使用 workspace-bindings 命令组的 get-bindings 命令:

databricks workspace-bindings get-bindings storage-credential <my-storage-credential> \
--profile <profile-name>

从工作区取消绑定存储凭据

将存储凭据绑定到一个或多个工作区中包含有关使用目录资源管理器或 workspace-bindings CLI 命令组撤销工作区对存储凭据的访问权限的说明。

后续步骤

可查看、更新、删除用于使用存储凭据的权限,并授予其他用户该权限。 请参阅管理存储凭据

可使用存储凭据定义外部位置。 请参阅创建外部位置以将云存储连接到 Azure Databricks