Esercitazioni: Connettersi a Azure Data Lake Storage Gen2

Nota

Questo articolo descrive i modelli legacy per la configurazione dell'accesso ad Azure Data Lake Archiviazione Gen2. Databricks consiglia di usare Unity Catalog. Vedere Create a Unity Catalog metastore and Connessione to cloud object storage using Unity Catalog (Creare un metastore del catalogo Unity e Connessione all'archiviazione di oggetti cloud con Unity Catalog).

Questa esercitazione illustra tutti i passaggi necessari per connettersi da Azure Databricks ad Azure Data Lake Archiviazione Gen2 usando OAuth 2.0 con un'entità servizio Microsoft Entra ID.

Requisiti

Completare queste attività prima di iniziare questa esercitazione:

Passaggio 1: Creare un'entità servizio Microsoft Entra ID

Per usare le entità servizio per connettersi ad Azure Data Lake Archiviazione Gen2, un utente amministratore deve creare una nuova applicazione Microsoft Entra ID (in precedenza Azure Active Directory). Se è già disponibile un'entità servizio Microsoft Entra ID, passare al passaggio 2: Creare un segreto client per l'entità servizio.

Per creare un'entità servizio Microsoft Entra ID, seguire queste istruzioni:

  1. Accedere al portale di Azure.

    Nota

    Il portale da usare è diverso a seconda che l'applicazione Microsoft Entra ID venga eseguita nel cloud pubblico di Azure o in un cloud nazionale o sovrano. Per altre informazioni, vedere Cloud nazionali.

  2. Se si ha accesso a più tenant, sottoscrizioni o directory, fare clic sull'icona Directory e sottoscrizioni (directory con filtro) nel menu in alto per passare alla directory in cui si vuole effettuare il provisioning dell'entità servizio.

  3. Cerca e seleziona <Microsoft Entra ID.

  4. In Gestisci fare clic su Registrazioni app > Nuova registrazione.

  5. In Nome immettere un nome per l'applicazione.

  6. Nella sezione Tipi di account supportati selezionare Account solo in questa directory organizzativa (tenant singolo).

  7. Fare clic su Registra.

Passaggio 2: Creare un segreto client per l'entità servizio

  1. In Gestisci fare clic su Certificati e segreti.

  2. Nella scheda Segreti client fare clic su Nuovo segreto client.

    Nuovo segreto client

  3. Nel riquadro Aggiungi un segreto client immettere una descrizione per il segreto client.

  4. Per Scadenza selezionare un periodo di scadenza per il segreto client e quindi fare clic su Aggiungi.

  5. Copiare e archiviare il valore del segreto client in un luogo sicuro, perché questo segreto client è la password per l'applicazione.

  6. Nella pagina Panoramica della pagina dell'applicazione copiare i valori seguenti nella sezione Informazioni di base:

    • ID applicazione (client)
    • ID della directory (tenant)

    Panoramica dell'app registrata in Azure

Passaggio 3: Concedere all'entità servizio l'accesso ad Azure Data Lake Archiviazione Gen2

Concedere l'accesso alle risorse di archiviazione assegnando ruoli all'entità servizio. In questa esercitazione si assegna il collaboratore ai dati blob di Archiviazione all'entità servizio nell'account Azure Data Lake Archiviazione Gen2. Potrebbe essere necessario assegnare altri ruoli in base a requisiti specifici.

  1. Nel portale di Azure passare al servizio Account di archiviazione.
  2. Selezionare un account di archiviazione di Azure da usare.
  3. Fare clic su Controllo di accesso (IAM).
  4. Fare clic su + Aggiungi e selezionare Aggiungi assegnazione di ruolo dal menu a discesa.
  5. Impostare il campo Seleziona sul nome dell'applicazione Microsoft Entra ID creato nel passaggio 1 e impostare Ruolo su Archiviazione Collaboratore dati BLOB.
  6. Fare clic su Salva.

Passaggio 4: Aggiungere il segreto client ad Azure Key Vault

È possibile archiviare il segreto client dal passaggio 1 in Azure Key Vault.

  1. Nel portale di Azure passare al servizio Insieme di credenziali delle chiavi.
  2. Selezionare un insieme di credenziali delle chiavi di Azure da usare.
  3. Nella pagina di impostazioni di Key Vault selezionare Segreti.
  4. Fare clic su + Genera/Importa.
  5. In Opzioni di caricamento selezionare Manuale.
  6. In Nome immettere un nome per il segreto. Il nome del segreto deve essere univoco all'interno di un'istanza di Key Vault.
  7. In Valore incollare il segreto client archiviato nel passaggio 1.
  8. Fai clic su Crea.

Passaggio 5: Creare un ambito segreto supportato da Azure Key Vault nell'area di lavoro di Azure Databricks

Per fare riferimento al segreto client archiviato in un insieme di credenziali delle chiavi di Azure, è possibile creare un ambito segreto supportato da Azure Key Vault in Azure Databricks.

  1. Vai a https://<databricks-instance>#secrets/createScope. Questo URL fa distinzione tra maiuscole e minuscole; l'ambito in createScope deve essere maiuscolo.

    Creare l'ambito

  2. Immettere il nome dell'ambito del segreto. I nomi degli ambiti dei segreti non fanno distinzione tra maiuscole e minuscole.

  3. Usare il menu a discesa Gestisci entità per specificare se tutti gli utenti dispongono MANAGE dell'autorizzazione per questo ambito segreto o solo creatore dell'ambito del segreto, ad esempio l'utente.

  4. Immettere il nome DNS (ad esempio, https://databrickskv.vault.azure.net/) e l'ID risorsa, ad esempio:

    /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/databricks-rg/providers/Microsoft.KeyVault/vaults/databricksKV
    

    Queste proprietà sono disponibili nella scheda Proprietà di un insieme di credenziali delle chiavi di Azure nel portale di Azure.

    Scheda Proprietà di Azure Key Vault

  5. Fare clic sul pulsante Crea.

Passaggio 6: Connessione ad Azure Data Lake Archiviazione Gen2 usando Python

È ora possibile accedere in modo sicuro ai dati nell'account di archiviazione di Azure usando OAuth 2.0 con l'entità servizio dell'applicazione Microsoft Entra ID per l'autenticazione da un notebook di Azure Databricks.

  1. Passare all'area di lavoro Azure Databricks e creare un nuovo notebook Python.

  2. Eseguire il codice Python seguente, con le sostituzioni seguenti, per connettersi ad Azure Data Lake Archiviazione Gen2.

    service_credential = dbutils.secrets.get(scope="<scope>",key="<service-credential-key>")
    
    spark.conf.set("fs.azure.account.auth.type.<storage-account>.dfs.core.windows.net", "OAuth")
    spark.conf.set("fs.azure.account.oauth.provider.type.<storage-account>.dfs.core.windows.net", "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider")
    spark.conf.set("fs.azure.account.oauth2.client.id.<storage-account>.dfs.core.windows.net", "<application-id>")
    spark.conf.set("fs.azure.account.oauth2.client.secret.<storage-account>.dfs.core.windows.net", service_credential)
    spark.conf.set("fs.azure.account.oauth2.client.endpoint.<storage-account>.dfs.core.windows.net", "https://login.microsoftonline.com/<directory-id>/oauth2/token")
    

    Sostituzione

    • <scope> con il nome dell'ambito del segreto del passaggio 5.
    • <service-credential-key> con il nome della chiave contenente il segreto client.
    • <storage-account> con il nome dell'account di archiviazione di Azure.
    • <application-id>con l'ID applicazione (client) per l'applicazione Microsoft Entra ID.
    • <directory-id>con l'ID directory (tenant) per l'applicazione Microsoft Entra ID.

    L'area di lavoro di Azure Databricks è stata connessa all'account Azure Data Lake Archiviazione Gen2.

Concedere all'area di lavoro di Azure Databricks l'accesso ad Azure Data Lake Archiviazione Gen2

Se si configura un firewall in Azure Data Lake Archiviazione Gen2, è necessario configurare le impostazioni di rete per consentire all'area di lavoro di Azure Databricks di connettersi ad Azure Data Lake Archiviazione Gen2. Assicurarsi prima di tutto che l'area di lavoro di Azure Databricks sia distribuita nella propria rete virtuale seguendo Distribuire Azure Databricks nella rete virtuale di Azure (inserimento rete virtuale). È quindi possibile configurare endpoint privati o accedere dalla rete virtuale per consentire le connessioni dalle subnet all'account Azure Data Lake Archiviazione Gen2.

Se si usa un ambiente di calcolo serverless come sql warehouse serverless, è necessario concedere l'accesso dal piano di calcolo serverless ad Azure Data Lake Archiviazione Gen2. Vedere Rete del piano di calcolo serverless.

Concedere l'accesso usando endpoint privati

È possibile usare endpoint privati per l'account Azure Data Lake Archiviazione Gen2 per consentire all'area di lavoro di Azure Databricks di accedere in modo sicuro ai dati tramite un collegamento privato.

Per creare un endpoint privato usando il portale di Azure, vedere Esercitazione: Connessione a un account di archiviazione usando un endpoint privato di Azure. Assicurarsi di creare l'endpoint privato nella stessa rete virtuale in cui è distribuita l'area di lavoro di Azure Databricks.

Concedere l'accesso dalla rete virtuale

Rete virtuale gli endpoint di servizio consentono di proteggere le risorse critiche del servizio di Azure solo nelle reti virtuali. È possibile abilitare un endpoint di servizio per Archiviazione di Azure all'interno della rete virtuale usata per l'area di lavoro di Azure Databricks.

Per altre informazioni, incluse le istruzioni sull'interfaccia della riga di comando di Azure e PowerShell, vedere Concedere l'accesso da una rete virtuale.

  1. Accedere al portale di Azure come utente con il ruolo collaboratore account Archiviazione nell'account Azure Data Lake Archiviazione Gen2.
  2. Passare all'account Archiviazione di Azure e passare alla scheda Rete.
  3. Verificare di aver selezionato per consentire l'accesso da Reti virtuali selezionate e indirizzi IP.
  4. In Reti virtuali selezionare Aggiungi rete virtuale esistente.
  5. Nel pannello laterale, in Sottoscrizione selezionare la sottoscrizione in cui si trova la rete virtuale.
  6. In Reti virtuali selezionare la rete virtuale in cui è distribuita l'area di lavoro di Azure Databricks.
  7. In Subnet selezionare Seleziona tutto.
  8. Fare clic su Abilita.
  9. Seleziona Salva per applicare le modifiche.

Risoluzione dei problemi

Errore: IllegalArgumentException: Il segreto non esiste con ambito: KeyVaultScope e chiave

Questo errore significa probabilmente:

  • L'ambito supportato da Databricks a cui si fa riferimento nel codice non è valido.

Esaminare il nome del segreto nel passaggio 4 di questo articolo.

Errore: com.databricks.common.client.DatabricksServiceHttpClientException: INVALID_STATE: Databricks non è riuscito ad accedere all'insieme di credenziali delle chiavi

Questo errore significa probabilmente:

  • L'ambito supportato da Databricks a cui si fa riferimento nel codice non è valido. o il segreto archiviato nell'insieme di credenziali delle chiavi è scaduto.

Esaminare il passaggio 3 per assicurarsi che il segreto di Azure Key Vault sia valido. Esaminare il nome del segreto nel passaggio 4 di questo articolo.

Errore: ADAuthenticator$HttpException: Errore HTTP 401: token non riuscito per il recupero del token dalla risposta di AzureAD

Questo errore significa probabilmente:

  • La chiave privata client dell'entità servizio è scaduta.

Creare un nuovo segreto client seguendo il passaggio 2 di questo articolo e aggiornare il segreto in Azure Key Vault.

Risorse