Выполнение задания с помощью субъекта-службы Идентификатора Microsoft Entra
Задания — это неинтерактивный способ выполнения приложений в кластере Azure Databricks. Это может быть задание ETL или задача анализа данных, которые должны выполняться по расписанию. Как правило, эти задания выполняются от имени пользователя, создавшего их, но это может иметь некоторые ограничения:
- создание и выполнение заданий зависит от пользователя с соответствующими разрешениями;
- только пользователь, создавший задание, имеет доступ к заданию;
- пользователь может быть удален из рабочей области Azure Databricks.
Распространенный способ обхода этих ограничений — использовать учетную запись службы (учетную запись, связанную с приложением, а не с конкретным пользователем). В Azure можно использовать приложение идентификатора Microsoft Entra и субъект-службу для создания учетной записи службы.
Это важно, например, когда субъекты-службы контролируют доступ к данным, хранимым в учетной записи Azure Data Lake Storage 2-го поколения. Выполнение заданий с помощью этих субъектов-служб позволяет заданиям получать доступ к данным в учетной записи хранения, а также управлять областью доступа к данным.
В этом руководстве описывается, как создать приложение идентификатора Microsoft Entra и субъект-службу и сделать этот субъект-службу владельцем задания. Вы также узнаете, как предоставить разрешения на выполнение заданий другим группам, которые не владеют этим заданием. Ниже приведен общий обзор задач, которые описаны в этом пошаговом руководстве:
- Создайте субъект-службу в идентификаторе Microsoft Entra.
- Создание личного маркера доступа (PAT) в Azure Databricks. PAT будет использоваться для проверки подлинности в REST API Databricks.
- Добавление субъекта-службы в качестве пользователя без прав администратора в Azure Databricks с помощью SCIM API Databricks.
- Создание области секретов с поддержкой Azure Key Vault в Azure Databricks.
- Предоставление субъекту-службе доступа на чтение к области секретов.
- Создание задания в Azure Databricks и настройка кластера заданий для чтения секретов из области секретов.
- Передача права владения заданием субъекту-службе.
- Тестирование задания путем его выполнения от имени субъекта-службы.
Если у вас еще нет подписки Azure, создайте бесплатную учетную запись, прежде чем начинать работу.
Примечание.
Невозможно использовать кластер с сквозным руководством учетных данных, включаемым для запуска задания, принадлежащих субъекту-службе. Если для задания требуется субъект-служба для доступа к хранилищу Azure, см. статью "Подключение к Azure Data Lake Storage 2-го поколения или хранилищу BLOB-объектов с помощью учетных данных Azure".
Требования
Для работы с этим руководством вам потребуется следующее:
- Учетная запись пользователя с разрешениями, необходимыми для регистрации приложения в клиенте идентификатора Microsoft Entra ID.
- Права администратора в рабочей области Azure Databricks, в которой будут выполняться задания.
- Средство для выполнения запросов API к Azure Databricks. В этом руководстве используется cURL, но можно выбрать любое средство, позволяющее отправлять запросы REST API.
Создание субъекта-службы в идентификаторе Microsoft Entra
Субъект-служба — это удостоверение приложения идентификатора Microsoft Entra ID. Чтобы создать субъект-службу, который будет использоваться для выполнения заданий, сделайте следующее:
- В портал Azure выберите "Регистрация >приложений идентификатора Microsoft Entra".> Введите имя приложения и щелкните Зарегистрировать.
- Перейдите в раздел Сертификаты и секреты, щелкните Новый секрет клиента и создайте новый секрет клиента. Скопируйте и сохраните секрет в защищенном расположении.
- На странице Обзор запишите идентификаторы приложения (клиента) и каталога (арендатора).
Создание личного маркера доступа Azure Databricks
Для проверки подлинности в REST API Databricks используется личный маркер доступа Azure Databricks (PAT). Чтобы создать PAT, который можно использовать для выполнения запросов API, сделайте следующее:
- Перейдите в рабочую область Azure Databricks.
- Щелкните имя пользователя в правом верхнем углу экрана и нажмите кнопку "Параметры".
- Щелкните "Разработчик".
- Рядом с маркерами доступа нажмите кнопку "Управление".
- Нажмите кнопку "Создать новый маркер".
- Скопируйте и сохраните значение маркера.
Совет
В этом примере используется личный маркер доступа, но для большинства API можно использовать маркер идентификатора Microsoft Entra. Рекомендуется использовать PAT для задач административной конфигурации, но маркеры идентификатора Microsoft Entra предпочтительны для рабочих нагрузок.
Вы можете ограничить создание PAT только администраторами в целях безопасности. Дополнительные сведения см. в статье "Мониторинг и отзыв личных маркеров доступа".
Добавление субъекта-службы в рабочую область Azure Databricks
Вы добавляете субъект-службу идентификатора Microsoft Entra в рабочую область с помощью API субъектов-служб. Кроме того, вам нужно предоставить субъекту-службе разрешение на запуск кластеров автоматизированных заданий. Это можно сделать с помощью разрешения allow-cluster-create
. Откройте терминал и используйте интерфейс командной строки Databricks, чтобы выполнить следующую команду, чтобы добавить субъект-службу и предоставить необходимые разрешения:
databricks service-principals create --json '{
"schemas":[
"urn:ietf:params:scim:schemas:core:2.0:ServicePrincipal"
],
"applicationId":"<application-id>",
"displayName": "test-sp",
"entitlements":[
{
"value":"allow-cluster-create"
}
]
}'
Замените <application-id>
Application (client) ID
на регистрацию приложения идентификатора Microsoft Entra.
Создание области секрета, поддерживаемой Azure Key Vault, в Azure Databricks
Управление областями секретов обеспечивает безопасное хранение и управление секретами. Секрет, связанный с субъектом-службой, хранится в области секретов. Секреты можно хранить в области секретов Azure Databricks или в области секретов, поддерживаемой Azure Key Vault. В этих инструкциях описан вариант с поддержкой Azure Key Vault:
- Создайте экземпляр Azure Key Vault на портале Azure.
- Создайте область секретов Azure Databricks с поддержкой экземпляра Azure Key Vault.
Шаг 1. Создание экземпляра Azure Key Vault
В портал Azure выберите Key Vaults > + Добавить и присвойте key Vault имя.
Щелкните Просмотреть и создать.
После завершения проверки нажмите Создать.
После создания Key Vault перейдите на страницу "Свойства " для нового хранилища ключей.
Скопируйте и сохраните значения из полей URI хранилища и Идентификатор ресурса.
Шаг 2. Создание области секрета, поддерживаемой Azure Key Vault
Ресурсы Azure Databricks могут ссылаться на секреты, хранящиеся в Azure Key Vault, создав область секрета, поддерживаемую Key Vault. Чтобы создать область секретов Azure Databricks, сделайте следующее:
Перейдите на страницу Создание области секретов Azure Databricks в
https://<per-workspace-url>/#secrets/createScope
. Изменитеper-workspace-url
на уникальный URL-адрес рабочей области для рабочей области Azure Databricks.Укажите имя области.
Введите значения URI хранилища и идентификатора ресурса для Azure Key Vault, созданного на шаге 1. Создание экземпляра Azure Key Vault.
Нажмите кнопку Создать.
Сохранение секрета клиента в Azure Key Vault
На портале Azure перейдите в службу хранилищ ключей.
Выберите Хранилище ключей, созданное на шаге 1. Создание экземпляра Azure Key Vault.
В разделе Параметры > Секреты щелкните Создать / Импортировать.
Выберите вариант отправки Вручную и введите секрет клиента в поле Значение.
Нажмите кнопку Создать.
Предоставление субъекту-службе доступа на чтение к области секрета
Вы создали область секретов и сохранили секрет клиента субъекта-службы в этой области. Теперь вам нужно предоставить субъекту-службе доступ на чтение секрета из области секретов.
Откройте терминал и используйте интерфейс командной строки Databricks, чтобы выполнить следующую команду:
databricks secrets put-acl <scope-name> <application-id> READ
- Измените
<scope-name>
на имя области секретов Azure Databricks, содержащей секрет клиента. - Замените
<application-id>
Application (client) ID
на регистрацию приложения идентификатора Microsoft Entra.
Создание задания в Azure Databricks и настройка кластера для чтения секретов из области секретов
Теперь все готово для создания задания, которое может выполняться от имени нового субъекта-службы. Вы будете использовать записную книжку, созданную в пользовательском интерфейсе Azure Databricks, и добавите конфигурацию, чтобы разрешить кластеру заданий получать секрет субъекта-службы.
Перейдите на целевую страницу Azure Databricks и выберите "Создать > записную книжку". Присвойте записной книжке имя и выберите SQL в качестве языка по умолчанию.
Введите
SELECT 1
в первую ячейку записной книжки. Это простая команда, которая просто отображает 1, если она выполнена. Если вы предоставили субъекту-службе доступ к определенным файлам или путям в Azure Data Lake Storage 2-го поколения, вы можете использовать эти пути.Перейдите к рабочим процессам и нажмите кнопку "Создать задание". Присвойте заданию и задаче имя, щелкните " Выбрать записную книжку" и выберите только что созданную записную книжку.
Щелкните Изменить рядом со сведениями о кластере.
На странице Настройка кластера щелкните Дополнительные параметры.
На вкладке Spark укажите следующую конфигурацию Spark:
fs.azure.account.auth.type.<storage-account>.dfs.core.windows.net OAuth fs.azure.account.oauth.provider.type.<storage-account>.dfs.core.windows.net org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider fs.azure.account.oauth2.client.id.<storage-account>.dfs.core.windows.net <application-id> fs.azure.account.oauth2.client.secret.<storage-account>.dfs.core.windows.net {{secrets/<secret-scope-name>/<secret-name>}} fs.azure.account.oauth2.client.endpoint.<storage-account>.dfs.core.windows.net https://login.microsoftonline.com/<directory-id>/oauth2/token
- Замените
<storage-account>
именем учетной записи хранения, содержащей данные. - Измените
<secret-scope-name>
на имя области секретов Azure Databricks, содержащей секрет клиента. - Замените
<application-id>
Application (client) ID
на регистрацию приложения идентификатора Microsoft Entra. - Измените
<secret-name>
на имя, связанное со значением секрета клиента в области секретов. - Замените
<directory-id>
Directory (tenant) ID
на регистрацию приложения идентификатора Microsoft Entra.
- Замените
Передача владения заданием субъекту-службе
У задания может быть только один владелец, поэтому вам нужно передать право владения этим заданием субъекту-службе. Чтобы другие пользователи могли управлять заданием, вы также можете предоставить разрешения CAN MANAGE группе. В этом примере мы воспользуемся API разрешений для настройки этих разрешений.
Откройте терминал и используйте интерфейс командной строки Databricks, чтобы выполнить следующую команду:
databricks permissions set jobs <job-id> --json '{
"access_control_list": [
{
"service_principal_name": "<application-id>",
"permission_level": "IS_OWNER"
},
{
"group_name": "admins",
"permission_level": "CAN_MANAGE"
}
]
}'
- Замените
<job-id>
уникальным идентификатором задания. Чтобы найти идентификатор задания, щелкните рабочие процессы на боковой панели и щелкните имя задания. Идентификатор задания находится на боковой панели сведений о задании. - Замените
<application-id>
Application (client) ID
на регистрацию приложения идентификатора Microsoft Entra.
Этому заданию также потребуются разрешения на чтение для записной книжки. Используйте интерфейс командной строки Databricks, чтобы выполнить следующую команду, чтобы предоставить необходимые разрешения:
databricks permissions set notebooks <notebook-id> --json '{
"access_control_list": [
{
"service_principal_name": "<application-id>",
"permission_level": "CAN_READ"
}
]
}'
- Измените
<notebook-id>
на идентификатор записной книжки, связанной с заданием. Чтобы найти идентификатор, перейдите к записной книжке в рабочей области Azure Databricks и найдите в URL-адресе записной книжки числовой идентификатор, следующий заnotebook/
. - Замените
<application-id>
Application (client) ID
на регистрацию приложения идентификатора Microsoft Entra.
Тестирование задания
Задания выполняются субъектом-службой точно так же, как и пользователем, — через пользовательский интерфейс, API или интерфейс командной строки. Чтобы протестировать задание с помощью пользовательского интерфейса Azure Databricks, сделайте следующее:
- Перейдите в раздел Рабочие процессы в пользовательском интерфейсе Azure Databricks и выберите задание.
- Щелкните Запустить сейчас.
Если все работает правильно, вы увидите состояние Успешно для задания. Вы можете выбрать задание в пользовательском интерфейсе, чтобы проверить выходные данные:
Подробнее
Дополнительные сведения о создании и выполнении заданий см. в статье "Планирование и оркестрация рабочих процессов".