Comparteix via


Autorización del acceso de usuario a Azure Databricks con OAuth

En esta página se explica cómo autorizar el acceso de usuario a los recursos de Azure Databricks al usar la CLI de Azure Databricks o las API rest de Azure Databricks.

Azure Databricks usa OAuth 2.0 como protocolo preferido para la autorización y autenticación de usuarios fuera de la interfaz de usuario. La autenticación de cliente unificada automatiza la generación y actualización de tokens. Después de que un usuario inicie sesión y conceda consentimiento, OAuth emite un token de acceso para la CLI, el SDK u otra herramienta que se usará en nombre del usuario. Cada token de acceso es válido durante una hora, después del cual se solicita automáticamente un nuevo token.

En esta página, la autorización hace referencia al uso de OAuth para conceder acceso a los recursos de Azure Databricks, mientras que la autenticación hace referencia a la validación de credenciales a través de tokens de acceso.

Para más información de alto nivel, consulte Autorización del acceso a los recursos de Azure Databricks.

Formas de autorizar el acceso a los recursos de Azure Databricks

Azure Databricks admite dos maneras de autorizar cuentas de usuario con OAuth:

  • Automático (recomendado): Use la autenticación unificada si está trabajando con herramientas y SDK compatibles, como el SDK de Terraform de Azure Databricks. Este enfoque controla automáticamente la generación y actualización de tokens.

  • Manual: Genere un comprobador de código y un desafío y, a continuación, intercambielos para un token de OAuth. Use este método si la herramienta no admite la autenticación unificada. Para obtener más información, consulte Generación manual de tokens de acceso U2M de OAuth.

Autorización automática con autenticación unificada

Nota:

Antes de configurar la autorización, revise los permisos de ACL para el tipo de operaciones del área de trabajo que planea realizar y confirme que la cuenta tiene el nivel de acceso necesario. Para obtener más información, consulte Listas de control de acceso.

Para realizar la autorización de OAuth con sdk y herramientas de Azure Databricks que admiten la autenticación unificada, integre lo siguiente en el código:

Entorno

Para usar variables de entorno para un tipo de autenticación de Azure Databricks específico con una herramienta o SDK, consulte Autorización del acceso a recursos de Azure Databricks o la documentación de la herramienta o el SDK. Consulte también Variables y campos de entorno para la autenticación unificada y la prioridad del método de autenticación.

Para las operaciones de nivel de cuenta, establezca las siguientes variables de entorno:

  • DATABRICKS_HOST, establecida en el valor de la dirección URL de la consola de la cuenta de Azure Databricks, https://accounts.azuredatabricks.net.
  • DATABRICKS_ACCOUNT_ID

Para las operaciones de nivel de área de trabajo, establezca las siguientes variables de entorno:

Perfil

Cree o identifique un perfil de configuración de Azure Databricks con los campos siguientes en el archivo .databrickscfg. Si crea el perfil, reemplace los marcadores de posición por los valores adecuados. Para usar el perfil con una herramienta o un SDK, consulte Autorización del acceso a los recursos de Azure Databricks o a la documentación del SDK o de la herramienta. Consulte también Variables y campos de entorno para la autenticación unificada y la prioridad del método de autenticación.

Para las operaciones de nivel de cuenta, establezca los siguientes valores en el archivo .databrickscfg. En este caso, la dirección URL de la consola de la cuenta de Azure Databricks es https://accounts.azuredatabricks.net:

[<some-unique-configuration-profile-name>]
host       = <account-console-url>
account_id = <account-id>

Para las operaciones de nivel de área de trabajo, establezca los siguientes valores en el archivo .databrickscfg. En este caso, el host es la dirección URL de Azure Databricks por área de trabajo, por ejemplo https://adb-1234567890123456.7.azuredatabricks.net:

[<some-unique-configuration-profile-name>]
host = <workspace-url>

Interfaz de línea de comandos (CLI)

Para la CLI de Azure Databricks, ejecute el databricks auth login comando con las siguientes opciones:

A continuación, siga las instrucciones del explorador web para iniciar sesión en su cuenta o área de trabajo de Azure Databricks.

Para más información, consulte autorización de OAuth con la CLI de Databricks.

Código de VS

Para la extensión de Databricks para Visual Studio Code, siga los pasos descritos en Configuración de la autorización para la extensión de Databricks para Visual Studio Code.

Conexión

La autenticación U2M de OAuth se admite en Databricks Connect para Python a partir de Databricks Runtime 13.1 y para Scala a partir de Databricks Runtime 13.3 LTS.

Para Databricks Connect, puede:

  • Use un perfil de configuración: Establezca los valores de nivel de área de trabajo en el .databrickscfg archivo como se describe en la pestaña Perfil . Establezca también en la cluster_id dirección URL de la instancia del área de trabajo.
  • Usar variables de entorno: Establezca los mismos valores que se muestran en la pestaña Entorno . Establezca también en la DATABRICKS_CLUSTER_ID dirección URL de la instancia del área de trabajo.

Los valores de .databrickscfg tienen prioridad sobre las variables de entorno.

Para inicializar Databricks Connect con estas opciones, consulte Configuración de proceso para Databricks Connect.

Terraformación

Antes de aplicar la configuración de Terraform, debe ejecutar uno de los databricks auth login comandos de la pestaña CLI en función de si la configuración usa operaciones de área de trabajo o cuenta. Estos comandos generan y almacenan en caché el token de OAuth necesario en .databricks/token-cache.json en la carpeta principal del usuario.

Operaciones de nivel de cuenta

Para la autenticación predeterminada:

provider "databricks" {
  alias = "account"
}

Para la configuración directa:

provider "databricks" {
  alias      = "account"
  host       = <retrieve-account-console-url>
  account_id = <retrieve-account-id>
}

Reemplace los marcadores de posición de retrieve- por su propia implementación para recuperar los valores de la consola o de algún otro almacén de configuración, como HashiCorp Vault. Consulte también Proveedor de almacén. En este ejemplo, puede establecer en account_id la dirección URL de la consola de la cuenta de Azure Databricks.

Operaciones de nivel de área de trabajo

Para la autenticación predeterminada:

  provider "databricks" {
  alias = "workspace"
}

Para la configuración directa:

provider "databricks" {
  alias = "workspace"
  host  = <retrieve-workspace-url>
}

Pitón

Antes de ejecutar el código, debe ejecutar el databricks auth login comando en la pestaña CLI con opciones de operaciones de área de trabajo o cuenta. Estos comandos generan y almacenan en caché el token de OAuth necesario en .databricks/token-cache.json en la carpeta principal del usuario.

Operaciones de nivel de cuenta

Para la autenticación predeterminada:

from databricks.sdk import AccountClient

a = AccountClient()
# ...

Para la configuración directa:

from databricks.sdk import AccountClient

a = AccountClient(
  host       = retrieveAccountConsoleUrl(),
  account_id = retrieveAccountId()
)
# ...

Reemplace los retrieve marcadores de posición por su propia implementación para recuperar los valores de la consola o de algún otro almacén de configuración, como Azure KeyVault.

Operaciones de nivel de área de trabajo

Para la autenticación predeterminada:

from databricks.sdk import WorkspaceClient

w = WorkspaceClient()
# ...

Para la configuración directa:

from databricks.sdk import WorkspaceClient

w = WorkspaceClient(host = retrieve_workspace_url())
# ...

Para más información sobre la autenticación con herramientas y SDK de Azure Databricks que usan Python e implementan la autenticación unificada de Databricks, consulte:

Java

Antes de ejecutar el código, debe ejecutar el databricks auth login comando en la pestaña CLI con opciones de operaciones de área de trabajo o cuenta. Estos comandos generan y almacenan en caché el token de OAuth necesario en .databricks/token-cache.json en la carpeta principal del usuario.

Operaciones de nivel de cuenta

Para la autenticación predeterminada:

import com.databricks.sdk.AccountClient;
// ...
AccountClient a = new AccountClient();
// ...

Para la configuración directa:

import com.databricks.sdk.AccountClient;
import com.databricks.sdk.core.DatabricksConfig;
// ...
DatabricksConfig cfg = new DatabricksConfig()
  .setHost(retrieveAccountConsoleUrl())
  .setAccountId(retrieveAccountId());
AccountClient a = new AccountClient(cfg);
// ...

Reemplace los retrieve marcadores de posición por su propia implementación para recuperar los valores de la consola o de algún otro almacén de configuración, como Azure KeyVault.

Operaciones de nivel de área de trabajo

Para la autenticación predeterminada:

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

Para la configuración directa:

import com.databricks.sdk.WorkspaceClient;
import com.databricks.sdk.core.DatabricksConfig;
// ...
DatabricksConfig cfg = new DatabricksConfig()
  .setHost(retrieveWorkspaceUrl())
WorkspaceClient w = new WorkspaceClient(cfg);
// ...

Para más información sobre cómo autorizar y autenticar con herramientas y SDK de Azure Databricks que usan Java y que implementan la autenticación unificada de Databricks, consulte:

Ir

Antes de ejecutar el código, debe ejecutar el databricks auth login comando en la pestaña CLI con opciones de operaciones de área de trabajo o cuenta. Estos comandos generan y almacenan en caché el token de OAuth necesario en .databricks/token-cache.json en la carpeta principal del usuario.

Operaciones de nivel de cuenta

Para la autenticación predeterminada:

import (
  "github.com/databricks/databricks-sdk-go"
)
// ...
a := databricks.Must(databricks.NewAccountClient())
// ...

Para la configuración directa:

import (
  "github.com/databricks/databricks-sdk-go"
)
// ...
a := databricks.Must(databricks.NewAccountClient(&databricks.Config{
  Host:      retrieveAccountConsoleUrl(),
  AccountId: retrieveAccountId(),
}))
// ...

Reemplace los retrieve marcadores de posición por su propia implementación para recuperar los valores de la consola o de algún otro almacén de configuración, como Azure KeyVault.

Operaciones de nivel de área de trabajo

Para la autenticación predeterminada:

import (
  "github.com/databricks/databricks-sdk-go"
)
// ...
w := databricks.Must(databricks.NewWorkspaceClient())
// ...

Para la configuración directa:

import (
  "github.com/databricks/databricks-sdk-go"
)
// ...
w := databricks.Must(databricks.NewWorkspaceClient(&databricks.Config{
  Host: retrieveWorkspaceUrl(),
}))
// ...

Para obtener más información sobre la autenticación con herramientas y SDK de Databricks que usan Go y que implementan la autenticación unificada de cliente de Databricks, consulte Autenticación del SDK de Databricks para Go con su cuenta de Azure Databricks o su área de trabajo.

Generación manual de tokens de acceso U2M de OAuth

Esta sección es para los usuarios que trabajan con herramientas o servicios de terceros que no admiten el estándar de autenticación unificada de Databricks . Si necesita generar, actualizar o usar manualmente tokens de OAuth de Azure Databricks para la autenticación U2M de OAuth, siga los pasos descritos en esta sección.

Paso 1: Generación de un comprobador de código y desafío

Para generar los tokens de acceso U2M de OAuth manualmente, empiece por crear un comprobador de código y un desafío de código coincidente. Usará el desafío del paso 2 para obtener un código de autorización y el comprobador del paso 3 para intercambiar ese código para un token de acceso.

Nota:

Siga el estándar PKCE de OAuth:

  • El comprobador de código es una cadena criptográficamente aleatoria (de 43 a 128 caracteres) mediante caracteres A–Z, a–z, 0–9, -._~.
  • El desafío de código es un hash SHA256 codificado en DIRECCIÓN URL base64 del comprobador.

Para obtener más información, consulte Solicitud de autorización.

El siguiente script de Python genera un comprobador y un desafío. Aunque puede usarlos varias veces, Azure Databricks recomienda generar un nuevo par cada vez que genere manualmente tokens de acceso.

import hashlib, base64, secrets, string

# Allowed characters for the code verifier, per PKCE spec
allowed_chars = string.ascii_letters + string.digits + "-._~"

# Generate a secure code verifier (43–128 characters)
code_verifier = ''.join(secrets.choice(allowed_chars) for _ in range(64))

# Create the SHA256 hash of the code verifier
sha256_hash = hashlib.sha256(code_verifier.encode()).digest()

# Base64-url-encode the hash and strip any trailing '=' padding
code_challenge = base64.urlsafe_b64encode(sha256_hash).decode().rstrip("=")

# Output values
print(f"code_verifier:  {code_verifier}")
print(f"code_challenge: {code_challenge}")

Paso 2: generar un código de autorización

Para obtener un token de acceso de OAuth de Azure Databricks, primero debe generar un código de autorización de OAuth. Este código expira inmediatamente después del uso. Puede generar el código en el nivel de cuenta o área de trabajo:

  • Nivel de cuenta: Use para llamar a las API REST de nivel de cuenta y de área de trabajo en todas las áreas de trabajo a las que el usuario pueda acceder.
  • Nivel de área de trabajo: Use para llamar a las API rest dentro de un único área de trabajo.

Nota:

Estos ejemplos usan databricks-cli como identificador de cliente. Si no usa una herramienta integrada de Azure Databricks, como la CLI o los SDK, debe habilitar una aplicación de OAuth personalizada y usarla en sus client_id solicitudes. Consulte Habilitar o deshabilitar aplicaciones de OAuth asociadas.

Generar un código de autorización a nivel de cuenta

  1. Busque su id. de cuenta.

  2. En el explorador, vaya a la dirección URL con los siguientes reemplazos:

    • <account-id>: el identificador de la cuenta de Azure Databricks
    • <redirect-url>: un URI de redirección local (por ejemplo, http://localhost:8020)
    • <state>: cualquier cadena de texto sin formato para validar la respuesta
    • <code-challenge>: desafío de código del paso 1
    https://accounts.azuredatabricks.net/oidc/accounts/<account-id>/v1/authorize
    ?client_id=databricks-cli
    &redirect_uri=<redirect-url>
    &response_type=code
    &state=<state>
    &code_challenge=<code-challenge>
    &code_challenge_method=S256
    &scope=all-apis+offline_access
    
  3. Inicie sesión cuando se le pida que acceda a su cuenta de Azure Databricks.

  4. Copie el código de autorización de la barra de direcciones del explorador. Es el valor después code= y antes & en la dirección URL de redireccionamiento:

    http://localhost:8020/?code=dcod...7fe6&state=<state>
    

    Compruebe que el state valor coincide con lo que proporcionó originalmente. Si no es así, descarte el código.

  5. Continúe con Generar un token de acceso de nivel de cuenta.

Generar un código de autorización a nivel del área de trabajo

  1. En el explorador, vaya a la dirección URL con los siguientes reemplazos:

    • <databricks-instance>: con el <databricks-instance> de Azure Databricks, por ejemplo.adb-1234567890123456.7.azuredatabricks.net
    • <redirect-url>: un redireccionamiento local (por ejemplo, http://localhost:8020)
    • <state>: cualquier valor de texto sin formato para la validación de respuesta
    • <code-challenge>: la cadena de desafío del paso 1
    https://<databricks-instance>/oidc/v1/authorize
    ?client_id=databricks-cli
    &redirect_uri=<redirect-url>
    &response_type=code
    &state=<state>
    &code_challenge=<code-challenge>
    &code_challenge_method=S256
    &scope=all-apis+offline_access
    
  2. Inicie sesión cuando se le pida que acceda a su cuenta de Azure Databricks.

  3. Copie el código de autorización de la barra de direcciones del explorador. Es el valor después code= y antes & en la dirección URL de redireccionamiento:

    http://localhost:8020/?code=dcod...7fe6&state=<state>
    

    Compruebe que el state valor coincide con lo que proporcionó originalmente. Si no es así, descarte el código.

  4. Continúe con Generar un token de acceso de nivel de área de trabajo.

Paso 3: Intercambio del código de autorización de un token de acceso

Para intercambiar el código de autorización de un token de acceso de OAuth de Azure Databricks, elija el nivel adecuado:

  • Nivel de cuenta: Use para llamar a las API REST de nivel de cuenta y de área de trabajo en todas las áreas de trabajo a las que puede acceder el usuario.
  • Nivel de área de trabajo: Use para llamar a las API rest dentro de un único área de trabajo.

Generar un token de acceso a nivel de cuenta

  1. Use curl para intercambiar el código de autorización de nivel de cuenta para un token de acceso de OAuth.

    Reemplace lo siguiente en la solicitud:

    • <account-id>: el identificador de la cuenta de Azure Databricks
    • <redirect-url>: la dirección URL de redireccionamiento del paso anterior.
    • <code-verifier>: comprobador que generó anteriormente.
    • <authorization-code>: el código de autorización del paso anterior.
    curl --request POST \
    https://accounts.azuredatabricks.net/oidc/accounts/<account-id>/v1/token \
    --data "client_id=databricks-cli" \
    --data "grant_type=authorization_code" \
    --data "scope=all-apis offline_access" \
    --data "redirect_uri=<redirect-url>" \
    --data "code_verifier=<code-verifier>" \
    --data "code=<authorization-code>"
    
  2. Copie el valor access_token de la respuesta. Por ejemplo:

    {
      "access_token": "eyJr...Dkag",
      "refresh_token": "doau...f26e",
      "scope": "all-apis offline_access",
      "token_type": "Bearer",
      "expires_in": 3600
    }
    

    El token es válido durante una hora.

  3. Continúe con el paso 4: Llamada a una API rest de Azure Databricks.

Generar un token de acceso a nivel de área de trabajo

  1. Use curl para intercambiar el código de autorización de nivel de área de trabajo para un token de acceso de OAuth.

    Reemplace lo siguiente en la solicitud:

    • <databricks-instance>: con el <databricks-instance> de Azure Databricks, por ejemplo.adb-1234567890123456.7.azuredatabricks.net
    • <redirect-url>: la dirección URL de redireccionamiento del paso anterior.
    • <code-verifier>: comprobador que generó anteriormente.
    • <authorization-code>: el código de autorización de nivel de área de trabajo.
    curl --request POST \
    https://<databricks-instance>/oidc/v1/token \
    --data "client_id=databricks-cli" \
    --data "grant_type=authorization_code" \
    --data "scope=all-apis offline_access" \
    --data "redirect_uri=<redirect-url>" \
    --data "code_verifier=<code-verifier>" \
    --data "code=<authorization-code>"
    
  2. Copie el valor access_token de la respuesta. Por ejemplo:

    {
      "access_token": "eyJr...Dkag",
      "refresh_token": "doau...f26e",
      "scope": "all-apis offline_access",
      "token_type": "Bearer",
      "expires_in": 3600
    }
    

    El token es válido durante una hora.

Paso 4: Llamada a una API rest de Azure Databricks

Use el token de acceso para llamar a las API REST de nivel de cuenta o de área de trabajo, en función de su ámbito. Para llamar a las API de nivel de cuenta, el usuario de Azure Databricks debe ser administrador de la cuenta.

Ejemplo de solicitud de API REST a nivel de cuenta

Este ejemplo utiliza curl junto con Bearer la autenticación para obtener una lista de todos las áreas de trabajo asociadas a una cuenta.

  • Reemplace <oauth-access-token> con el token de acceso OAuth a nivel de cuenta.
  • Reemplace <account-id> por el id. de su cuenta.
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"

Ejemplo de solicitud de API REST a nivel de área de trabajo

Este ejemplo utiliza curl junto con Bearer la autenticación para listar todos los clusters disponibles en el área de trabajo especificada.

  • Reemplace <oauth-access-token> con el token de acceso OAuth a nivel de cuenta o a nivel de área de trabajo.
  • Reemplace <databricks-instance> por el nombre de instancia de área de trabajo de Azure Databricks, por ejemplo adb-1234567890123456.7.azuredatabricks.net.
export OAUTH_TOKEN=<oauth-access-token>

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