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 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:
- Cree una entidad de servicio en Microsoft Entra ID.
- Crear un token de acceso personal (PAT) en Azure Databricks. Usará el PAT para autenticarse en la API REST de Databricks.
- Agregar la entidad de servicio como un usuario no administrativo en Azure Databricks mediante la API SCIM de Databricks.
- Crear un ámbito de secretos con el respaldo de Azure Key Vault en Azure Databricks.
- Conceder a la entidad de servicio acceso de lectura al ámbito de secretos.
- Crear un trabajo en Azure Databricks y configurar el clúster de trabajos para que lea los secretos del ámbito de secretos.
- Transferir la propiedad del trabajo a la entidad de servicio.
- 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:
- En Azure Portal, seleccione Microsoft Entra ID > Registro de aplicaciones > Nuevo registro. Escriba un nombre para la aplicación y haga clic en Registrar.
- 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.
- 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:
- Vaya al área de trabajo de Azure Databricks.
- Haga clic en el nombre de usuario en la esquina superior derecha de la pantalla y haga clic en Configuración.
- Haga clic en Desarrollador.
- Junto a Tokens de acceso, haga clic en Administrar.
- Haga clic en Generar nuevo token.
- 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 revocación de tokens de acceso personal para obtener más detalles.
Adición de la entidad de servicio al área de trabajo de Azure Databricks
Agregue la entidad de servicio id. de Microsoft Entra a un área de trabajo mediante la API de entidades de servicio. 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 use la CLI de Databricks para ejecutar el siguiente comando para agregar la entidad de servicio y conceder los permisos necesarios:
databricks service-principals create --json '{
"schemas":[
"urn:ietf:params:scim:schemas:core:2.0:ServicePrincipal"
],
"applicationId":"<application-id>",
"displayName": "test-sp",
"entitlements":[
{
"value":"allow-cluster-create"
}
]
}'
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:
- Cree una instancia de Azure Key Vault en Azure Portal.
- 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
En Azure Portal, seleccione Almacenes de claves > + Agregar y asigne un nombre al almacén de claves.
Haga clic en Revisar + crear.
Cuando se haya completado la validación, haga clic en Crear.
Después de crear el almacén de claves, vaya a la página Propiedades del nuevo almacén de claves.
Copie y guarde el identificador URI del almacén y el identificador de recurso.
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:
Vaya a la página Create Secret Scope (Crear ámbito de secretos) de Azure Databricks en
https://<per-workspace-url>/#secrets/createScope
. Reemplaceper-workspace-url
por la dirección URL única por área de trabajo del área de trabajo de Azure Databricks.Escriba un valor para Scope Name (Nombre de ámbito).
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.
Haga clic en Crear.
Guardar el secreto de cliente en Azure Key Vault
En Azure Portal, vaya al servicio Almacenes de claves.
Seleccione el almacén de claves creado en Paso 1: Creación de una instancia de Azure Key Vault.
En Configuración > Secretos, haga clic en Generar o importar.
Seleccione la opción de carga Manual y escriba el secreto de cliente en el campo Valor.
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 use la CLI de Databricks para ejecutar el siguiente comando:
databricks secrets put-acl <scope-name> <application-id> READ
- Reemplace
<scope-name>
por el nombre del ámbito de secretos de Azure Databricks que contiene el secreto de cliente. - Reemplace
<application-id>
con elApplication (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.
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.
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.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.
Haga clic en Edit (Editar) junto a la información del clúster.
En la página Configure Cluster (Configurar clúster), haga clic en Advanced Options (Opciones avanzadas).
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 elApplication (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 elDirectory (tenant) ID
para el registro de la aplicación Microsoft Entra ID.
- Reemplace
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 use la CLI de Databricks para ejecutar el siguiente comando:
databricks permissions set jobs <job-id> --json '{
"access_control_list": [
{
"service_principal_name": "<application-id>",
"permission_level": "IS_OWNER"
},
{
"group_name": "admins",
"permission_level": "CAN_MANAGE"
}
]
}'
- 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
<application-id>
con elApplication (client) ID
para el registro de la aplicación Microsoft Entra ID.
El trabajo también necesitará permisos de lectura para el cuaderno. Use la CLI de Databricks para ejecutar el comando siguiente para conceder los permisos necesarios:
databricks permissions set notebooks <notebook-id> --json '{
"access_control_list": [
{
"service_principal_name": "<application-id>",
"permission_level": "CAN_READ"
}
]
}'
- 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 anotebook/
en la dirección URL del cuaderno. - Reemplace
<application-id>
con elApplication (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:
- Vaya a Flujos de trabajo en la interfaz de usuario de Azure Databricks y seleccione el trabajo.
- 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:
Saber más
Para obtener más información sobre cómo crear y ejecutar trabajos, consulte Programación y orquestación de flujos de trabajo.