Поделиться через


Получение долей Delta Sharing с помощью клиента Python и федерации Open ID Connect (OIDC) в потоке "машина-машина" (открытое совместное использование)

На этой странице описывается, как получатели данных могут использовать клиент Python, зарегистрированный в собственном провайдере удостоверений (IdP), для организации доступа к долям Delta Sharing, созданным в Databricks. Этот поток предоставления учетных данных клиента OAuth (M2M) «машина-к-машине» обычно используется в сценариях, когда приложение, например, автоматическое ночное задание, выполняемое на виртуальной машине, автономно обращается к данным. По этому потоку аутентификации применяется федерация OIDC, что позволяет JSON веб-токенам (JWT), выданным поставщиком идентификации получателя, использоваться как краткосрочные токены OAuth, тестируемые на подлинность с помощью Databricks. Этот поток аутентификации для открытия доступа Databricks предназначен для получателей, у которых нет доступа к рабочей области Databricks с включенной поддержкой Unity Catalog.

Открытая федерация OIDC является альтернативой использованию долгоживущих токенов носителя, выданных Databricks, для подключения получателей, не принадлежащих к Databricks, к поставщикам. В потоке предоставления доступа учетных данных клиента OAuth-приложение регистрируется как сервисный принципал (SP) у поставщика идентификационных данных получателя. Долгосрочные секреты или учетные данные не передаются между Databricks, поставщиком и получателем. Сведения об использовании маркеров доступа для проверки подлинности общих папок см. в статье Создание объекта получателя для пользователей, не использующих Databricks, с помощью маркеров доступа (открытый общий доступ).

Эта статья предназначена для получателей. Сведения о том, как поставщики могут включить федерацию OIDC для получателей в Azure Databricks, см. Используйте федерацию Open ID Connect (OIDC), чтобы включить проверку подлинности для объектов Delta Sharing (открытый доступ). Для получения информации о потоке "пользователь — компьютер" (U2M) см. раздел "Получение общих данных Delta Sharing при использовании федерации Open ID Connect (OIDC) в потоке "пользователь — компьютер" (открытый общий доступ).

Регистрация приложения в idP

Прежде чем использовать федерацию OIDC для предоставления клиентскому приложению доступа к ресурсам Delta Sharing, необходимо зарегистрировать приложение OAuth в поставщике удостоверений. В этом разделе описывается регистрация приложения OAuth в идентификаторе Microsoft Entra. Для других поставщиков идентификационных данных см. их документацию.

Регистрация приложения в идентификаторе Microsoft Entra

Эти инструкции предназначены как общие рекомендации и их актуальность не гарантирована. Подробные инструкции по регистрации приложений см. в этом кратком руководстве Майкрософт.

  1. Войдите в Центр администрирования Microsoft Entra как минимум, в качестве разработчика приложений.
  2. Перейдите к регистрации приложений и создайте новую регистрацию без URL-адреса перенаправления.
  3. Перейдите к сертификатам и секретам > , создайте секрет для приложения.
  4. Скопируйте значение секрета и сохраните его безопасно.
  5. На странице "Обзор регистрации > приложений " для приложения скопируйте идентификатор приложения (клиента)
  6. Измените приложение на приложение версии 2, обновив манифест:
    1. В разделе "Управление приложением " выберите "Манифест".
    2. В редакторе установите accessTokenAcceptedVersion на 2.
    3. Сохраните изменения.

Отправка необходимых сведений поставщику данных Azure Databricks

Если вы, как получатель, используйте идентификатор Microsoft Entra, вы можете получить поля, необходимые поставщику, следуя этим инструкциям. Всегда обращайтесь к документации Microsoft Entra ID, чтобы получить самые актуальные инструкции.

  • URL-адрес издателя: https://login.microsoftonline.com/{tenantId}/v2.0, замена {tenantId} идентификатором арендатора Entra. Если вы не знаете идентификатор клиента, ознакомьтесь с документацией по идентификатору Microsoft Entra.

  • Утверждение субъекта: ссылается на поле в полезной нагрузке JWT, которое идентифицирует сущность, получающую доступ к данным. Используемое поле зависит от поставщика удостоверений личности (IdP) и вариантов использования. Например, для приложений M2M в идентификаторе Microsoft Entra утверждение субъекта — это azp, которое представляет идентификатор клиента приложения, авторизованного для использования токена. Дополнительные сведения см. в справочнике по утверждениям маркера доступа Microsoft Entra ID

  • Тема. Относится к уникальному идентификатору зарегистрированного приложения OAuth в поставщике удостоверений получателя (IdP).
    Например, в идентификаторе Microsoft Entra это идентификатор приложения (клиента). Если вы не скопировали идентификатор клиента во время регистрации, вы можете получить его, выполнив шаги, специфичные для вашего поставщика удостоверений. Для идентификатора Microsoft Entra выполните следующие действия.

    1. Перейдите к регистрации приложений в Центре администрирования Microsoft Entra.
    2. Выберите зарегистрированное приложение OAuth.
    3. Найдите идентификатор приложения (клиента) на странице обзора.

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

  • Аудитория: Для аутентификации машины в Azure Databricks обычно используется идентификатор ресурса clientId, но можно указать любой другой допустимый идентификатор ресурса.

    Следовало скопировать это на предыдущем шаге. Если нет, перейдите в Центр администрирования Microsoft Entra, найдите регистрацию приложений, выберите зарегистрированное приложение и найдите идентификатор приложения (клиента) на странице обзора. Можно также использовать другой идентификатор ресурса.

Делитесь издателем, утверждением заявки, субъектом и аудиторией с поставщиком.

Настройте ваше приложение для использования файла профиля OAuth, предоставленного поставщиком Databricks.

Чтобы настроить приложение для доступа к ресурсам Delta Sharing от поставщика:

  1. Перейдите по URL-адресу портала профиля OIDC, которым с вами поделился поставщик Databricks.

    Запросите URL-адрес, если вы еще не получили его.

  2. На странице портала выберите плитку M2M и в разделе "Для OAuth" нажмите кнопку "Скачать файл".

  3. Измените скачанный oauth_config.share JSON-файл, чтобы добавить clientId, clientSecret и scope.

    При регистрации приложения необходимо скопировать идентификатор клиента и секрет клиента. Невозможно снова получить секрет клиента. Чтобы получить идентификатор клиента, ознакомьтесь с инструкциями, приведенными в предыдущем разделе.

    Если вы решили использовать параметр {clientId} приложения для обозначения аудитории, область действия должна быть {clientId}/.default. Например, если аудитория 61a80fb9-ce0c-4794-9f7f-2ba42a7b76f6, масштаб должен быть 61a80fb9-ce0c-4794-9f7f-2ba42a7b76f6/.default.

    Пример профиля:

    {
      "shareCredentialsVersion": 2,
      "endpoint": "https://oregon.cloud.databricks.com/api/2.0/delta-sharing/metastores/11a11aaa-11aa-11a12-11aa-111a1aa11111/recipients/a11da11aa1-a1a1-11a1-a11a-1111a11111aa",
      "tokenEndpoint": "https://login.microsoftonline.com/a111a111-1111-1aaa-1aa1-1aa1111aa1/oauth2/v2.0/token",
      "type": "oauth_client_credentials",
      "clientId": "[REPLACE_WITH_YOUR_CLIENT_ID]",
      "clientSecret": "[REPLACE_WITH_YOUR_CLIENT_SECRET]",
      "scope": "[REPLACE_WITH_YOUR_SCOPE]"
    }
    
  4. Установите и настройте последнюю версию клиента Delta Sharing Python OSS.

    У вас должна быть последняя версия OSS клиента Delta Sharing для Python.

    python3 -m venv .venv
    source .venv/bin/activate
    pip3 install "delta-sharing>=1.3.1"
    
  5. Сохраните обновленный файл oauth_config.share.

  6. Проверьте конфигурацию:

    Создание тестового скрипта: test.py

    import delta_sharing
    
    # Point to the profile file. It can be a file on the local file system or a file on a remote storage.
    
     profile_file = "oauth_config.share"
    
     # Create a SharingClient.
     client = delta_sharing.SharingClient(profile_file)
     #
     # List all shared tables.
     tables = client.list_all_tables()
    
     print(tables)
    
     # replace the following line with the coordinates of the shared table
     #table_url = profile_file + "#sample_share.sample_db.sample_table"
    
     # Fetch 10 rows from a table and convert it to a Pandas DataFrame.
     # This can be used to read sample data from a table that cannot fit in the memory.
     #df = delta_sharing.load_as_pandas(table_url, limit=10)
    
     #print(df)
    

    Запустите скрипт:

    python3 test.py
    

    Сценарий должен содержать список общих таблиц.