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


Авторизация доступа субъекта-службы к Azure Databricks с помощью OAuth

На этой странице объясняется, как авторизовать доступ к ресурсам Azure Databricks из автоматических процессов, таких как автоматизированные команды CLI или вызовы REST API, выполненные из скриптов или приложений.

Azure Databricks использует OAuth 2.0 в качестве предпочтительного протокола для авторизации и проверки подлинности субъекта-службы за пределами пользовательского интерфейса. Единая аутентификация клиентов автоматизирует создание и обновление токенов. Когда субъект-служба входит и получает согласие, OAuth выдает маркер доступа для интерфейса командной строки, пакета SDK или другого средства, используемого от его имени. Каждый маркер доступа действителен в течение одного часа, после чего новый маркер автоматически запрашивается.

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

Дополнительные сведения см. в статье "Авторизация доступа к ресурсам Azure Databricks".

Замечание

На этой странице рассматривается аутентификация OAuth M2M для служебных принципалов, управляемых Databricks. Если вы используете субъекты-службы, управляемые Microsoft Entra, см. статью "Проверка подлинности с помощью субъектов-служб Microsoft Entra".

Способы авторизации субъекта-службы

Azure Databricks поддерживает два способа авторизации служебного принципала:

  • Автоматически (рекомендуется): Используйте единую проверку подлинности с поддерживаемыми инструментами и пакетами SDK, такими как пакет SDK Azure Databricks Terraform. Этот подход обрабатывает создание и обновление маркеров автоматически и идеально подходит для автоматизации или других ненаблюдаемых рабочих нагрузок.

  • Вручную: Создайте проверяющее устройство кода и вызов подтверждения, а затем обменяйте их на токен OAuth. Используйте этот метод, если средство или API не поддерживает единую проверку подлинности. Возможно, вам потребуется создать собственный механизм обновления токенов для вашего приложения. Дополнительные сведения см. в руководстве по созданию маркеров доступа OAuth M2M.

Предпосылки

Перед настройкой OAuth выполните следующие действия.

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

Шаг 1. Создание секрета OAuth

Чтобы авторизовать доступ к ресурсам Azure Databricks с помощью OAuth, необходимо создать секрет OAuth. Секрет используется для создания токенов доступа OAuth для аутентификации. Субъект-служба может иметь до пяти секретов OAuth, и каждый секрет может быть действительным до двух лет.

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

  1. Щелкните имя пользователя в верхней строке и выберите "Параметры".
  2. Перейдите на вкладку Идентификация и доступ.
  3. Рядом с учетными записями служб нажмите Управление.
  4. Выберите сервисный принципал.
  5. Перейдите на вкладку "Секреты ".
  6. Нажмите кнопку "Создать секрет".
  7. Задайте время существования секрета в днях (максимум 730 дней).
  8. Нажмите кнопку "Создать".
  9. Скопируйте отображаемый секрет и идентификатор клиента, а затем нажмите кнопку "Готово". Секрет отображается только один раз. Идентификатор клиента совпадает с идентификатором приложения субъекта-службы.

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

Замечание

Чтобы субъект-служба мог использовать кластеры или хранилища SQL, необходимо предоставить субъекту-службе доступ к ним. См. сведения о разрешениях вычислений или управлении хранилищем SQL.

Шаг 2. Использование авторизации OAuth

Чтобы использовать авторизацию OAuth с единым инструментом аутентификации, необходимо задать следующие связанные переменные среды, поля, поля .databrickscfg, поля Terraform или поля Config.

  • Хост Azure Databricks, указанный как https://accounts.azuredatabricks.net для операций с учетной записью или целевой URL-адрес для рабочей области, например https://adb-1234567890123456.7.azuredatabricks.net для операций с рабочей областью.
  • Идентификатор учетной записи Azure Databricks для операций с учетной записью Azure Databricks.
  • Идентификатор клиента служебного субъекта.
  • Секрет сервисного принципала.

Чтобы выполнить аутентификацию субъекта службы OAuth, интегрируйте в код следующие компоненты в зависимости от используемого инструмента или пакета SDK.

Окружающая среда

Сведения об использовании переменных среды для определенного типа проверки подлинности Azure Databricks с помощью инструмента или пакета SDK см. в статье "Авторизация доступа к ресурсам Azure Databricks " или документации по средству или пакету SDK. См. также переменные среды и поля для единой проверки подлинности и приоритет метода проверки подлинности.

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

  • DATABRICKS_HOST, установите значение URL-адреса консоли учетной записи Azure Databricks. https://accounts.azuredatabricks.net
  • 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 , например .

[<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).

Подключить

Замечание

Проверка подлинности субъекта-службы OAuth поддерживается в следующих версиях 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 файле, как описано на вкладке "Профиль ". Также задайте URL-адрес экземпляра cluster_id рабочей области.
  • Используйте переменные среды: Задайте те же значения, что и на вкладке "Среда ". Также задайте URL-адрес экземпляра DATABRICKS_CLUSTER_ID рабочей области.

Значения в .databrickscfg имеют приоритет над переменными среды.

Сведения об инициализации Databricks Connect с этими параметрами см. в разделе "Конфигурация вычислений для Databricks Connect".

VS Code

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

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

Дополнительные сведения см. в разделе Настройка авторизации для расширения Databricks для Visual Studio Code.

Терраформирование

Операции на уровне учетной записи

Для проверки подлинности по умолчанию:

provider "databricks" {
  alias = "accounts"
}

Для прямой конфигурации:

provider "databricks" {
  alias         = "accounts"
  host          = <retrieve-account-console-url>
  account_id    = <retrieve-account-id>
  client_id     = <retrieve-client-id>
  client_secret = <retrieve-client-secret>
}

Замените заполнители retrieve собственной реализацией, чтобы получить значения из консоли или другого хранилища конфигурации, например HashiCorp Vault. См. также поставщик хранилища. В этом случае URL-адрес консоли учетной записи Azure Databricks — это https://accounts.azuredatabricks.net.

Операции уровня рабочей области

Для конфигурации по умолчанию:

provider "databricks" {
  alias = "workspace"
}

Для прямой конфигурации:

provider "databricks" {
  alias         = "workspace"
  host          = <retrieve-workspace-url>
  client_id     = <retrieve-client-id>
  client_secret = <retrieve-client-secret>
}

Замените retrieve собственной реализацией, чтобы получить значения из консоли или другого хранилища параметров конфигурации, например HashiCorp Vault. См. также поставщик хранилища. В этом случае хост — это URL-адрес рабочей области Azure Databricks , например .

Для получения дополнительной информации об аутентификации с провайдером Databricks Terraform, смотрите Аутентификация.

Питон

Операции на уровне учетной записи

Для конфигурации по умолчанию:

from databricks.sdk import AccountClient

a = AccountClient()
# ...

Для прямой конфигурации:

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()
)
# ...

Замените заполнители retrieve собственной реализацией, чтобы извлечь значения из консоли или другого хранилища конфигурации, такого как Azure KeyVault. В этом случае URL-адрес консоли учетной записи Azure Databricks — это https://accounts.azuredatabricks.net.

Операции уровня рабочей области

Для конфигурации по умолчанию:

from databricks.sdk import WorkspaceClient

w = WorkspaceClient()
# ...

Для прямой конфигурации:

from databricks.sdk import WorkspaceClient

w = WorkspaceClient(
  host          = retrieve_workspace_url(),
  client_id     = retrieve_client_id(),
  client_secret = retrieve_client_secret()
)
# ...

Замените заполнители retrieve собственной реализацией для получения значений из консоли или другого хранилища конфигурации, например Azure KeyVault. В этом случае узлом является URL-адрес Azure Databricks для каждой области работы, например https://adb-1234567890123456.7.azuredatabricks.net.

Дополнительные сведения о проверке подлинности с помощью средств Databricks и пакетов SDK, использующих Python и реализующих единую проверку подлинности, см. в следующем разделе:

Замечание

Расширение Databricks для Visual Studio Code использует Python, но еще не реализовало проверку подлинности сервисного принципала OAuth.

Ява

Операции уровня рабочей области

Для конфигурации по умолчанию:

import com.databricks.sdk.WorkspaceClient;
// ...
WorkspaceClient w = new WorkspaceClient();
// ...

Для прямой конфигурации:

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);
// ...

retrieve Замените заполнители собственной реализацией, чтобы получить значения из консоли или другого хранилища конфигурации, например Azure KeyVault. В этом случае хост — это URL-адрес Azure Databricks рабочей области, например https://adb-1234567890123456.7.azuredatabricks.net.

Дополнительные сведения о проверке подлинности с помощью средств Databricks и пакетов SDK, использующих Java и реализующих единую проверку подлинности, см. в следующем разделе:

Иди

Операции на уровне учетной записи

Конфигурация по умолчанию:

import "github.com/databricks/databricks-sdk-go"

// Uses environment configuration automatically
a := databricks.Must(databricks.NewAccountClient())

Для прямой конфигурации:

import (
  "github.com/databricks/databricks-sdk-go"
)
// ...
a := databricks.Must(databricks.NewAccountClient(&databricks.Config{
  Host:         retrieveWorkspaceUrl(),
  ClientId:     retrieveClientId(),
  ClientSecret: retrieveClientSecret(),
}))
// ...

Замените заполнители retrieve вашей реализацией, чтобы получить значения из консоли или другого хранилища конфигурации, такого как Azure KeyVault. В этом случае URL-адрес консоли учетной записи Azure Databricks — это https://accounts.azuredatabricks.net.

Операции уровня рабочей области

Для конфигурации по умолчанию:

import "github.com/databricks/databricks-sdk-go"

// Uses environment configuration automatically
w := databricks.Must(databricks.NewWorkspaceClient())

Для прямой конфигурации:

import "github.com/databricks/databricks-sdk-go"
// ...
w := databricks.Must(databricks.NewWorkspaceClient(&databricks.Config{
    Host:         retrieveAccountConsoleUrl(),
    ClientId:     retrieveClientId(),
    ClientSecret: retrieveClientSecret(),
}))
// ...

retrieve Замените заполнители собственной реализацией, чтобы получить значения из консоли или другого хранилища конфигурации, например Azure KeyVault. В этом случае хост — это URL-адрес Azure Databricks на каждую рабочую область, например https://adb-1234567890123456.7.azuredatabricks.net.

Дополнительные сведения о проверке подлинности с помощью средств Databricks и пакетов SDK, использующих Go и реализующих единую проверку подлинности клиента Databricks, см. в статье "Проверка подлинности пакета SDK Databricks для Go" с учетной записью Azure Databricks или рабочей областью.

Создание маркеров доступа OAuth M2M вручную

Этот раздел предназначен для средств или служб, которые не поддерживают единую проверку подлинности Databricks. Если вам нужно вручную создавать, обновлять или использовать маркеры OAuth Azure Databricks для проверки подлинности M2M, выполните следующие действия.

Чтобы создать токен доступа OAuth M2M, используйте идентификатор клиента служебного принципала и секрет OAuth. Каждый маркер доступа действителен в течение одного часа. После истечения срока действия запросите новый маркер. Токены можно создать на уровне рабочей области или учетной записи.

Создание токена доступа для уровня учетной записи

Используйте маркер уровня учетной записи для вызова REST API для учетной записи и любых рабочих областей, к которым служебный принципал может получить доступ.

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

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

    https://accounts.azuredatabricks.net/oidc/accounts/<my-account-id>/v1/token
    
  3. Используйте curl, чтобы запросить маркер доступа OAuth. Замена:

    • <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
    }
    

    Область all-apis запрашивает токен доступа OAuth, который позволяет основному объекту службы вызывать любые доступные ему REST API Databricks.

  4. access_token Скопируйте значение из ответа.

Создание маркера доступа на уровне рабочей области

Используйте токен уровня рабочей области только с REST API в этой рабочей области.

  1. Создайте URL-адрес конечной точки маркера, заменив <databricks-instance> на ваше <databricks-instance> с именем экземпляра рабочей области Azure Databricks, например adb-1234567890123456.7.azuredatabricks.net:

    https://<databricks-instance>/oidc/v1/token
    
  2. Используйте curl для запроса маркера доступа OAuth. Замена:

    • <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
    }
    
  3. access_token Скопируйте значение из ответа.

Замечание

Чтобы создать маркер для конечной точки обслуживания, добавьте идентификатор конечной точки и действие в запрос. См. инструкции по получению токена OAuth вручную.

Вызов REST API Azure Databricks

Используйте маркер доступа OAuth для вызова REST API уровня учетной записи или рабочей области . Чтобы вызвать API уровня учетной записи, субъект-служба должен быть администратором учетной записи.

Включите токен в заголовок авторизации с Bearer проверкой подлинности.

Пример запроса REST API на уровне учетной записи

В этом примере перечислены все рабочие области для учетной записи. Замена:

  • <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 на уровне рабочей области

В этом примере перечислены все доступные кластеры в рабочей области. Замена:

export OAUTH_TOKEN=<oauth-access-token>

curl --request GET --header "Authorization: Bearer $OAUTH_TOKEN" \
'https://<workspace-URL>/api/2.0/clusters/list'

Устранение проблем с аутентификацией OAuth M2M

Используйте эти действия, чтобы устранить наиболее распространенные проблемы с проверкой подлинности OAuth M2M для учетных записей служб.

Быстрые проверки

Начните с проверки этих распространенных проблем конфигурации, которые вызывают сбои проверки подлинности OAuth M2M:

  • Учетные данные:DATABRICKS_CLIENT_ID установлены как идентификатор приложения принципала службы (идентификатор клиента), а DATABRICKS_CLIENT_SECRET установлено как значение секрета OAuth, без дополнительных пробелов.
  • Хозяин:DATABRICKS_HOST указывает на https://accounts.azuredatabricks.net операции с учетной записью или URL-адрес целевой рабочей области, например для операций https://adb-1234567890123456.7.azuredatabricks.net. Не включать /api.
  • Задание: Служебный принципал назначен целевой рабочей области.
  • Разрешения: Служебный субъект имеет необходимые разрешения для целевого ресурса.
  • Конфликтов: Не заданы конфликтующие переменные, например DATABRICKS_TOKEN, DATABRICKS_USERNAME. Выполните env | grep DATABRICKS и устраните конфликты.
  • Инструменты: Используйте единую проверку подлинности и текущие версии интерфейса командной строки или пакета SDK.

401 Несанкционированный доступ

Вероятные причины и исправления:

  • Недопустимый идентификатор клиента или секрет: Скопируйте повторно DATABRICKS_CLIENT_ID и DATABRICKS_CLIENT_SECRET. Повторно создайте ключ, если вы не уверены.
  • Секрет с истекшим сроком действия: Создайте новый секрет, если истек срок действия текущей.
  • Неправильный издатель токена: Для M2M используйте конечную точку токена OAuth Databricks, а не конечную точку токена IdP или облачного токена.
  • Несоответствие узла: Если вы выполняете проверку подлинности для API рабочей области, необходимо указать URL-адрес рабочей области, DATABRICKS_HOST который вы вызываете.

403. Запрещено

Вероятные причины и исправления:

  • Отсутствующие разрешения на ресурсы: Предоставьте служебному принципалу CAN USE разрешения на кластерах или CAN MANAGE в хранилищах SQL, а также необходимые разрешения на уровне объектов для записных книжек, заданий или объектов данных.
  • Нет назначения рабочей области: Назначьте служебный принципал рабочей области в консоли учётной записи.
  • Доступ к API администратора: Для API, предназначенных исключительно для администраторов, добавьте служебный принципал в группу администраторов рабочей области или предоставьте права администратора учетной записи.

Проблемы с конфигурацией

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

Fixes:

  • Правила хоста: Используйте URL-адрес консоли учетной записи для API учетной записи. Используйте URL-адрес рабочей области для API рабочей области. Не включайте /api суффикс.
  • Идентификатор учетной записи: Указывайте DATABRICKS_ACCOUNT_ID только для операций на уровне учетной записи. Используйте UUID из консоли учетной записи.
  • Выбор профиля: Если вы используете несколько профилей, передайте --profile <name> или установите DATABRICKS_CONFIG_PROFILE.

Connectivity

Если проверка подлинности OAuth M2M завершается сбоем из-за проблем с сетью, используйте эти тесты, чтобы убедиться, что ваша среда может достичь конечных точек Databricks:

  • DNS:nslookup <your-host> (должен возвращать IP-адреса для имени узла)
  • TLS и доступность:curl -I https://<your-host> (должно возвращать состояние HTTP 200, 401 или 403)
  • Корпоративная сеть: Убедитесь, что правила прокси-сервера или брандмауэра разрешают HTTPS конечным точкам Databricks

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