Разрешить автоматизированный доступ к ресурсам 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.
- Войдите в рабочую область Azure Databricks как администратор рабочей области.
- Нажмите имя пользователя в верхней строке рабочей области Azure Databricks и выберите Параметры.
- Щелкните вкладку "Удостоверение" и "Доступ ".
- Рядом с субъектами-службами нажмите кнопку "Управление".
- Нажмите кнопку "Добавить субъект-службу".
- Щелкните стрелку раскрывающегося списка в поле поиска и нажмите кнопку "Добавить".
- В разделе "Управление" выберите databricks managed.
- Введите имя субъекта-службы.
- Нажмите кнопку Добавить.
Субъект-служба добавляется как в рабочую область, так и в учетную запись Azure Databricks.
Шаг 1. Назначение разрешений служебному принципалу
- Щелкните имя субъекта-службы, чтобы открыть страницу сведений.
- На вкладке конфигурации
установите флажок рядом с каждым правом, которым требуется иметь субъект-службу для этой рабочей области, а затем щелкните Обновить . - На вкладке Разрешения предоставьте доступ нужным пользователям Azure Databricks, служебным принципалам и группам, которым требуется управлять и использовать этот служебный принципал. См. статью "Управление ролями" в субъекте-службе.
Шаг 2. Создайте секрет OAuth для служебного принципала
Прежде чем использовать OAuth для авторизации доступа к ресурсам Azure Databricks, необходимо сначала создать секрет OAuth, который можно использовать для создания маркеров доступа OAuth для проверки подлинности. Субъект-служба может иметь до пяти секретов OAuth. Администраторы учетных записей и администраторы рабочей области могут создавать секрет OAuth для субъекта-службы.
На странице сведений субъекта-службы щелкните вкладку "Секреты ".
В разделе секреты OAuthщелкните Создать секрет.
Скопируйте отображаемый секрет и идентификатор клиента, а затем нажмите кнопку "Готово".
Секрет будет выявлен только один раз во время создания. Идентификатор клиента совпадает с идентификатором приложения субъекта-службы.
Администраторы учетных записей также могут создать OAuth-секрет на странице с информацией о служебном принципале в консоли учетной записи.
Войдите в консоль учетной записи с правами администратора учетных записей.
Щелкните "Управление пользователями".
На вкладке субъекты-службы выберите ваш субъект-службы.
В разделе секреты OAuthщелкните Создать секрет.
Скопируйте отображаемый секрет и идентификатор клиента, а затем нажмите кнопку "Готово".
Примечание.
Чтобы субъект-служба мог использовать кластеры или хранилища 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 сделайте следующее:
- Задайте значения в файле
.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
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 Connect для Python
- Проверка подлинности пакета SDK Databricks для Python с помощью учетной записи Или рабочей области Azure 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, см. в следующем разделе:
- настройка клиента 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
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 зависит от уровня, из которой создается маркер. Вы можете создать маркер на уровне учетной записи или на уровне рабочей области следующим образом:
- Чтобы вызвать 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 можно использовать для проверки подлинности в 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'
Дополнительные ресурсы
- Субъекты-службы
- Обзор модели удостоверений Databricks
- Дополнительные сведения о проверке подлинности и управлении доступом