Проверка подлинности доступа к Azure Databricks с помощью субъекта-службы с помощью OAuth (OAuth M2M)

В этой статье объясняется, как создать субъект-службу Azure Databricks и использовать его для проверки подлинности в целевой сущности с помощью OAuth.

Шаг 1. Создание субъекта-службы

Администраторы учетных записей и администраторы рабочей области могут создавать субъекты-службы. На этом шаге описывается создание субъекта-службы в рабочей области. Сведения об использовании консоли учетной записи см. в статье "Управление субъектами-службами" в учетной записи.

Вы также можете создать управляемый субъект-службу идентификатора Microsoft Entra и добавить его в Azure Databricks. Дополнительные сведения см. в разделе Databricks и субъекты-службы идентификатора Microsoft Entra.

  1. Войдите в рабочую область Azure Databricks как администратор рабочей области.
  2. Щелкните имя пользователя в верхней строке рабочей области Azure Databricks и выберите "Параметры".
  3. Щелкните вкладку "Удостоверение" и "Доступ ".
  4. Рядом с субъектами-службами нажмите кнопку "Управление".
  5. Нажмите кнопку "Добавить субъект-службу".
  6. Щелкните стрелку раскрывающегося списка в поле поиска и нажмите кнопку "Добавить".
  7. В разделе "Управление" выберите databricks managed.
  8. Введите имя субъекта-службы.
  9. Нажмите кнопку Добавить.

Субъект-служба добавляется как в рабочую область, так и в учетную запись Azure Databricks.

Шаг 2. Назначение разрешений субъекту-службе

  1. Щелкните имя субъекта-службы, чтобы открыть страницу сведений.
  2. На вкладке "Конфигурации" установите флажок рядом с каждым правом, которое должен иметь субъект-служба для этой рабочей области, а затем нажмите кнопку "Обновить".
  3. На вкладке "Разрешения" предоставьте доступ ко всем пользователям Azure Databricks, субъектам-службам и группам, которым требуется управлять и использовать этот субъект-службу. См. статью "Управление ролями" в субъекте-службе.

Шаг 3. Создание секрета OAuth для субъекта-службы

Прежде чем использовать OAuth для проверки подлинности в Azure Databricks, необходимо сначала создать секрет OAuth, который можно использовать для создания маркеров доступа OAuth. Субъект-служба может иметь до пяти секретов OAuth. Администраторы учетных записей и администраторы рабочей области могут создавать секрет OAuth для субъекта-службы.

  1. На странице сведений субъекта-службы щелкните вкладку "Секреты ".

  2. В разделе секреты OAuth нажмите кнопку "Создать секрет".

    Создание секрета OAuth из рабочей области

  3. Скопируйте отображаемый секрет и идентификатор клиента, а затем нажмите кнопку "Готово".

Секрет будет выявлен только один раз во время создания. Идентификатор клиента совпадает с идентификатором приложения субъекта-службы.

Администраторы учетных записей также могут создать секрет OAuth на странице сведений субъекта-службы в консоли учетной записи.

  1. Войдите в консоль учетной записи с правами администратора учетных записей.

  2. Щелкните "Значок управления пользователем консоли учетных записейУправление пользователями".

  3. На вкладке "Субъекты-службы" выберите субъект-службу.

  4. В разделе секреты OAuth нажмите кнопку "Создать секрет".

    Создание секрета OAuth из рабочей области

  5. Скопируйте отображаемый секрет и идентификатор клиента, а затем нажмите кнопку "Готово".

Примечание.

Чтобы субъект-служба мог использовать кластеры или хранилища 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

Для операций на уровне рабочей области задайте следующие переменные среды:

Профиль

Создайте или определите профиль конфигурации 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 файле, см. одно из следующих элементов:

VS Code

Для расширения Databricks для Visual Studio Code сделайте следующее:

  1. Задайте значения в .databrickscfg файле для операций на уровне рабочей области Azure Databricks, как указано в разделе "Профиль".
  2. В области конфигурации расширения Databricks для Visual Studio Code нажмите кнопку "Настройка Databricks".
  3. В палитре команд для узла Databricks введите URL-адрес рабочей области, напримерhttps://adb-1234567890123456.7.azuredatabricks.net, и нажмите клавишуEnter.
  4. В палитре команд выберите имя целевого профиля в списке 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 для 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, см. в следующем разделе:

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 в учетной записи, а в любой рабочей области субъект-служба имеет доступ.

  1. Войдите в консоль учетной записи с правами администратора учетных записей.

  2. Щелкните стрелку вниз рядом с именем пользователя в правом верхнем углу.

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

  4. Создайте URL-адрес конечной точки маркера, заменив <my-account-id> в следующем URL-адресе идентификатор учетной записи, скопированный вами.

    https://accounts.azuredatabricks.net/oidc/accounts/<my-account-id>/v1/token
    
  5. Используйте клиент, например 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 в этой рабочей области, даже если субъект-служба является администратором учетной записи или является членом других рабочих областей.

  1. Создайте URL-адрес конечной точки маркера, заменив https://<databricks-instance> URL-адрес рабочей области развертывания Azure Databricks:

    https://<databricks-instance>/oidc/v1/token
    
  2. Используйте клиент, например 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'

Дополнительные ресурсы