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


Разрешить автоматизированный доступ к ресурсам Azure Databricks с помощью служебного принципала с использованием OAuth.

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

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

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

Каковы мои варианты авторизации и аутентификации при использовании служебного принципала Azure Databricks?

В этом разделе термин авторизация относится к протоколу (OAuth), который используется для согласования доступа к конкретным ресурсам Azure Databricks посредством делегирования. Проверка подлинности обозначает механизм, с помощью которого учетные данные представляются, передаются и проверяются, а именно маркеры доступа.

Azure Databricks использует авторизацию на основе OAuth 2.0, чтобы разрешить доступ к учетной записи Azure Databricks и ресурсам рабочей области из командной строки или кода от имени субъекта-службы с разрешениями на доступ к этим ресурсам. После настройки субъекта-службы Azure Databricks и проверки его учетных данных во время выполнения команды CLI или вызова REST API, токен OAuth предоставляется инструменту или пакету SDK для осуществления аутентификации на основе токенов от имени субъекта-службы на постоянной основе. Маркер доступа OAuth имеет срок действия одного часа, после которого средство или пакет SDK, участвующий, сделает автоматическую фоновую попытку получить новый маркер, который также действителен в течение одного часа.

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

  • В основном автоматически с помощью поддержки унифицированной проверки подлинности клиента Databricks. Используйте этот упрощенный подход, если вы используете определенные пакеты SDK Для Azure Databricks (например, пакет SDK Для Databricks Terraform) и средства. Поддерживаемые средства и пакеты SDK перечислены в единой проверке подлинности клиента Databricks. Этот подход хорошо подходит для автоматизации или других сценариев автоматического процесса.
  • Вручную путем создания пары проверки и вызова кода OAuth и кода авторизации и создания начального маркера OAuth, который будет предоставлен в конфигурации. Используйте этот подход, если вы не используете API, поддерживаемый унифицированной проверкой подлинности клиента Databricks. В этом случае может потребоваться разработать собственный механизм для обработки обновления маркеров доступа, относящихся к стороннему инструменту или API, который вы используете. Дополнительные сведения см. в статье о том, как вручную создавать и использовать токены доступа для аутентификации учетной записи службы OAuth.

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

Предварительное условие: Создание служебного принципала

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

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

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

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

Шаг 1. Назначение разрешений служебному принципалу

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

Шаг 2. Создайте секрет OAuth для служебного принципала

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

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

  2. В разделе секреты OAuthщелкните Создать секрет.

    генерация секрета OAuth из рабочей области

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

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

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

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

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

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

  4. В разделе секреты OAuthщелкните Создать секрет.

    генерация секрета OAuth из рабочей области

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

Примечание.

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

Шаг 3. Использование авторизации 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

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

  • 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

[<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 поддерживается в следующих версиях 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, см. раздел конфигурации вычислений для Databricks Connect.

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

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

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.

Java

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

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

Для прямой конфигурации (замените заполнители retrieve собственной реализацией для получения значений из консоли или другого хранилища конфигурации, например Azure KeyVault). В этом случае узел является URL-адресом Azure Databricks

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

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

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

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

Используйте идентификатор клиента субъекта-службы и секрет OAuth, чтобы запросить маркер доступа OAuth для проверки подлинности как rest API уровня учетной записи, так и REST API уровня рабочей области. Срок действия маркера доступа истекает через час. После истечения срока действия необходимо запросить новый маркер доступа OAuth. Область маркера доступа OAuth зависит от уровня, из которой создается маркер. Вы можете создать маркер на уровне учетной записи или на уровне рабочей области следующим образом:

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

Маркер доступа 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 можно использовать для проверки подлинности в Azure Databricks REST API и уровне рабочей области 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'

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