Compartir vía


Autenticación del acceso a Azure Databricks con una entidad de servicio mediante OAuth (OAuth M2M)

En este artículo se explica cómo crear una entidad de servicio de Azure Databricks y usarla para autenticarse en una entidad de destino con OAuth.

Paso 1: Creación de una entidad de servicio

Los administradores de cuentas y los administradores del área de trabajo pueden crear entidades de servicio. En este paso se describe cómo crear una entidad de servicio en un área de trabajo. Para usar la consola de la cuenta, consulte Administración de entidades de servicio en la cuenta.

También puede crear una entidad de servicio administrada de Microsoft Entra ID y agregarla a Azure Databricks. Para obtener más información, consulte Databricks y entidades de servicio de Id. de Microsoft Entra.

  1. Como administrador del área de trabajo, inicia sesión en el área de trabajo de Azure Databricks.
  2. Haga clic en su nombre de usuario en la barra superior del área de trabajo de Azure Databricks y seleccione Configuración.
  3. Haga clic en la pestaña Identidad y acceso.
  4. Junto a Entidades de servicio, haga clic en Administrar.
  5. Haga clic en Agregar entidad de servicio.
  6. Haga clic en la flecha desplegable en el cuadro de búsqueda y, a continuación, haga clic en Agregar nuevo.
  7. En Administración, elija Databricks managed (Administrado por Databricks).
  8. Proporcione un nombre para la entidad de servicio.
  9. Haga clic en Agregar.

La entidad de servicio se agrega tanto al área de trabajo como a la cuenta de Azure Databricks.

Paso 2: Asignación de permisos a la entidad de servicio

  1. Haga clic en el nombre de la entidad de servicio para abrir su página de detalles.
  2. En la pestaña Configuraciones, active la casilla situada junto a cada derecho que quiera que tenga la entidad de servicio de Azure AD para esta área de trabajo y a continuación, haga clic en Actualizar.
  3. En la pestaña Permisos, conceda acceso a los usuarios, entidades de servicio y grupos de Azure Databricks que quiera administrar y usar esta entidad de servicio. Consulte Administración de roles en una entidad de servicio.

Paso 3: Creación de un secreto de OAuth para una entidad de servicio

Para poder usar OAuth para autenticarse en Azure Databricks, primero debe crear un secreto de OAuth, que se puede usar para generar tokens de acceso de OAuth. Una entidad de servicio puede tener hasta cinco secretos de OAuth. Los administradores de cuentas y los administradores del área de trabajo pueden crear un secreto de OAuth para una entidad de servicio.

  1. En la página de detalles de la entidad de servicio, haga clic en la pestaña Secretos .

  2. En Secretos de OAuth, haga clic en Generar secreto.

    Generación de un secreto de OAuth desde el área de trabajo

  3. Copie el secreto y el identificador de cliente mostrados y, a continuación, haga clic en Listo.

El secreto solo se revelará una vez durante la creación. El id. de cliente es el mismo que el identificador de aplicación de la entidad de servicio.

Los administradores de cuentas también pueden generar un secreto de OAuth desde la página de detalles de la entidad de servicio en la consola de la cuenta.

  1. Como administrador de la cuenta, inicie sesión en la consola de la cuenta.

  2. Haga clic en icono de Administración de usuarios de la consola de la cuenta Administración de usuarios.

  3. En la pestaña Entidades de servicio, seleccione la entidad de servicio.

  4. En Secretos de OAuth, haga clic en Generar secreto.

    Generación de un secreto de OAuth desde el área de trabajo

  5. Copie el secreto y el identificador de cliente mostrados y, a continuación, haga clic en Listo.

Nota:

Para permitir que la entidad de servicio use clústeres o almacenes de SQL, debe conceder a la entidad de servicio acceso a ellos. Consulte Permisos de proceso o Administración de un almacenamiento de SQL.

Paso 4: Uso de la autenticación de OAuth M2M

Para usar la autenticación de OAuth M2M, debe establecer las siguientes variables de entorno asociadas, .databrickscfg campos, campos de Terraform o Config campos:

  • El host de Azure Databricks, especificado como https://accounts.azuredatabricks.net para las operaciones de cuenta o la dirección URL por área de trabajo de destino, por ejemplo https://adb-1234567890123456.7.azuredatabricks.net para las operaciones del área de trabajo.
  • El identificador de cuenta de Azure Databricks, para las operaciones de la cuenta de Azure Databricks.
  • Identificador de cliente de la entidad de servicio.
  • Secreto de la entidad de servicio.

Para realizar la autenticación de M2M de OAuth, integre lo siguiente en el código, en función de la herramienta o el SDK participantes:

Entorno

Para usar variables de entorno para un tipo de autenticación de Azure Databricks específico con una herramienta o SDK, consulte Autenticación del acceso a los recursos de Azure Databricks o la documentación del SDK o de la herramienta. Consulte también Variables de entorno y campos para la autenticación unificada del cliente y Métodos predeterminados para la autenticación unificada del cliente.

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

  • DATABRICKS_HOST, establecido en la dirección URL de la consola de la cuenta de Azure Databricks, https://accounts.azuredatabricks.net.
  • DATABRICKS_ACCOUNT_ID
  • DATABRICKS_CLIENT_ID
  • DATABRICKS_CLIENT_SECRET

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

  • DATABRICKS_HOST, establecido en la URL por espacio de trabajo de Azure Databricks, por ejemplo https://adb-1234567890123456.7.azuredatabricks.net.
  • DATABRICKS_CLIENT_ID
  • DATABRICKS_CLIENT_SECRET

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 Autenticación del acceso a los recursos de Azure Databricks o la documentación de la herramienta o del SDK. Consulte también Variables de entorno y campos para la autenticación unificada del cliente y Métodos predeterminados para la autenticación unificada del cliente.

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>
client_id     = <service-principal-client-id>
client_secret = <service-principal-secret>

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>
client_id     = <service-principal-client-id>
client_secret = <service-principal-secret>

CLI

Para la CLI de Databricks, realice una de las siguientes acciones:

  • Establezca las variables de entorno como se especifica en la sección “Entorno” de este artículo.
  • Establezca los valores del archivo .databrickscfg tal y como se especifica en la sección “Perfil” de este artículo.

Las variables de entorno siempre tienen prioridad sobre los valores del archivo .databrickscfg.

Consulte también Autenticación de máquina a máquina (M2M) de OAuth.

Conexión

Nota:

La autenticación de OAuth M2M se admite en las siguientes versiones de Databricks Connect:

  • Para Python, Databricks Connect para Databricks Runtime 14.0 y versiones posteriores.
  • Para Scala, Databricks Connect para Databricks Runtime 13.3 LTS y versiones posteriores. El SDK de Databricks para Java que se incluye con Databricks Connect para Databricks Runtime 13.3 LTS y versiones posteriores debe actualizarse al SDK de Databricks para Java 0.17.0 o superior.

Para Databricks Connect, puede realizar una de las siguientes acciones:

Los valores del archivo .databrickscfg siempre tienen prioridad sobre las variables de entorno.

Para inicializar el cliente de Databricks Connect con estas variables de entorno o valores en el archivo .databrickscfg, consulte una de las siguientes opciones:

Código de VS

Para la extensión de Databricks para Visual Studio Code, haga lo siguiente:

  1. Establezca los valores del archivo .databrickscfg para las operaciones de nivel de área de trabajo de Azure Databricks tal como se especifica en esta sección “Perfil” de este artículo.
  2. En el panel Configuración de la extensión de Databricks para Visual Studio Code, haga clic en Configurar Databricks.
  3. En la Paleta de comandos, en Host de Databricks, escriba la dirección URL del área de trabajo como, por ejemplo, https://adb-1234567890123456.7.azuredatabricks.net, y presione Enter.
  4. En la paleta de comandos, seleccione el nombre del perfil de destino en la lista de la dirección URL.

Para obtener más detalles, consulte Configuración de la autenticación para la extensión de Databricks para Visual Studio Code.

Terraform

Para las operaciones de nivel de cuenta, para la autenticación predeterminada:

provider "databricks" {
  alias = "accounts"
}

Para la configuración directa (reemplace los marcadores de posición retrieve por su propia implementación para recuperar los valores de la consola o de otro almacén de configuración, como HashiCorp Vault. Consulte también Proveedor de Vault). En este caso, la dirección URL de la consola de la cuenta de Azure Databricks es 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>
}

Para las operaciones de nivel de área de trabajo, para la autenticación predeterminada:

provider "databricks" {
  alias = "workspace"
}

Para la configuración directa (reemplace los marcadores de posición retrieve por su propia implementación para recuperar los valores de la consola o de otro almacén de configuración, como HashiCorp Vault. Consulte también Proveedor de Vault). 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:

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

Para obtener más información sobre la autenticación con el proveedor Databricks Terraform, consulte Authentication.

Python

Para operaciones de nivel de cuenta, use lo siguiente para la autenticación predeterminada:

from databricks.sdk import AccountClient

a = AccountClient()
# ...

Para la configuración directa, use lo siguiente, pero reemplace los marcadores de posición retrieve por su propia implementación, con el fin de recuperar los valores de la consola o de otro almacén de configuración, como Azure KeyVault. En este caso, la dirección URL de la consola de la cuenta de Azure Databricks es 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()
)
# ...

En el caso de las operaciones de nivel de área de trabajo, en concreto de autenticación predeterminada:

from databricks.sdk import WorkspaceClient

w = WorkspaceClient()
# ...

Para la configuración directa, reemplace los marcadores de posición retrieve por su propia implementación, con el fin de recuperar los valores de la consola, o de otro almacén de configuración, como Azure KeyVault. 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:

from databricks.sdk import WorkspaceClient

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

Para obtener más información acerca de la autenticación con herramientas y SDK de Databricks que usan Python y que implementan la Autenticación unificada de cliente de Databricks, consulte:

Nota:

La extensión Databricks para Visual Studio Code usa Python pero aún no ha implementado la autenticación de OAuth M2M.

Java

Para las 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 (reemplace los marcadores de posición retrieve por su propia implementación para recuperar los valores de la consola o de otro almacén de configuración, como Azure KeyVault). 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:

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

Para obtener más información acerca de la autenticación con herramientas y SDK de Databricks que usan Java e implementan Autenticación unificada de cliente de Databricks, consulte:

Go

Para las operaciones de nivel de cuenta, para la autenticación predeterminada:

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

Para la configuración directa (reemplace los marcadores de posición retrieve por su propia implementación para recuperar los valores de la consola o de otro almacén de configuración, como Azure KeyVault). En este caso, la dirección URL de la consola de la cuenta de Azure Databricks es 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(),
}))
// ...

Para las operaciones de nivel de área de trabajo, para la autenticación predeterminada:

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

Para la configuración directa (reemplace los marcadores de posición retrieve por su propia implementación para recuperar los valores de la consola o de otro almacén de configuración, como Azure KeyVault). 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:

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

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 y uso de tokens de acceso manualmente para la autenticación M2M de OAuth

Las herramientas y los SDK de Azure Databricks que implementan la autenticación unificada del cliente de Databricks estándar generarán, actualizarán y usarán automáticamente tokens de acceso de OAuth de Azure Databricks en su nombre según sea necesario para la autenticación de OAuth M2M.

Databricks recomienda usar la autenticación unificada de cliente; sin embargo, si debe generar, actualizar o usar manualmente tokens de acceso de OAuth de Azure Databricks, siga las instrucciones de esta sección.

Use el identificador de cliente y el secreto de OAuth de la entidad de servicio para solicitar un token de acceso de OAuth para autenticarse en las API REST de nivel de cuenta y en las API REST de nivel de área de trabajo. El token de acceso expirará en una hora. Debe solicitar un nuevo token de acceso de OAuth después de la expiración. El ámbito del token de acceso de OAuth depende del nivel desde el que se crea el token. Puede crear un token en el nivel de cuenta o en el nivel de área de trabajo, como se indica a continuación:

Generar manualmente un token de acceso de nivel de cuenta

Un token de acceso de OAuth creado a partir del nivel de cuenta se puede usar en las API rest de Databricks de la cuenta y en cualquier área de trabajo a la que tenga acceso la entidad de servicio.

  1. Como administrador de la cuenta, inicie sesión en la consola de la cuenta.

  2. Haga clic en la flecha hacia abajo situada junto a su nombre de usuario en la esquina superior derecha.

  3. Copie su Id. de cuenta.

  4. Construya la dirección URL del punto de conexión del token reemplazando <my-account-id> en la siguiente dirección URL por el identificador de cuenta que copió.

    https://accounts.azuredatabricks.net/oidc/accounts/<my-account-id>/v1/token
    
  5. Use un cliente como curl para solicitar un token de acceso de OAuth con la dirección URL del punto de conexión del token, el identificador de cliente de la entidad de servicio (también conocido como identificador de aplicación) y el secreto de OAuth de la entidad de servicio que creó. El all-apis ámbito solicita un token de acceso de OAuth que se puede usar para acceder a todas las API rest de Databricks a las que se ha concedido acceso la entidad de servicio.

    • Reemplace <token-endpoint-URL> por la dirección URL del punto de conexión del token anterior.
    • Reemplace <client-id> por el identificador de cliente de la entidad de servicio’, que también se conoce como identificador de aplicación.
    • Reemplace <client-secret> por el secreto de OAuth de la entidad de servicio que creó.
    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'
    

    Esto genera una respuesta similar a la siguiente:

    {
      "access_token": "eyJraWQiOiJkYTA4ZTVjZ…",
      "token_type": "Bearer",
      "expires_in": 3600
    }
    

    Copie el objeto access_token de la respuesta.

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

Un token de acceso de OAuth creado a partir del nivel de área de trabajo solo puede acceder a las API REST de esa área de trabajo, incluso si la entidad de servicio es un administrador de cuenta o es miembro de otras áreas de trabajo.

  1. Construya la URL del punto de conexión de los tokens reemplazando https://<databricks-instance> por la URL del área de trabajo de su implementación de Azure Databricks:

    https://<databricks-instance>/oidc/v1/token
    
  2. Use un cliente como curl para solicitar un token de acceso de OAuth con la dirección URL del punto de conexión del token, el identificador de cliente de la entidad de servicio (también conocido como identificador de aplicación) y el secreto de OAuth de la entidad de servicio que creó. El all-apis ámbito solicita un token de acceso de OAuth que se puede usar para acceder a todas las API rest de Databricks a las que se le ha concedido acceso a la entidad de servicio dentro del área de trabajo desde la que solicita el token.

    • Reemplace <token-endpoint-URL> por la dirección URL del punto de conexión del token anterior.
    • Reemplace <client-id> por el identificador de cliente de la entidad de servicio’, que también se conoce como identificador de aplicación.
    • Reemplace <client-secret> por el secreto de OAuth de la entidad de servicio que creó.
    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'
    

    Esto genera una respuesta similar a la siguiente:

    {
      "access_token": "eyJraWQiOiJkYTA4ZTVjZ…",
      "token_type": "Bearer",
      "expires_in": 3600
    }
    

    Copie el objeto access_token de la respuesta.

Llamada a una API REST de Databricks

Ahora puede usar el token de acceso de OAuth para autenticarse en las API REST de nivel de cuenta de Azure Databricks y las API REST de nivel de área de trabajo. La entidad de servicio debe ser un administrador de cuenta para llamar a las API REST de nivel de cuenta.

Puede incluir el token en el encabezado mediante la autenticación de Bearer. Puede usar este enfoque con curl o cualquier cliente que compile.

Solicitud de API de REST de nivel de cuenta de ejemplo

Este ejemplo usa la autenticación de Bearer para obtener una lista de todas las áreas de trabajo asociadas a una cuenta.

  • Reemplace por <oauth-access-token> el token de acceso de OAuth de la entidad de servicio que copió en el paso anterior.
  • 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'

Solicitud de API de REST de nivel de área de trabajo de ejemplo

En este ejemplo se usa la autenticación Bearer para enumerar todos los clústeres disponibles en el área de trabajo especificada.

  • Reemplace por <oauth-access-token> el token de acceso de OAuth de la entidad de servicio que copió en el paso anterior.
  • Reemplace <workspace-URL> por la URL de su área de trabajo base, que tiene una forma similar a 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'

Recursos adicionales