Condividi tramite


Eseguire un processo con un’entità servizio Microsoft Entra ID

I processi offrono un modo non interattivo per eseguire applicazioni in un cluster di Azure Databricks, ad esempio un processo ETL o un'attività di analisi dei dati che deve essere eseguita su base programmata. In genere, questi lavori vengono eseguiti dall'utente che li ha creati, ma questo può avere alcune limitazioni:

  • La creazione e l'esecuzione di processi dipendono dall'utente che dispone delle autorizzazioni appropriate.
  • Solo l'utente che ha creato il processo ha accesso al processo.
  • L'utente potrebbe essere rimosso dall'area di lavoro di Azure Databricks.

L'uso di un account del servizio, un account associato a un'applicazione anziché a un utente specifico, è un metodo comune per risolvere tali limitazioni. In Azure è possibile usare un'applicazione e un'entità servizio Microsoft Entra ID per creare un account del servizio.

Un esempio di importanza di questo aspetto si ha quando le entità servizio controllano l'accesso ai dati archiviati in un account Azure Data Lake Storage Gen2. L'esecuzione di processi con tali entità servizio consente ai processi di accedere ai dati nell'account di archiviazione e fornisce il controllo sull'ambito dell’accesso ai dati.

Questa esercitazione descrive come creare un'applicazione e un'entità servizio di Microsoft Entra ID e rendere tale entità servizio proprietaria di un processo. Si apprenderà anche come concedere autorizzazioni di esecuzione del processo ad altri gruppi non proprietari del processo. Di seguito è riportata una panoramica generale delle attività descritte in questa esercitazione:

  1. Creare un'entità servizio in Microsoft Entra ID.
  2. Creare un token di accesso personale (PAT) in Azure Databricks. Si userà il token di accesso personale per eseguire l'autenticazione all'API REST di Databricks.
  3. Aggiungere l'entità servizio come utente non amministratore ad Azure Databricks usando l'API SCIM di Databricks.
  4. Creare un ambito di segreti basato su Azure Key Vault in Azure Databricks.
  5. Concedere all'entità servizio l'accesso in lettura all'ambito del segreto.
  6. Creare un processo in Azure Databricks e configurare il cluster di processi per leggere i segreti dall'ambito del segreto.
  7. Trasferire la proprietà del processo specificando l'entità servizio.
  8. Testare il processo eseguendolo come entità servizio.

Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.

Nota

Non è possibile usare un cluster con pass-through delle credenziali abilitato per eseguire un processo di proprietà di un'entità servizio. Se il processo necessita di un’entità servizio per accedere ad Archiviazione di Azure, vedere Connessione ad Azure Data Lake Storage Gen2 o archiviazione BLOB usando le credenziali di Azure.

Requisiti

Per questa esercitazione, è necessario quanto segue:

  • Un account utente con le autorizzazioni necessarie per registrare un'applicazione nel tenant di Microsoft Entra ID.
  • Privilegi amministrativi nell'area di lavoro di Azure Databricks in cui verranno eseguiti i processi.
  • Strumento per l'esecuzione di richieste API ad Azure Databricks. Questa esercitazione usa cURL, ma è possibile usare qualsiasi strumento che consenta di inviare richieste API REST.

Creare un'entità servizio in Microsoft Entra ID

Un'entità servizio è l'identità di un'applicazione Microsoft Entra ID. Per creare l'entità servizio che verrà usata per eseguire i processi:

  1. Nel portale di Azure, selezionare Microsoft Entra ID >Registrazioni app > Nuova registrazione. Immettere un nome per l'applicazione e fare clic su Registra.
  2. Passare a Certificati e segreti, fare clic su Nuovo segreto client e generare un nuovo segreto client. Copiare e salvare il segreto in un luogo sicuro.
  3. Andare a Panoramica e prendere nota di ID applicazione (client) e ID directory (tenant).

Creare il token di accesso personale di Azure Databricks

Si userà un token di accesso personale di Azure Databricks (PAT) per eseguire l'autenticazione con l'API REST di Databricks. Per creare un token di accesso personale che può essere usato per effettuare richieste API:

  1. Passare all'area di lavoro di Azure Databricks.
  2. Fare clic sul proprio nome nell'angolo superiore destro della pagina, quindi fare clic su Impostazioni.
  3. Fare clic su Sviluppatore.
  4. Accanto a Token di accesso fare clic su Gestisci.
  5. Fare clic su Genera nuovo token.
  6. Copiare e salvare il valore del token.

Suggerimento

In questo esempio viene usato un token di accesso personale, ma è possibile usare un token Microsoft Entra ID per la maggior parte delle API. Una procedura consigliata consiste nel fatto che un PAT è adatto per le attività di configurazione amministrativa, ma i token Microsoft Entra ID vengono preferiti per i carichi di lavoro di produzione.

È possibile limitare la generazione di PAT agli amministratori solo a scopo di sicurezza. Per altri dettagli, vedere Monitorare e revocare i token di accesso personali.

Aggiungere l'entità servizio all'area di lavoro di Azure Databricks

Si aggiunge l'entità servizio Microsoft Entra ID a un'area di lavoro usando l'API delle entità servizio. Inoltre, è necessario concedere all'entità servizio l'autorizzazione per avviare cluster di processi automatizzati. È possibile concederla tramite l'autorizzazione allow-cluster-create. Aprire un terminale e usare l'interfaccia della riga di comando di Databricks per eseguire il comando seguente per aggiungere l'entità servizio e concedere le autorizzazioni necessarie:

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"
    }
  ]
}'

Sostituire <application-id> con il Application (client) ID la registrazione dell'applicazione Microsoft Entra ID.

Creare un ambito dei segreti supportato da Azure Key Vault in Azure Databricks

Gli ambiti dei segreti forniscono un’archiviazione e una gestione dei segreti sicure. Il segreto associato all'entità servizio verrà archiviato in un ambito segreto. È possibile archiviare i segreti in un ambito segreto di Azure Databricks o in un ambito segreto supportato da Azure Key Vault. Queste istruzioni descrivono l'opzione supportata da Azure Key Vault:

  1. Creare un’istanza Azure Key Vault nel portale di Azure.
  2. Creare l’ambito dei segreti di Azure Databricks supportato dall’istanza di Azure Key Vault.

Passaggio 1: Creare un'istanza di Azure Key Vault

  1. Nella portale di Azure selezionare Insiemi di credenziali delle chiavi > e Aggiungi e assegnare un nome all'insieme di credenziali delle chiavi.

  2. Fare clic su Rivedi e crea.

  3. Al termine della convalida, fare clic su Crea.

  4. Dopo aver creato l'insieme di credenziali delle chiavi, passare alla pagina Proprietà per il nuovo insieme di credenziali delle chiavi.

  5. Copiare e salvare l'URI Vault e l’ID della risorsa.

    Proprietà di Azure Key Vault

Passaggio 2: Creare un ambito dei segreti supportato da Azure Key Vault

Le risorse di Azure Databricks possono fare riferimento ai segreti archiviati in un insieme di credenziali delle chiavi di Azure creando un ambito segreto supportato da Key Vault. Creare l’ambito del segreto di Azure Databricks:

  1. Andare alla pagina Creazione dell’ambito del segreto di Azure Databricks su https://<per-workspace-url>/#secrets/createScope. Sostituire per-workspace-url con l'URL univoco per area di lavoro per l’area di lavoro Azure Databricks.

  2. Immettere Nome ambito.

  3. Immettere i valori URI Vault e ID della risorsa dell'insieme di credenziali delle chiavi di Azure creati nel passaggio 1: Creare un'istanza di Azure Key Vault.

  4. Cliccare su Crea.

    Creare un ambito dei segreti

Salvare la versione del segreto client in Azure Key Vault

  1. Nel portale di Azure, andare al servizio Insieme di credenziali delle chiavi.

  2. Selezionare l'insieme di credenziali delle chiavi creato nel Passaggio 1: Creare un'istanza di Azure Key Vault.

  3. In Impostazioni > Segreti fare clic su Genera/Importa.

  4. Selezionare l'opzione manuale caricamento e immettere il segreto client nel campo Valore.

    Creare il segreto

  5. Cliccare su Crea.

Concedere all'entità servizio l'accesso in lettura all'ambito del segreto

È stato creato un ambito segreto e il segreto client dell'entità servizio è stato archiviato in tale ambito. A questo punto si concederà all'entità servizio l'accesso per leggere il segreto dall'ambito del segreto.

Aprire un terminale e usare il CLI di Databricks per eseguire il comando seguente:

databricks secrets put-acl <scope-name> <application-id> READ
  • Sostituire <scope-name> con il nome dell'ambito del segreto di Azure Databricks che contiene il segreto client.
  • Sostituire <application-id> con il Application (client) ID la registrazione dell'applicazione Microsoft Entra ID.

Creare un processo in Azure Databricks e configurare il cluster per leggere i segreti dall'ambito del segreto

È ora possibile creare un processo che possa essere eseguito come nuova entità servizio. Si userà un notebook creato nell'interfaccia utente di Azure Databricks e si aggiungerà la configurazione per consentire al cluster di processi di recuperare il segreto dell'entità servizio.

  1. Accedere alla pagina di destinazione di Azure Databricks e selezionare Nuovo > Notebook. Immettere un nome per il notebook e selezionare SQL come lingua predefinita.

  2. Immettere SELECT 1 nella prima cella del notebook. Si tratta di un semplice comando che visualizza solo 1 se ha esito positivo. Qualora l'entità servizio abbia concesso l'accesso a file o percorsi specifici in Azure Data Lake Storage Gen2, allora è possibile leggere da tali percorsi.

  3. Passare a Flussi di lavoro e fare clic su Crea processo. Assegnare un nome al processo e all'attività, fare clic su Seleziona notebook e selezionare il notebook appena creato.

  4. Fare clic su Modifica accanto alle informazioni sul cluster.

  5. Nella pagina Configura cluster fare clic su Opzioni avanzate.

  6. Nella scheda Spark immettere la configurazione Spark seguente:

    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
    
    • Sostituire <storage-account> con il nome dell’account di archiviazione contenente i propri dati.
    • Sostituire <secret-scope-name> con il nome dell'ambito del segreto di Azure Databricks che contiene il segreto client.
    • Sostituire <application-id> con il Application (client) ID la registrazione dell'applicazione Microsoft Entra ID.
    • Sostituire <secret-name> con il nome associato al valore del segreto client nell'ambito del segreto.
    • Sostituire <directory-id> con il Directory (tenant) ID la registrazione dell'applicazione Microsoft Entra ID.

Trasferire la proprietà del processo all'entità servizio

Un processo può avere esattamente un proprietario, quindi sarà necessario trasferire la proprietà del processo all'entità servizio. Per assicurarsi che altri utenti possano gestire il processo, è anche possibile concedere autorizzazioni CAN MANAGE a un gruppo. In questo esempio viene usata l'API Autorizzazioni per impostare tali autorizzazioni.

Aprire un terminale e usare il CLI di Databricks per eseguire il comando seguente:

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"
    }
  ]
}'
  • Sostituire <job-id> con l'identificatore univoco del processo. Per trovare l'ID processo, fare clic su Flussi di lavoro nella barra laterale e fare clic sul nome del processo. L’ID processo si trova nel pannello laterale Dettagli processo.
  • Sostituire <application-id> con il Application (client) ID la registrazione dell'applicazione Microsoft Entra ID.

Il processo necessiterà anche dei permessi di lettura per il notebook. Usare l'interfaccia della riga di comando di Databricks per eseguire il comando seguente al fine di concedere le autorizzazioni necessarie:

databricks permissions set notebooks <notebook-id> --json '{
  "access_control_list": [
    {
      "service_principal_name": "<application-id>",
      "permission_level": "CAN_READ"
    }
  ]
}'
  • Sostituire <notebook-id> con l'ID del notebook associato al processo. Per trovare l'ID, passare al notebook nell'area di lavoro di Azure Databricks e cercare l'ID numerico che segue notebook/ nell'URL del notebook.
  • Sostituire <application-id> con il Application (client) ID la registrazione dell'applicazione Microsoft Entra ID.

Testare il processo

I processi vengono eseguiti con un'entità servizio allo stesso modo in cui si eseguono processi come utente, tramite l'interfaccia utente, l'API o l'interfaccia della riga di comando. Per testare il processo usando l'interfaccia utente di Azure Databricks:

  1. Passare a Flussi di lavoro nell'interfaccia utente di Azure Databricks e selezionare il processo.
  2. Cliccare Run now (Esegui adesso).

Se tutto viene eseguito correttamente, verrà visualizzato lo stato Succeeded per il processo. È possibile selezionare il processo nell'interfaccia utente per verificare l'output:

Output del processo

Altre informazioni

Per altre informazioni sulla creazione e l'esecuzione di processi, vedere Pianificare e orchestrare i flussi di lavoro.