Compartir a través de


Ejecución de trabajos con entidades de servicio de Microsoft Entra ID

Los trabajos proporcionan una manera no interactiva de ejecutar aplicaciones en un clúster de Azure Databricks; por ejemplo, un trabajo de ETL o una tarea de análisis de datos que se deben ejecutar de forma programada. Normalmente, estos trabajos se ejecutan como el usuario que los creó, pero esto puede tener algunas limitaciones:

  • La creación y ejecución de trabajos depende de que el usuario tenga los permisos adecuados.
  • Solo el usuario que creó el trabajo tiene acceso al trabajo.
  • Es posible que el usuario se quite del área de trabajo de Azure Databricks.

El uso de una cuenta de servicio (una cuenta asociada a una aplicación en lugar de a un usuario específico) es un método común para abordar estas limitaciones. En Azure, puede usar una aplicación de Microsoft Entra ID (anteriormente Azure Active Directory) y una entidad de servicio para crear una cuenta de servicio.

Se produce un ejemplo de la importancia de esto cuando las entidades de servicio controlan el acceso a los datos almacenados en una cuenta de Azure Data Lake Storage Gen2. La ejecución de trabajos con esas entidades de servicio permite que los trabajos accedan a los datos de la cuenta de almacenamiento y proporciona control sobre el ámbito de acceso a los datos.

En este tutorial se describe cómo crear una aplicación y una entidad de servicio de Microsoft Entra ID y hacer que esa entidad de servicio sea propietaria de un trabajo. También aprenderá a conceder permisos de ejecución de trabajos a otros grupos que no poseen el trabajo. A continuación, se muestra información general de las tareas que recorre este tutorial:

  1. Cree una entidad de servicio en Microsoft Entra ID.
  2. Crear un token de acceso personal (PAT) en Azure Databricks. Usará el PAT para autenticarse en la API REST de Databricks.
  3. Agregar la entidad de servicio como un usuario no administrativo en Azure Databricks mediante la API SCIM de Databricks.
  4. Crear un ámbito de secretos con el respaldo de Azure Key Vault en Azure Databricks.
  5. Conceder a la entidad de servicio acceso de lectura al ámbito de secretos.
  6. Crear un trabajo en Azure Databricks y configurar el clúster de trabajos para que lea los secretos del ámbito de secretos.
  7. Transferir la propiedad del trabajo a la entidad de servicio.
  8. Probar el trabajo mediante su ejecución como la entidad de servicio.

Si no tiene una suscripción de Azure, cree una cuenta gratuita antes de empezar.

Nota:

No se puede usar un clúster con el paso de credenciales habilitado para ejecutar un trabajo perteneciente a una entidad de seguridad de servicio. Si el trabajo requiere una entidad de servicio para acceder a Azure Storage, consulte Conexión a Azure Data Lake Storage Gen2 o Blob Storage mediante credenciales de Azure.

Requisitos

Necesitará lo siguiente para este tutorial:

  • Una cuenta de usuario con los permisos necesarios para registrar una aplicación en el inquilino de Microsoft Entra ID.
  • Privilegios administrativos en el área de trabajo de Azure Databricks donde se ejecutarán los trabajos.
  • Una herramienta para realizar solicitudes de API a Azure Databricks. En este tutorial se usa cURL, pero puede usar cualquier herramienta que le permita enviar solicitudes de API REST.

Creación de una entidad de servicio en Microsoft Entra ID

Una entidad de servicio es la identidad de una aplicación de Microsoft Entra ID. Para crear la entidad de servicio que se usará para ejecutar trabajos:

  1. En Azure Portal, seleccione Microsoft Entra ID > Registro de aplicaciones > Nuevo registro. Escriba un nombre para la aplicación y haga clic en Registrar.
  2. Vaya a Certificados y secretos, haga clic en Nuevo secreto de cliente y genere un nuevo secreto de cliente. Copie y guarde el secreto en un lugar seguro.
  3. En la página Información general, anote los valores de Id. de aplicación (cliente) e Id. de directorio (inquilino) .

Creación del token de acceso personal de Azure Databricks

Usará un token de acceso personal (PAT) de Azure Databricks para autenticarse en la API REST de Databricks. Para crear un PAT que se pueda usar para realizar solicitudes de API:

  1. Vaya al área de trabajo de Azure Databricks.
  2. Haga clic en el nombre de usuario en la esquina superior derecha de la pantalla y haga clic en Configuración.
  3. Haga clic en Desarrollador.
  4. Junto a Tokens de acceso, haga clic en Administrar.
  5. Haga clic en Generar nuevo token.
  6. Copie y guarde el valor del token.

Sugerencia

En este ejemplo se usa un token de acceso personal, pero puede usar un token de Microsoft Entra ID para la mayoría de las API. Un procedimiento recomendado es que un PAT sea adecuado para las tareas de configuración administrativa, aunque se prefieren los tokens de Microsoft Entra ID para las cargas de trabajo de producción.

Puede restringir la generación de los PAT a solo los administradores por motivos de seguridad. Consulte Supervisión y administración de tokens de acceso personal para más detalles.

Adición de la entidad de servicio al área de trabajo de Azure Databricks

Agregue la entidad de servicio de Microsoft Entra ID a un área de trabajo mediante la API de grupos. También debe conceder permiso a la entidad de servicio para iniciar clústeres de trabajos automatizados. Puede concederlo mediante el permiso allow-cluster-create. Abra un terminal y ejecute el siguiente comando para agregar la entidad de servicio y conceder los permisos necesarios:

curl -X POST 'https://<per-workspace-url>/api/2.0/preview/scim/v2/ServicePrincipals' \
  --header 'Content-Type: application/scim+json' \
  --header 'Authorization: Bearer <personal-access-token>' \
  --data-raw '{
    "schemas":[
      "urn:ietf:params:scim:schemas:core:2.0:ServicePrincipal"
    ],
    "applicationId":"<application-id>",
    "displayName": "test-sp",
    "entitlements":[
      {
        "value":"allow-cluster-create"
      }
    ]
  }'
  • Reemplace <per-workspace-url> por la dirección URL única por área de trabajo del área de trabajo de Azure Databricks.
  • Reemplace <personal-access-token> por el token de acceso personal de Azure Databricks
  • Reemplace <application-id> con el Application (client) ID para el registro de la aplicación Microsoft Entra ID.

Creación de un ámbito de secretos con el respaldo de Azure Key Vault en Azure Databricks

Los ámbitos de secretos proporcionan almacenamiento seguro y administración de secretos. Almacenará el secreto asociado a la entidad de servicio en un ámbito de secretos. Puede almacenar secretos en un ámbito de secretos de Azure Databricks o en un ámbito de secretos con el respaldo de Azure Key Vault. En estas instrucciones se describe la opción con respaldo de Azure Key Vault:

  1. Cree una instancia de Azure Key Vault en Azure Portal.
  2. Cree el ámbito de secretos de Azure Databricks con el respaldo de la instancia de Azure Key Vault.

Paso 1: Creación de una instancia de Azure Key Vault

  1. En Azure Portal, seleccione Almacenes de claves > + Agregar y asigne un nombre al almacén de claves.

  2. Haga clic en Revisar + crear.

  3. Cuando se haya completado la validación, haga clic en Crear.

  4. Después de crear el almacén de claves, vaya a la página Propiedades del nuevo almacén de claves.

  5. Copie y guarde el identificador URI del almacén y el identificador de recurso.

    Propiedades del almacén de claves de Azure

Paso 2: Creación de un ámbito de secretos con el respaldo de Azure Key Vault

Los recursos de Azure Databricks pueden hacer referencia a secretos almacenados en un almacén de claves de Azure mediante la creación de un ámbito de secretos con el respaldo de Azure Key Vault. Para crear el ámbito de secretos de Azure Databricks:

  1. Vaya a la página Create Secret Scope (Crear ámbito de secretos) de Azure Databricks en https://<per-workspace-url>/#secrets/createScope. Reemplace per-workspace-url por la dirección URL única por área de trabajo del área de trabajo de Azure Databricks.

  2. Escriba un valor para Scope Name (Nombre de ámbito).

  3. Escriba los valores del identificador URI del almacén y el identificador de recurso del almacén de claves de Azure que creó en Paso 1: Creación de una instancia de Azure Key Vault.

  4. Haga clic en Crear.

    Creación de un ámbito de secretos

Guardar el secreto de cliente en Azure Key Vault

  1. En Azure Portal, vaya al servicio Almacenes de claves.

  2. Seleccione el almacén de claves creado en Paso 1: Creación de una instancia de Azure Key Vault.

  3. En Configuración > Secretos, haga clic en Generar o importar.

  4. Seleccione la opción de carga Manual y escriba el secreto de cliente en el campo Valor.

    Creación de un secreto

  5. Haga clic en Crear.

Conceder a la entidad de servicio acceso de lectura al ámbito de secretos

Ha creado un ámbito de secretos y ha almacenado el secreto de cliente de la entidad de servicio en ese ámbito. Ahora, va a conceder a la entidad de servicio acceso para leer el secreto desde el ámbito de secretos.

Abra un terminal y ejecute el comando siguiente:

curl -X POST 'https://<per-workspace-url/api/2.0/secrets/acls/put' \
  --header 'Authorization: Bearer <personal-access-token>' \
  --header 'Content-Type: application/json' \
  --data-raw '{
    "scope": "<scope-name>",
    "principal": "<application-id>",
    "permission": "READ"
  }'
  • Reemplace <per-workspace-url> por la dirección URL única por área de trabajo del área de trabajo de Azure Databricks.
  • Reemplace <personal-access-token> por el token de acceso personal de Azure Databricks
  • Reemplace <scope-name> por el nombre del ámbito de secretos de Azure Databricks que contiene el secreto de cliente.
  • Reemplace <application-id> con el Application (client) ID para el registro de la aplicación Microsoft Entra ID.

Crear un trabajo en Azure Databricks y configurar el clúster para que lea los secretos del ámbito de secretos

Ya está listo para crear un trabajo que se pueda ejecutar como la nueva entidad de servicio. Usará un cuaderno creado en la interfaz de usuario de Azure Databricks y agregará la configuración para permitir que el clúster de trabajos recupere el secreto de la entidad de servicio.

  1. Vaya a la página de aterrizaje de Azure Databricks y seleccione Nuevo > Cuaderno. Asigne un nombre al cuaderno y seleccione SQL como lenguaje predeterminado.

  2. Escriba SELECT 1 en la primera celda del cuaderno. Se trata de un comando simple que solo muestra 1 si se realiza correctamente. Si ha concedido a la entidad de servicio acceso a determinados archivos o rutas de acceso en Azure Data Lake Storage Gen 2, puede leer desde esas rutas de acceso como alternativa.

  3. Vaya a Flujos de trabajo y haga clic en Crear trabajo. Asigne un nombre al trabajo y a la tarea, haga clic en Seleccionar cuaderno y seleccione el cuaderno que acaba de crear.

  4. Haga clic en Edit (Editar) junto a la información del clúster.

  5. En la página Configure Cluster (Configurar clúster), haga clic en Advanced Options (Opciones avanzadas).

  6. En la pestaña Spark, escriba la siguiente configuración de Spark:

    fs.azure.account.auth.type.<storage-account>.dfs.core.windows.net OAuth
    fs.azure.account.oauth.provider.type.<storage-account>.dfs.core.windows.net org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider
    fs.azure.account.oauth2.client.id.<storage-account>.dfs.core.windows.net <application-id>
    fs.azure.account.oauth2.client.secret.<storage-account>.dfs.core.windows.net {{secrets/<secret-scope-name>/<secret-name>}}
    fs.azure.account.oauth2.client.endpoint.<storage-account>.dfs.core.windows.net https://login.microsoftonline.com/<directory-id>/oauth2/token
    
    • Reemplace <storage-account> por el nombre de la cuenta de almacenamiento que contiene los datos.
    • Reemplace <secret-scope-name> por el nombre del ámbito de secretos de Azure Databricks que contiene el secreto de cliente.
    • Reemplace <application-id> con el Application (client) ID para el registro de la aplicación Microsoft Entra ID.
    • Reemplace <secret-name> por el nombre asociado al valor del secreto de cliente en el ámbito de secretos.
    • Reemplace <directory-id> con el Directory (tenant) ID para el registro de la aplicación Microsoft Entra ID.

Transferencia de la propiedad del trabajo a la entidad de servicio

Un trabajo puede tener exactamente un propietario, por lo que deberá transferir la propiedad del trabajo de su usuario a la entidad de servicio. Para asegurarse de que otros usuarios puedan administrar el trabajo, también puede conceder permisos CAN MANAGE a un grupo. En este ejemplo, se usa la API Permissions para establecer estos permisos.

Abra un terminal y ejecute el comando siguiente:

curl -X PUT 'https://<per-workspace-url>/api/2.0/permissions/jobs/<job-id>' \
  --header 'Authorization: Bearer <personal-access-token>' \
  --header 'Content-Type: application/json' \
  --data-raw '{
    "access_control_list": [
      {
        "service_principal_name": "<application-id>",
        "permission_level": "IS_OWNER"
      },
      {
        "group_name": "admins",
        "permission_level": "CAN_MANAGE"
      }
    ]
  }'
  • Reemplace <per-workspace-url> por la dirección URL única por área de trabajo del área de trabajo de Azure Databricks.
  • Reemplace <job-id> por el identificador único del trabajo. Para buscar el identificador del trabajo, haga clic en Flujos de trabajo en la barra lateral y haga clic en el nombre del trabajo. El identificador de trabajo se encuentra en el panel lateral Detalles del trabajo.
  • Reemplace <personal-access-token> por el token de acceso personal de Azure Databricks
  • Reemplace <application-id> con el Application (client) ID para el registro de la aplicación Microsoft Entra ID.

El trabajo también necesitará permisos de lectura para el cuaderno. Ejecute el siguiente comando para conceder los permisos necesarios:

curl -X PUT 'https://<per-workspace-url>/api/2.0/permissions/notebooks/<notebook-id>' \
  --header 'Authorization: Bearer <personal-access-token>' \
  --header 'Content-Type: application/json' \
  --data-raw '{
    "access_control_list": [
      {
        "service_principal_name": "<application-id>",
        "permission_level": "CAN_READ"
      }
    ]
  }'
  • Reemplace <per-workspace-url> por la dirección URL única por área de trabajo del área de trabajo de Azure Databricks.
  • Reemplace <notebook-id> por el identificador del cuaderno asociado al trabajo. Para buscar el identificador, vaya al cuaderno en el área de trabajo de Azure Databricks y busque el identificador numérico que sigue a notebook/ en la dirección URL del cuaderno.
  • Reemplace <personal-access-token> por el token de acceso personal de Azure Databricks
  • Reemplace <application-id> con el Application (client) ID para el registro de la aplicación Microsoft Entra ID.

Prueba del trabajo

Con una entidad de servicio, los trabajos se ejecutan de la misma manera que se ejecutan como usuario, ya sea mediante la interfaz de usuario, la API o la CLI. Para probar el trabajo mediante la interfaz de usuario de Azure Databricks:

  1. Vaya a Flujos de trabajo en la interfaz de usuario de Azure Databricks y seleccione el trabajo.
  2. Haga clic en Ejecutar ahora.

Si todo se ejecuta correctamente, verá el estado Succeeded (Correcto) para el trabajo. Puede seleccionar el trabajo en la interfaz de usuario para comprobar la salida:

Resultado del trabajo

Saber más

Para saber más sobre la creación y la ejecución de trabajos, consulte Crear, ejecutar y administrar trabajos de Azure Databricks.