Доступ к хранилищу с помощью управляемых удостоверений Azure в Unity Catalog

В этой статье описывается, как использовать управляемые удостоверения Azure для подключения к контейнерам хранилища от имени пользователей Unity Catalog.

Что такое управляемые удостоверения Azure

Каталог Unity можно настроить для использования управляемого удостоверения Azure для доступа к контейнерам хранилища от имени пользователей каталога Unity. Управляемые удостоверения предоставляют удостоверение для приложений, используемых при подключении к ресурсам, поддерживающим проверку подлинности Microsoft Entra ID (ранее — Azure Active Directory).

Управляемые удостоверения в Unity Catalog можно использовать для поддержки двух основных вариантов использования:

  • Как удостоверение для подключения к управляемым учетным записям хранения хранилища метаданных (где хранятся управляемые таблицы).
  • Как удостоверение для подключения к другим внешним учетным записям хранения (для доступа на основе файлов или для доступа к существующим наборам данных через внешние таблицы).

Настройка Unity Catalog с помощью управляемого удостоверения имеет следующие преимущества при настройке Unity Catalog с помощью субъекта-службы:

Настройка управляемого удостоверения для Unity Catalog

Чтобы настроить управляемое удостоверение для использования с каталогом Unity, сначала создайте соединитель доступа для Azure Databricks в Azure. По умолчанию соединитель доступа развертывается с управляемым удостоверением, назначаемым системой. Вместо этого можно присоединить управляемое удостоверение, назначаемое пользователем. Затем вы предоставляете управляемому удостоверению доступ к учетной записи Azure Data Lake Storage 2-го поколения и используете соединитель доступа при создании хранилища метаданных каталога Unity или учетных данных хранилища.

Требования

Пользователь Или субъект-служба Azure, создающий соединитель доступа, должен:

  • Участник или владелец группы ресурсов Azure.

Пользователь Или субъект-служба Azure, предоставляющий управляемое удостоверение учетной записи хранения, должен:

  • Будьте владельцем или пользователем с ролью Администратор istrator Azure RBAC в учетной записи хранения.

Шаг 1. Создание соединителя доступа для Azure Databricks

Access Подключение or для Azure Databricks — это первый ресурс Azure, который позволяет подключать управляемые удостоверения к учетной записи Azure Databricks.

Каждый соединитель доступа для Azure Databricks может содержать одно назначаемое системой управляемое удостоверение или одно управляемое удостоверение, назначаемое пользователем. Если вы хотите использовать несколько управляемых удостоверений, создайте отдельный соединитель доступа для каждого.

Использование управляемого удостоверения, назначаемого системой

  1. Войдите на портал Azure в качестве участника или владельца группы ресурсов.

  2. Щелкните + Создать или Создать ресурс.

  3. Найдите Подключение or access для Azure Databricks и выберите его.

  4. Нажмите кнопку Создать.

  5. На вкладке Основы примите, выберите или введите значения для следующих полей:

    • Подписка. Это подписка Azure, в которую будет создан соединитель доступа. По умолчанию используется выбранная в данный момент подписка Azure. Это может быть любая подписка в арендаторе.
    • Группа ресурсов. Это группа ресурсов Azure, в которую будет создан соединитель доступа.
    • Имя: введите имя, указывающее назначение соединителя.
    • Регион — это должен быть регион учетной записи хранения, к которой вы подключаетесь.
  6. Щелкните Просмотреть и создать.

  7. Когда появится сообщение "Проверка пройдена ", нажмите кнопку "Создать".

    После успешного развертывания соединитель доступа развертывается с управляемым удостоверением, назначаемое системой.

  8. Когда развертывание будет завершено, выберите Перейти к ресурсу.

  9. Запишите идентификатор ресурса.

    Идентификатор ресурса имеет формат:

    /subscriptions/12f34567-8ace-9c10-111c-aea8eba12345c/resourceGroups/<resource-group>/providers/Microsoft.Databricks/accessConnectors/<connector-name>
    

Использование управляемого удостоверения, назначаемого пользователем

  1. Если у вас еще нет управляемого удостоверения, назначаемого пользователем, создайте новый и запишите его идентификатор ресурса.

    См. статью "Управление управляемыми удостоверениями, назначаемыми пользователем".

  2. Войдите на портал Azure в качестве участника или владельца группы ресурсов.

    Группа ресурсов должна находиться в том же регионе, что и учетная запись хранения, к которой требуется подключиться.

  3. Найдите настраиваемый шаблон и выберите его.

  4. Выберите "Создать собственный шаблон " и вставьте следующий шаблон в редактор:

    {
     "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
     "contentVersion": "1.0.0.0",
     "parameters": {
         "connectorName": {
             "defaultValue": "testConnector",
             "type": "String",
             "metadata": {
                 "description": "The name of the Azure Databricks Access Connector to create."
             }
         },
         "accessConnectorRegion": {
             "defaultValue": "[resourceGroup().location]",
             "type": "String",
             "metadata": {
                 "description": "Location for the access connector resource."
             }
         },
         "userAssignedManagedIdentiy": {
             "type": "String",
             "metadata": {
                 "description": "The resource Id of the user assigned managed identity."
             }
         }
     },
     "resources": [
         {
             "type": "Microsoft.Databricks/accessConnectors",
             "apiVersion": "2023-05-01",
             "name": "[parameters('connectorName')]",
             "location": "[parameters('accessConnectorRegion')]",
             "identity": {
                 "type": "UserAssigned",
                 "userAssignedIdentities": {
                     "[parameters('userAssignedManagedIdentiy')]": {}
                 }
              }
          }
       ]
    }
    
  5. На вкладке Основы примите, выберите или введите значения для следующих полей:

    • Подписка: подписка Azure, в которую будет создан соединитель доступа. По умолчанию используется выбранная в данный момент подписка Azure. Это может быть любая подписка в арендаторе.
    • Группа ресурсов: группа ресурсов в том же регионе, к которому будет подключаться учетная запись хранения.
    • Имя: имя, указывающее назначение соединителя.
    • Регион — это должен быть регион учетной записи хранения, к которой вы подключаетесь. Вы можете выбрать предварительно заполненное значение [resourceGroup().location], если группа ресурсов была создана в том же регионе, к которому будет подключена учетная запись хранения.
    • Управляемое удостоверение, назначаемое пользователем: идентификатор ресурса управляемого удостоверения, назначаемого пользователем.
  6. Щелкните Просмотреть и создать.

  7. Когда появится сообщение "Проверка пройдена ", нажмите кнопку "Создать".

  8. Когда развертывание будет завершено, выберите Перейти к ресурсу.

  9. Запишите идентификатор ресурса.

    Идентификатор ресурса имеет формат:

    /subscriptions/12f34567-8ace-9c10-111c-aea8eba12345c/resourceGroups/<resource-group>/providers/Microsoft.Databricks/accessConnectors/<connector-name>
    

Шаг 2. Предоставление управляемому удостоверению доступа к учетной записи хранения

Чтобы предоставить разрешения на этом шаге, необходимо иметь роль владельца или доступа пользователей Администратор istrator Azure RBAC в учетной записи хранения.

  1. Войдите в учетную запись Azure Data Lake Storage 2-го поколения.
  2. Выберите Управление доступом (IAM), щелкните + Добавить и выберите Добавить назначение роли.
  3. Выберите роль Участник данных BLOB-объектов хранилища и щелкните Далее.
  4. В разделе Назначение доступа для выберите Управляемое удостоверение.
  5. Щелкните +Выбрать участников и выберите соединитель Access для Azure Databricks или управляемого удостоверения, назначаемого пользователем.
  6. Найдите имя соединителя или удостоверение, назначаемое пользователем, выберите его и нажмите кнопку "Проверить и назначить".

Кроме того, можно ограничить доступ к учетной записи хранения, предоставив управляемому удостоверению доступ к конкретному контейнеру. Выполните те же действия, которые описаны выше, но предоставьте роль служба хранилища роли Delegator BLOB-объектов в учетной записи хранения и роли участника данных BLOB-объектов служба хранилища в контейнере.

Шаг 3. Предоставление управляемому удостоверению доступа к событиям файлов

Предоставление управляемому удостоверению доступа к событиям файлов позволяет Azure Databricks подписаться на уведомления о событиях файлов, создаваемых поставщиками облачных служб. Это делает обработку файлов более эффективной. Чтобы предоставить разрешения на этом шаге, необходимо иметь роль владельца или доступа пользователей Администратор istrator Azure RBAC в учетной записи хранения.

  1. Войдите в учетную запись Azure Data Lake Storage 2-го поколения.
  2. Выберите Управление доступом (IAM), щелкните + Добавить и выберите Добавить назначение роли.
  3. Выберите роль участника данных очереди служба хранилища и нажмите кнопку "Далее".
  4. В разделе Назначение доступа для выберите Управляемое удостоверение.
  5. Щелкните +Выбрать участников и выберите соединитель Access для Azure Databricks или управляемого удостоверения, назначаемого пользователем.
  6. Найдите имя соединителя или удостоверение, назначаемое пользователем, выберите его и нажмите кнопку "Проверить и назначить".

Этот шаг позволяет Azure Databricks автоматически настраивать события файлов. Если вы не предоставляете Azure Databricks доступ к настройке событий файлов от вашего имени, необходимо вручную настроить события файлов для каждого расположения. Чтобы предоставить разрешения на этом шаге, необходимо иметь роли владельца или доступа пользователей Администратор istrator Azure RBAC в управляемом удостоверении и группе ресурсов, в которую находится учетная запись Azure Data Lake Storage 2-го поколения.

  1. Выполните описанные выше действия на шаге 3. Предоставьте управляемому удостоверению доступ к событиям файлов и назначьте участника учетной записи служба хранилища вместе с ролью участника данных очереди служба хранилища управляемому удостоверению.
  2. Перейдите к группе ресурсов Azure, в которой находится учетная запись Azure Data Lake Storage 2-го поколения.
  3. Выберите Управление доступом (IAM), щелкните + Добавить и выберите Добавить назначение роли.
  4. Выберите роль участника EventGrid EventSubscription и нажмите кнопку "Далее".
  5. В разделе Назначение доступа для выберите Управляемое удостоверение.
  6. Щелкните +Выбрать участников и выберите соединитель Access для Azure Databricks или управляемого удостоверения, назначаемого пользователем.
  7. Найдите имя соединителя или удостоверение, назначаемое пользователем, выберите его и нажмите кнопку "Проверить и назначить".

Использование управляемого удостоверения для доступа к корневой учетной записи хранения каталога Unity

В этом разделе описывается, как предоставить управляемому удостоверению доступ к корневой учетной записи хранения при создании хранилища метаданных каталога Unity.

Сведения об обновлении существующего хранилища метаданных Unity Catalog для использования управляемого удостоверения см. в разделе Обновление существующего хранилища метаданных Unity Catalog для использования управляемого удостоверения для доступа к корневому хранилищу.

  1. Войдите в консоль учетной записи Azure Databricks с правами администратора учетных записей Azure Databricks.
  2. Щелкните Значок каталогакаталог.
  3. Нажмите Создать хранилище метаданных.
  4. Введите значения для следующих полей:
    • Name (Имя) — имя для хранилища метаданных.

    • Region (Регион) — регион развертывания хранилища метаданных.

      Для обеспечения оптимальной производительности размещайте соединитель доступа, рабочие области, хранилища метаданных и облачные хранилища в одном облачном регионе.

    • ADLS Gen 2 path (Путь к ADLS 2-го поколения) — введите путь к контейнеру хранилища, который будет использоваться в качестве корневого хранилища для хранилища метаданных.

      Префикс abfss:// добавляется автоматически.

    • Access Connector ID (Идентификатор соединителя доступа) — введите идентификатор ресурса соединителя доступа Azure Databricks в следующем формате:

      /subscriptions/12f34567-8ace-9c10-111c-aea8eba12345c/resourceGroups/<resource-group>/providers/Microsoft.Databricks/accessConnectors/<connector-name>
      
    • (Необязательно) Идентификатор управляемого удостоверения: если вы создали соединитель доступа с помощью управляемого удостоверения, назначаемого пользователем, введите идентификатор ресурса управляемого удостоверения.

  5. Нажмите кнопку Создать.
  6. При появлении запроса выберите рабочие области для связи с хранилищем метаданных.

Использование управляемого удостоверения для доступа к внешнему хранилищу, управляемому в каталоге Unity

Каталог Unity предоставляет возможность доступа к существующим данным в учетных записях хранения с помощью учетных данных хранения и внешних расположений. Учетные данные хранения хранят управляемое удостоверение, а внешние расположения определяют путь к хранилищу вместе со ссылкой на учетные данные хранилища. Этот подход можно использовать для предоставления и контроля доступа к существующим данным в облачном хранилище и регистрации внешних таблиц в Unity Catalog.

Учетные данные хранения могут содержать в себе управляемое удостоверение или субъект-службу. Использование управляемого удостоверения дает возможность Unity Catalog получать доступ к учетным записям хранения, защищенным сетевыми правилами (что невозможно с помощью субъектов-служб), и устраняет необходимость в администрировании и смене секретов.

Чтобы создать учетные данные хранения с помощью управляемого удостоверения и назначить эти учетные данные хранения внешнему расположению, следуйте инструкциям, приведенным в Подключение облачному хранилищу объектов с помощью каталога Unity.

Если рабочая область Azure Databricks развернута в собственной виртуальной сети Azure, также называемой внедрением виртуальной сети, и вы используете брандмауэр хранилища для защиты учетной записи Azure Data Lake Storage 2-го поколения, необходимо:

  1. Включите рабочую область Azure Databricks для доступа к служба хранилища Azure.
  2. Включите управляемое удостоверение для доступа к служба хранилища Azure.

Шаг 1. Включение доступа рабочей области Azure Databricks к службе хранилища Azure

Необходимо настроить параметры сети, чтобы разрешить рабочей области Azure Databricks доступ к Azure Data Lake Storage 2-го поколения. Вы можете настроить частные конечные точки или доступ из виртуальной сети в Azure Data Lake Storage 2-го поколения, чтобы разрешить подключения из подсетей к учетной записи Azure Data Lake Storage 2-го поколения.

Инструкции см. в статье Предоставление доступа к рабочей области Azure Databricks к Azure Data Lake Storage 2-го поколения.

Шаг 2. Включение управляемого удостоверения для доступа к служба хранилища Azure

Этот шаг необходим, только если для учетной записи хранения Azure отключен параметр "Разрешить службам Azure в списке доверенных служб доступ к этой учетной записи хранения". Если эта конфигурация включена:

  • Любой соединитель доступа для Azure Databricks в том же клиенте, что и учетная запись хранения, может получить доступ к учетной записи хранения.
  • Любая доверенная служба Azure может получить доступ к учетной записи хранения. См. раздел Предоставление доступа к доверенным службам Azure.

Приведенные ниже инструкции включают шаг, в котором вы отключите эту конфигурацию. Это можно сделать на портале Azure или с помощью Azure CLI.

Использование портала Azure

  1. Войдите на портал Azure, найдите и выберите учетную запись хранения Azure и перейдите на вкладку Сеть.

  2. Задайте для параметра Доступ из общедоступной сети значение Включено из выбранных виртуальных сетей и IP-адресов.

    Вместо этого можно задать для параметра Доступ из общедоступной сети значение Отключено. Управляемое удостоверение можно использовать для обхода проверки доступа к общедоступной сети.

  3. В разделе Экземпляры ресурсов выберите для параметра Тип ресурса значение Microsoft.Databricks/accessConnectors и выберите свой соединитель доступа Azure Databricks.

  4. В разделе Исключения снимите флажок Разрешить службам Azure в списке доверенных служб доступ к этой учетной записи хранения.

Использование командной строки Azure CLI

  1. Установите Azure CLI и возможности входа.

    Сведения о входе с помощью субъекта-службы идентификатора Microsoft Entra см. в статье azure CLI login with a Microsoft Entra ID service principal.

    Сведения о входе с помощью учетной записи пользователя Azure Databricks см. в статье azure CLI для входа с учетной записью пользователя Azure Databricks.

  2. Добавьте сетевое правило в учетную запись хранения:

    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> \
    

    Добавьте идентификатор ресурса в формате:

    /subscriptions/12f34567-8ace-9c10-111c-aea8eba12345c/resourceGroups/<resource-group>/providers/Microsoft.Databricks/accessConnectors/<connector-name>
    
  3. После создания сетевого правила перейдите к учетной записи хранения Azure на портале Azure и просмотрите управляемое удостоверение на вкладке Сеть в разделе Экземпляры ресурсов для типа ресурса Microsoft.Databricks/accessConnectors.

  4. В разделе Исключения снимите флажок Разрешить службам Azure в списке доверенных служб доступ к этой учетной записи хранения.

  5. При необходимости задайте для параметра Доступ к общедоступной сети значение Отключено. Управляемое удостоверение можно использовать для обхода проверки доступа к общедоступной сети.

    При стандартном подходе задается значение Включено из выбранных виртуальных сетей и IP-адресов.

Бессерверные хранилища SQL — это вычислительные ресурсы, которые выполняются в подписке Azure для Azure Databricks, а не в подписке Azure. Если вы настроите брандмауэр на Azure Data Lake Storage 2-го поколения и планируете использовать бессерверные хранилища SQL, необходимо настроить брандмауэр, чтобы разрешить доступ из бессерверных хранилищ SQL.

Инструкции см. в разделе "Настройка брандмауэра для бессерверного доступа к вычислительным ресурсам".

Обновление существующего хранилища метаданных Unity Catalog для использования управляемого удостоверения для доступа к корневому хранилищу

Если у вас есть хранилище метаданных Unity Catalog, созданное с помощью субъекта-службы, и вы хотите обновить его для использования управляемого удостоверения, это можно сделать с помощью вызова API.

  1. Создайте Подключение or Access для Azure Databricks и назначьте ему разрешения для контейнера хранилища хранилища, который используется для корневого хранилища метаданных каталога Unity, используя инструкции в разделе "Настройка управляемого удостоверения для каталога Unity".

    Соединитель доступа можно создать с помощью управляемого удостоверения, назначаемого системой, или управляемого удостоверения, назначаемого пользователем.

    Запишите идентификатор ресурса соединителя доступа. Если вы используете управляемое удостоверение, назначаемое пользователем, также запишите его идентификатор ресурса.

  2. Войдите в рабочую область Azure Databricks, назначенную хранилищу метаданных, с правами администратора учетных записей.

    Для этого необязательно иметь права администратора рабочей области.

    Запишите URL-адрес рабочей области, который является первой частью URL-адреса, после https:// и до azuredatabricks.net включительно.

  3. Создайте личный маркер доступа.

  4. Добавьте личный маркер доступа в файл .netrc в домашнем каталоге. Это повышает безопасность, предотвращая отображение личного маркера доступа в журнале команд оболочки. См. API управления маркерами.

  5. Выполните следующую команду cURL, чтобы создать учетные данные хранилища.

    Замените значения-заполнители:

    • <databricks-instance>: URL-адрес рабочей области, в которой был создан личный маркер доступа.
    • <credential-name>: Имя учетных данных хранилища.
    • <access-connector-id> — идентификатор ресурса для соединителя доступа Azure Databricks в формате /subscriptions/12f34567-8ace-9c10-111c-aea8eba12345c/resourceGroups/<resource-group>/providers/Microsoft.Databricks/accessConnectors/<connector-name>.
    • <managed-identity-id>: если вы создали соединитель доступа с помощью управляемого удостоверения, назначаемого пользователем, укажите идентификатор ресурса управляемого удостоверения.
    curl -n -X POST --header 'Content-Type: application/json' https://<databricks-instance>/api/2.0/unity-catalog/storage-credentials --data "{
      \"name\": \"<credential-name>\",
      \"azure_managed_identity\": {
        \"access_connector_id\": \"<access-connector-id>\",
        \"managed_identity_id\": \"<managed-identity-id>\"
      }
    }"
    
  6. Запишите идентификатор учетных данных хранилища в ответе.

  7. Выполните следующую команду cURL, <databricks-instance>чтобы получить metastore_idurl-адрес рабочей области рабочей области, в которой был создан личный маркер доступа.

    curl -n GET--header 'Content-Type: application/json' https://<databricks-instance>/api/2.0/unity-catalog/metastore_summary
    
  8. Выполните следующую команду cURL, чтобы добавить в хранилище метаданных новые учетные данные корневого хранилища.

    Замените значения-заполнители:

    • <databricks-instance>: URL-адрес рабочей области, в которой был создан личный маркер доступа.
    • <metastore-id> — идентификатор хранилища метаданных, полученный на предыдущем шаге.
    • <storage-credential-id> — идентификатор учетных данных хранилища.
    curl -n -X PATCH --header 'Content-Type: application/json' https://<databricks-instance>/api/2.0/unity-catalog/metastores/<metastore-id> --data
    "{\"storage_root_credential_id\": \"<storage-credential-id>\"}"