Проверка подлинности доступа к Azure Databricks с помощью субъекта-службы с помощью OAuth (OAuth M2M)
В этой статье объясняется, как создать субъект-службу Azure Databricks и использовать его для проверки подлинности в целевой сущности с помощью OAuth.
Шаг 1. Создание субъекта-службы
Администраторы учетных записей и администраторы рабочей области могут создавать субъекты-службы. На этом шаге описывается создание субъекта-службы в рабочей области. Сведения об использовании консоли учетной записи см. в статье "Управление субъектами-службами" в учетной записи.
Вы также можете создать управляемый субъект-службу идентификатора Microsoft Entra и добавить его в Azure Databricks. Дополнительные сведения см. в разделе Databricks и субъекты-службы идентификатора Microsoft Entra.
- Войдите в рабочую область Azure Databricks как администратор рабочей области.
- Щелкните имя пользователя в верхней строке рабочей области Azure Databricks и выберите "Параметры".
- Щелкните вкладку "Удостоверение" и "Доступ ".
- Рядом с субъектами-службами нажмите кнопку "Управление".
- Нажмите кнопку "Добавить субъект-службу".
- Щелкните стрелку раскрывающегося списка в поле поиска и нажмите кнопку "Добавить".
- В разделе "Управление" выберите databricks managed.
- Введите имя субъекта-службы.
- Нажмите кнопку Добавить.
Субъект-служба добавляется как в рабочую область, так и в учетную запись Azure Databricks.
Шаг 2. Назначение разрешений субъекту-службе
- Щелкните имя субъекта-службы, чтобы открыть страницу сведений.
- На вкладке "Конфигурации" установите флажок рядом с каждым правом, которое должен иметь субъект-служба для этой рабочей области, а затем нажмите кнопку "Обновить".
- На вкладке "Разрешения" предоставьте доступ ко всем пользователям Azure Databricks, субъектам-службам и группам, которым требуется управлять и использовать этот субъект-службу. См. статью "Управление ролями" в субъекте-службе.
Шаг 3. Создание секрета OAuth для субъекта-службы
Прежде чем использовать OAuth для проверки подлинности в Azure Databricks, необходимо сначала создать секрет OAuth, который можно использовать для создания маркеров доступа OAuth. Субъект-служба может иметь до пяти секретов OAuth. Администраторы учетных записей и администраторы рабочей области могут создавать секрет OAuth для субъекта-службы.
На странице сведений субъекта-службы щелкните вкладку "Секреты ".
В разделе секреты OAuth нажмите кнопку "Создать секрет".
Скопируйте отображаемый секрет и идентификатор клиента, а затем нажмите кнопку "Готово".
Секрет будет выявлен только один раз во время создания. Идентификатор клиента совпадает с идентификатором приложения субъекта-службы.
Администраторы учетных записей также могут создать секрет OAuth на странице сведений субъекта-службы в консоли учетной записи.
Войдите в консоль учетной записи с правами администратора учетных записей.
Щелкните "Управление пользователями".
На вкладке "Субъекты-службы" выберите субъект-службу.
В разделе секреты OAuth нажмите кнопку "Создать секрет".
Скопируйте отображаемый секрет и идентификатор клиента, а затем нажмите кнопку "Готово".
Примечание.
Чтобы субъект-служба мог использовать кластеры или хранилища SQL, необходимо предоставить субъекту-службе доступ к ним. См . сведения о разрешениях вычислений или управлении хранилищем SQL.
Шаг 4. Использование проверки подлинности OAuth M2M
Чтобы использовать проверку подлинности OAuth M2M, необходимо задать следующие связанные переменные среды, поля, .databrickscfg
поля Terraform или Config
поля:
- Узел Azure Databricks, указанный как
https://accounts.azuredatabricks.net
для операций с учетной записью или url-адрес целевой области для каждой рабочей области, напримерhttps://adb-1234567890123456.7.azuredatabricks.net
для операций с рабочей областью. - Идентификатор учетной записи Azure Databricks для операций с учетной записью Azure Databricks.
- Идентификатор клиента субъекта-службы.
- Секрет субъекта-службы.
Чтобы выполнить проверку подлинности OAuth M2M, интегрируйте следующее в код на основе участвующего средства или пакета SDK:
Среда
Сведения об использовании переменных среды для определенного типа проверки подлинности Azure Databricks с помощью средства или пакета SDK см. в документации по проверке подлинности к ресурсам Azure Databricks или пакету SDK. См. также переменные среды и поля для единой проверки подлинности клиента и методы по умолчанию для единой проверки подлинности клиента.
Для операций на уровне учетной записи задайте следующие переменные среды:
DATABRICKS_HOST
, установите для url-адресаhttps://accounts.azuredatabricks.net
консоли учетной записи Azure Databricks.DATABRICKS_ACCOUNT_ID
DATABRICKS_CLIENT_ID
DATABRICKS_CLIENT_SECRET
Для операций на уровне рабочей области задайте следующие переменные среды:
DATABRICKS_HOST
, установите для URL-адреса azure Databricks для каждой рабочей области, напримерhttps://adb-1234567890123456.7.azuredatabricks.net
.DATABRICKS_CLIENT_ID
DATABRICKS_CLIENT_SECRET
Профиль
Создайте или определите профиль конфигурации Azure Databricks со следующими полями в .databrickscfg
файле. При создании профиля замените заполнители соответствующими значениями. Чтобы использовать профиль с инструментом или пакетом SDK, ознакомьтесь с документацией по проверке подлинности к ресурсам Azure Databricks или документации по средству или пакету SDK. См. также переменные среды и поля для единой проверки подлинности клиента и методы по умолчанию для единой проверки подлинности клиента.
Для операций на уровне учетной записи задайте следующие значения в .databrickscfg
файле. В этом случае URL-адрес консоли учетной записи Azure Databricks:https://accounts.azuredatabricks.net
[<some-unique-configuration-profile-name>]
host = <account-console-url>
account_id = <account-id>
client_id = <service-principal-client-id>
client_secret = <service-principal-secret>
Для операций на уровне рабочей области задайте следующие значения в .databrickscfg
файле. В этом случае узел является URL-адресом Azure Databricks для каждой рабочей области, напримерhttps://adb-1234567890123456.7.azuredatabricks.net
:
[<some-unique-configuration-profile-name>]
host = <workspace-url>
client_id = <service-principal-client-id>
client_secret = <service-principal-secret>
CLI
Для интерфейса командной строки Databricks выполните одно из следующих действий:
- Задайте переменные среды, указанные в разделе "Среда".
- Задайте значения в файле, как указано в разделе "Профиль" этой
.databrickscfg
статьи.
Переменные среды всегда имеют приоритет над значениями в .databrickscfg
файле.
См. также проверку подлинности OAuth на компьютере (M2M).
Connect
Примечание.
Проверка подлинности OAuth M2M поддерживается в следующих версиях Databricks Connect:
- Для Python Databricks Connect для Databricks Runtime 14.0 и более поздних версий.
- Для Scala Databricks Connect для Databricks Runtime 13.3 LTS и более поздних версий. Пакет SDK Databricks для Java, который входит в состав Databricks Connect для Databricks Runtime 13.3 LTS и выше, необходимо обновить до пакета SDK Databricks для Java 0.17.0 или более поздней версии.
Для Databricks Connect можно выполнить одно из следующих действий:
- Задайте значения в
.databrickscfg
файле для операций на уровне рабочей области Azure Databricks, как указано в разделе "Профиль". Также задайтеcluster_id
переменную среды в профиле URL-адрес рабочей области, напримерhttps://adb-1234567890123456.7.azuredatabricks.net
. - Задайте переменные среды для операций на уровне рабочей области Azure Databricks, как указано в разделе "Среда". Кроме того, задайте
DATABRICKS_CLUSTER_ID
переменную среды в URL-адресе для каждой рабочей области, напримерhttps://adb-1234567890123456.7.azuredatabricks.net
.
Значения в .databrickscfg
файле всегда имеют приоритет над переменными среды.
Чтобы инициализировать клиент Databricks Connect с этими переменными или значениями среды в .databrickscfg
файле, см. одно из следующих элементов:
- Сведения о Python см. в разделе "Настройка свойств подключения для Python".
- Сведения о Scala см. в разделе "Настройка свойств подключения для Scala".
VS Code
Для расширения Databricks для Visual Studio Code сделайте следующее:
- Задайте значения в
.databrickscfg
файле для операций на уровне рабочей области Azure Databricks, как указано в разделе "Профиль". - В области конфигурации расширения Databricks для Visual Studio Code нажмите кнопку "Настройка Databricks".
- В палитре команд для узла Databricks введите URL-адрес рабочей области, например
https://adb-1234567890123456.7.azuredatabricks.net
, и нажмите клавишуEnter
. - В палитре команд выберите имя целевого профиля в списке URL-адреса.
Дополнительные сведения см. в разделе "Настройка проверки подлинности" расширения Databricks для Visual Studio Code.
Terraform
Для операций на уровне учетной записи для проверки подлинности по умолчанию:
provider "databricks" {
alias = "accounts"
}
Для прямой конфигурации (замените retrieve
заполнители собственной реализацией, чтобы получить значения из консоли или другого хранилища конфигурации, например HashiCorp Vault. См. также поставщик хранилища. В этом случае URL-адрес консоли учетной записи Azure Databricks:https://accounts.azuredatabricks.net
provider "databricks" {
alias = "accounts"
host = <retrieve-account-console-url>
account_id = <retrieve-account-id>
client_id = <retrieve-client-id>
client_secret = <retrieve-client-secret>
}
Для операций на уровне рабочей области для проверки подлинности по умолчанию:
provider "databricks" {
alias = "workspace"
}
Для прямой конфигурации (замените retrieve
заполнители собственной реализацией, чтобы получить значения из консоли или другого хранилища конфигурации, например HashiCorp Vault. См. также поставщик хранилища. В этом случае узел является URL-адресом Azure Databricks для каждой рабочей области, напримерhttps://adb-1234567890123456.7.azuredatabricks.net
:
provider "databricks" {
alias = "workspace"
host = <retrieve-workspace-url>
client_id = <retrieve-client-id>
client_secret = <retrieve-client-secret>
}
Дополнительные сведения о проверке подлинности с помощью поставщика Databricks Terraform см. в разделе "Проверка подлинности".
Python
Для операций на уровне учетной записи используйте следующие параметры для проверки подлинности по умолчанию:
from databricks.sdk import AccountClient
a = AccountClient()
# ...
Для прямой настройки используйте следующую команду, заменив retrieve
заполнители собственной реализацией, чтобы получить значения из консоли или другого хранилища конфигурации, например Azure KeyVault. В этом случае URL-адрес консоли учетной записи Azure Databricks:https://accounts.azuredatabricks.net
from databricks.sdk import AccountClient
a = AccountClient(
host = retrieve_account_console_url(),
account_id = retrieve_account_id(),
client_id = retrieve_client_id(),
client_secret = retrieve_client_secret()
)
# ...
Для операций на уровне рабочей области, в частности для проверки подлинности по умолчанию:
from databricks.sdk import WorkspaceClient
w = WorkspaceClient()
# ...
Для прямой настройки замените retrieve
заполнители собственной реализацией, чтобы получить значения из консоли или другого хранилища конфигурации, например Azure KeyVault. В этом случае узел является URL-адресом Azure Databricks для каждой рабочей области, напримерhttps://adb-1234567890123456.7.azuredatabricks.net
:
from databricks.sdk import WorkspaceClient
w = WorkspaceClient(
host = retrieve_workspace_url(),
client_id = retrieve_client_id(),
client_secret = retrieve_client_secret()
)
# ...
Дополнительные сведения о проверке подлинности с помощью средств Databricks и пакетов SDK, использующих Python и реализующих единую проверку подлинности клиента Databricks, см. в следующем разделе:
- Настройка клиента Databricks Connect для Python
- Проверка подлинности пакета SDK Databricks для Python с помощью учетной записи Или рабочей области Azure Databricks
Примечание.
Расширение Databricks для Visual Studio Code использует Python, но еще не реализовало проверку подлинности OAuth M2M.
Java
Для операций на уровне рабочей области для проверки подлинности по умолчанию:
import com.databricks.sdk.WorkspaceClient;
// ...
WorkspaceClient w = new WorkspaceClient();
// ...
Для прямой конфигурации (замените retrieve
заполнители собственной реализацией, чтобы получить значения из консоли или другого хранилища конфигурации, например Azure KeyVault). В этом случае узел является URL-адресом Azure Databricks для каждой рабочей области, напримерhttps://adb-1234567890123456.7.azuredatabricks.net
:
import com.databricks.sdk.WorkspaceClient;
import com.databricks.sdk.core.DatabricksConfig;
// ...
DatabricksConfig cfg = new DatabricksConfig()
.setHost(retrieveWorkspaceUrl())
.setClientId(retrieveClientId())
.setClientSecret(retrieveClientSecret());
WorkspaceClient w = new WorkspaceClient(cfg);
// ...
Дополнительные сведения о проверке подлинности с помощью средств Databricks и пакетов SDK, использующих Java и реализующих единую проверку подлинности клиента Databricks, см. в следующем разделе:
- Настройка клиента Databricks Connect для Scala (клиент Databricks Connect для Scala использует включенный пакет SDK Databricks для Java для проверки подлинности)
- Проверка подлинности пакета SDK Databricks для Java с помощью учетной записи Или рабочей области Azure Databricks
Go
Для операций на уровне учетной записи для проверки подлинности по умолчанию:
import (
"github.com/databricks/databricks-sdk-go"
)
// ...
w := databricks.Must(databricks.NewWorkspaceClient())
// ...
Для прямой конфигурации (замените retrieve
заполнители собственной реализацией, чтобы получить значения из консоли или другого хранилища конфигурации, например Azure KeyVault). В этом случае URL-адрес консоли учетной записи Azure Databricks:https://accounts.azuredatabricks.net
import (
"github.com/databricks/databricks-sdk-go"
)
// ...
w := databricks.Must(databricks.NewWorkspaceClient(&databricks.Config{
Host: retrieveAccountConsoleUrl(),
AccountId: retrieveAccountId(),
ClientId: retrieveClientId(),
ClientSecret: retrieveClientSecret(),
}))
// ...
Для операций на уровне рабочей области для проверки подлинности по умолчанию:
import (
"github.com/databricks/databricks-sdk-go"
)
// ...
a := databricks.Must(databricks.NewAccountClient())
// ...
Для прямой конфигурации (замените retrieve
заполнители собственной реализацией, чтобы получить значения из консоли или другого хранилища конфигурации, например Azure KeyVault). В этом случае узел является URL-адресом Azure Databricks для каждой рабочей области, напримерhttps://adb-1234567890123456.7.azuredatabricks.net
:
import (
"github.com/databricks/databricks-sdk-go"
)
// ...
a := databricks.Must(databricks.NewAccountClient(&databricks.Config{
Host: retrieveWorkspaceUrl(),
ClientId: retrieveClientId(),
ClientSecret: retrieveClientSecret(),
}))
// ...
Дополнительные сведения о проверке подлинности с помощью средств Databricks и пакетов SDK, использующих Go и реализующих единую проверку подлинности клиента Databricks, см. в статье "Проверка подлинности пакета SDK Databricks для Go" с учетной записью Azure Databricks или рабочей областью.
Создание и использование маркеров доступа вручную для проверки подлинности OAuth M2M
Средства и пакеты SDK Azure Databricks, реализующие стандарт единой проверки подлинности клиента Databricks, автоматически создают, обновляют и используют маркеры доступа OAuth Azure Databricks от вашего имени, как это необходимо для проверки подлинности OAuth M2M.
Databricks рекомендует использовать единую проверку подлинности клиента, однако если необходимо вручную создать, обновить или использовать маркеры доступа Azure Databricks OAuth, следуйте инструкциям в этом разделе.
Используйте идентификатор клиента субъекта-службы и секрет OAuth, чтобы запросить маркер доступа OAuth для проверки подлинности как rest API уровня учетной записи, так и REST API уровня рабочей области. Срок действия маркера доступа истекает через час. После истечения срока действия необходимо запросить новый маркер доступа OAuth. Область маркера доступа OAuth зависит от уровня, из которой создается маркер. Вы можете создать маркер на уровне учетной записи или на уровне рабочей области следующим образом:
- Чтобы вызвать ИНТЕРФЕЙСы REST API уровня учетной записи и рабочей области на уровне рабочей области в учетных записях и рабочих областях, к которым имеет доступ субъект-служба, вручную создайте маркер доступа на уровне учетной записи.
- Чтобы вызвать REST API в пределах только одной из рабочих областей, к которым имеет доступ субъект-служба, вручную создайте маркер доступа на уровне рабочей области только для этой рабочей области.
Создание маркера доступа на уровне учетной записи вручную
Маркер доступа OAuth, созданный на уровне учетной записи, можно использовать для REST API Databricks в учетной записи, а в любой рабочей области субъект-служба имеет доступ.
Войдите в консоль учетной записи с правами администратора учетных записей.
Щелкните стрелку вниз рядом с именем пользователя в правом верхнем углу.
Скопируйте идентификатор учетной записи.
Создайте URL-адрес конечной точки маркера, заменив
<my-account-id>
в следующем URL-адресе идентификатор учетной записи, скопированный вами.https://accounts.azuredatabricks.net/oidc/accounts/<my-account-id>/v1/token
Используйте клиент, например
curl
, чтобы запросить маркер доступа OAuth с URL-адресом конечной точки маркера, идентификатором клиента субъекта-службы (также известным как идентификатор приложения) и созданным секретом OAuth субъекта-службы. Областьall-apis
запрашивает маркер доступа OAuth, который можно использовать для доступа ко всем REST API Databricks, к которым субъект-служба получил доступ.- Замените
<token-endpoint-URL>
url-адрес предыдущей конечной точки маркера. - Замените
<client-id>
идентификатором клиента субъекта-службы, который также называется идентификатором приложения. - Замените
<client-secret>
созданный секрет OAuth субъекта-службы.
export CLIENT_ID=<client-id> export CLIENT_SECRET=<client-secret> curl --request POST \ --url <token-endpoint-URL> \ --user "$CLIENT_ID:$CLIENT_SECRET" \ --data 'grant_type=client_credentials&scope=all-apis'
Это создает ответ, аналогичный следующему:
{ "access_token": "eyJraWQiOiJkYTA4ZTVjZ…", "token_type": "Bearer", "expires_in": 3600 }
Скопируйте ответ
access_token
.- Замените
Создание маркера доступа на уровне рабочей области вручную
Маркер доступа OAuth, созданный на уровне рабочей области, может получить доступ только к REST API в этой рабочей области, даже если субъект-служба является администратором учетной записи или является членом других рабочих областей.
Создайте URL-адрес конечной точки маркера, заменив
https://<databricks-instance>
URL-адрес рабочей области развертывания Azure Databricks:https://<databricks-instance>/oidc/v1/token
Используйте клиент, например
curl
, чтобы запросить маркер доступа OAuth с URL-адресом конечной точки маркера, идентификатором клиента субъекта-службы (также известным как идентификатор приложения) и созданным секретом OAuth субъекта-службы. Областьall-apis
запрашивает маркер доступа OAuth, который можно использовать для доступа ко всем REST API Databricks, к которым субъект-служба был предоставлен доступ в рабочей области, из которую вы запрашиваете маркер.- Замените
<token-endpoint-URL>
url-адрес предыдущей конечной точки маркера. - Замените
<client-id>
идентификатором клиента субъекта-службы, который также называется идентификатором приложения. - Замените
<client-secret>
созданный секрет OAuth субъекта-службы.
export CLIENT_ID=<client-id> export CLIENT_SECRET=<client-secret> curl --request POST \ --url <token-endpoint-URL> \ --user "$CLIENT_ID:$CLIENT_SECRET" \ --data 'grant_type=client_credentials&scope=all-apis'
Это создает ответ, аналогичный следующему:
{ "access_token": "eyJraWQiOiJkYTA4ZTVjZ…", "token_type": "Bearer", "expires_in": 3600 }
Скопируйте ответ
access_token
.- Замените
Вызов REST API Databricks
Теперь можно использовать маркер доступа OAuth для проверки подлинности в REST API уровня учетной записи Azure Databricks и REST API уровня рабочей области. Субъект-служба должен быть администратором учетной записи для вызова REST API уровня учетной записи.
Вы можете включить маркер в заголовок с помощью аутентификации Bearer
. Этот подход можно использовать с curl
или любым другим созданным клиентом.
Пример запроса REST API на уровне учетной записи
В этом примере используется Bearer
проверка подлинности для получения списка всех рабочих областей, связанных с учетной записью.
- Замените
<oauth-access-token>
маркер доступа OAuth субъекта-службы, скопированный на предыдущем шаге. - Замените
<account-id>
идентификатором учетной записи.
export OAUTH_TOKEN=<oauth-access-token>
curl --request GET --header "Authorization: Bearer $OAUTH_TOKEN" \
'https://accounts.azuredatabricks.net/api/2.0/accounts/<account-id>/workspaces'
Пример запроса REST API на уровне рабочей области
В этом примере используется аутентификация Bearer
для вывода всех доступных кластеров в указанной рабочей области.
- Замените
<oauth-access-token>
маркер доступа OAuth субъекта-службы, скопированный на предыдущем шаге. - Замените
<workspace-URL>
URL-адрес базовой рабочей области, который имеет форму, аналогичнуюdbc-a1b2345c-d6e7.cloud.databricks.com
.
export OAUTH_TOKEN=<oauth-access-token>
curl --request GET --header "Authorization: Bearer $OAUTH_TOKEN" \
'https://<workspace-URL>/api/2.0/clusters/list'
Дополнительные ресурсы
- Субъекты-службы
- Обзор модели удостоверений Databricks
- Дополнительные сведения о проверке подлинности и управлении доступом