Condividi tramite


Autenticare l'accesso ad Azure Databricks con un'entità servizio usando OAuth (OAuth M2M)

Questo articolo illustra come creare un'entità servizio di Azure Databricks e usarla per l'autenticazione in un'entità di destinazione con OAuth.

Passaggio 1: Creare un'entità servizio

Gli amministratori dell'account e gli amministratori dell'area di lavoro possono creare un'entità servizio. Questo passaggio descrive la creazione di un'entità servizio in un'area di lavoro. Per usare la console dell'account, vedere Gestire le entità servizio nell'account.

È anche possibile creare un'entità servizio gestita di Microsoft Entra ID e aggiungerla ad Azure Databricks. Per altre informazioni, vedere Entità servizio Databricks e Microsoft Entra ID.

  1. Come amministratore dell'area di lavoro, accedere all'area di lavoro di Azure Databricks.
  2. Fare clic sul nome utente nella barra superiore dell’area di lavoro di Azure Databricks e selezionare Impostazioni.
  3. Fare clic sulla scheda Identità e accesso.
  4. Accanto a Entità servizio fare clic su Gestisci.
  5. Fare clic su Aggiungi entità servizio.
  6. Fare clic sulla freccia a discesa nella casella di ricerca e quindi fare clic su Aggiungi nuovo.
  7. In Gestione scegliere Databricks gestito.
  8. Immettere un nome per l'entità servizio.
  9. Fare clic su Aggiungi.

L'entità servizio viene aggiunta sia all'area di lavoro che all'account Azure Databricks.

Passaggio 2: Assegnare le autorizzazioni all'entità servizio

  1. Fare clic sul nome dell'entità servizio per aprire la relativa pagina dei dettagli.
  2. Nella scheda Configurazioni selezionare la casella accanto a ogni diritto a cui si vuole che l'entità servizio disponga per questa area di lavoro e quindi fare clic su Aggiorna.
  3. Nella scheda Autorizzazioni concedere l'accesso a qualsiasi utente, entità servizio e gruppi di Azure Databricks che si vuole gestire e usare questa entità servizio. Consultare Gestire i ruoli in un'entità servizio.

Passaggio 3: Creare un segreto OAuth per un'entità servizio

Prima di poter usare OAuth per eseguire l'autenticazione in Azure Databricks, è necessario creare un segreto OAuth, che può essere usato per generare token di accesso OAuth. Un'entità servizio può avere fino a cinque segreti OAuth. Gli amministratori dell'account e gli amministratori dell'area di lavoro possono creare un segreto OAuth per un'entità servizio.

  1. Nella pagina dei dettagli dell'entità servizio fare clic sulla scheda Segreti .

  2. In Segreti OAuth fare clic su Genera segreto.

    Generare un segreto OAuth dall'area di lavoro

  3. Copiare il segreto visualizzato e l'ID client, quindi fare clic su Fine.

Il segreto verrà rivelato una sola volta durante la creazione. L'ID client corrisponde all'ID applicazione dell'entità servizio.

Gli amministratori dell'account possono anche generare un segreto OAuth dalla pagina dei dettagli dell'entità servizio nella console dell'account.

  1. Accedere alla console dell'account come amministratore dell'account.

  2. Cliccare su Icona di gestione utenti della console account Gestione utenti.

  3. Nella scheda Entità servizio selezionare l'entità servizio.

  4. In Segreti OAuth fare clic su Genera segreto.

    Generare un segreto OAuth dall'area di lavoro

  5. Copiare il segreto visualizzato e l'ID client, quindi fare clic su Fine.

Nota

Per consentire all'entità servizio di usare cluster o data warehouse SQL, è necessario concedere all'entità servizio l'accesso ad essi. Vedere Autorizzazioni di calcolo o Gestire un'istanza di SQL Warehouse.

Passaggio 4: Usare l'autenticazione M2M OAuth

Per usare l'autenticazione OAuth M2M, è necessario impostare le variabili di ambiente, .databrickscfg i campi, i campi Terraform o Config i campi associati seguenti:

  • L'host di Azure Databricks, specificato come https://accounts.azuredatabricks.net per le operazioni dell'account o l'URL per area di lavoro, ad esempio https://adb-1234567890123456.7.azuredatabricks.net per le operazioni dell'area di lavoro.
  • L’ID dell'account Azure Databricks per le operazioni dell'account Azure Databricks.
  • L’ID client dell'entità servizio.
  • Il segreto dell'entità servizio.

Per eseguire l'autenticazione OAuth M2M, integrare quanto segue all'interno del codice, in base allo strumento o all'SDK partecipante:

Ambiente

Per usare le variabili di ambiente per un tipo di autenticazione di Azure Databricks specifico con uno strumento o un SDK, consultare Autenticare l'accesso alle risorse di Azure Databricks o alla documentazione dello strumento o dell'SDK. Consultare anche Variabili di ambiente e campi per l'autenticazione unificata client e i metodi predefiniti per l'autenticazione unificata client.

Per le operazioni a livello di account, impostare le variabili di ambiente seguenti:

  • DATABRICKS_HOST, accedere all’URL console degli account di Azure Databricks, https://accounts.azuredatabricks.net.
  • DATABRICKS_ACCOUNT_ID
  • DATABRICKS_CLIENT_ID
  • DATABRICKS_CLIENT_SECRET

Per le operazioni a livello di area di lavoro, impostare le variabili di ambiente seguenti:

  • DATABRICKS_HOST, impostato sull'URL per workspace di Azure Databricks, ad esempio https://adb-1234567890123456.7.azuredatabricks.net.
  • DATABRICKS_CLIENT_ID
  • DATABRICKS_CLIENT_SECRET

Profilo

Creare o identificare un profilo di configurazione di Azure Databricks con i seguenti campi nel .databrickscfg file. Se si crea il profilo, sostituire i segnaposto con i valori appropriati. Per usare il profilo con uno strumento o un SDK, consultare Autenticare l'accesso alle risorse di Azure Databricks o alla documentazione dello strumento o dell'SDK. Consultare anche Variabili di ambiente e campi per l'autenticazione unificata client e i metodi predefiniti per l'autenticazione unificata client.

Per le operazioni a livello di account, impostare i valori seguenti nel file .databrickscfg. In questo caso, l'URL della console dell'account Azure Databricks è 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>

Per le operazioni a livello di area di lavoro, impostare i valori seguenti nel file .databrickscfg. In questo caso, l'host è l'URL per area di lavoro di Azure Databricks, ad esempio 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

Per l'interfaccia della riga di comando di Databricks, eseguire una delle operazioni seguenti:

  • Impostare le variabili di ambiente come specificato nella sezione “Ambiente” di questo articolo.
  • Impostare i valori nel file .databrickscfg come specificato nella sezione "Profile" di questo articolo.

Le variabili di ambiente hanno sempre la precedenza sui valori nel file .databrickscfg.

Consultare anche Autenticazione da computer a computer (M2M) OAuth.

Connessione

Nota

L'autenticazione OAuth M2M è supportata nelle versioni seguenti di Databricks Connect:

  • Per Python, Databricks Connect per Databricks Runtime 14.0 e versioni successive.
  • Per Scala, Databricks Connect per Databricks Runtime 13.3 LTS e versioni successive. Databricks SDK per Java incluso in Databricks Connect per Databricks Runtime 13.3 LTS e versioni successive deve essere aggiornato a Databricks SDK per Java 0.17.0 o versione successiva.

Per Databricks Connect, è possibile eseguire una delle operazioni seguenti:

I valori nel file .databrickscfg hanno sempre la precedenza sulle variabili di ambiente.

Per inizializzare il client Databricks Connect con queste variabili di ambiente o valori nel .databrickscfg file, vedere Configurazione di calcolo per Databricks Connect.

VS Code

Per l’estensione Databricks per Visual Studio Code, eseguire le operazioni seguenti:

  1. Impostare i valori nel file .databrickscfg per le operazioni a livello di area di lavoro di Azure Databricks come specificato nella sezione “Profilo” di questo articolo.
  2. Nel riquadro Configurazione dell'estensione Databricks per Visual Studio Code fare clic su Configura Databricks.
  3. Nel Riquadro Comandi, per Host Databricks, immettere l'URL per area di lavoro, ad esempio https://adb-1234567890123456.7.azuredatabricks.net e poi cliccare Enter.
  4. Nel Riquadro Comandi selezionare il nome del profilo di destinazione nell'elenco per l'URL.

Per ulteriori dettagli, consultare Configurazione dell'autenticazione per l'estensione Databricks per Visual Studio Code.

Terraform

Per le operazioni a livello di account, per l'autenticazione predefinita:

provider "databricks" {
  alias = "accounts"
}

Per la configurazione diretta (sostituire i segnaposto retrieve con la propria implementazione per recuperare i valori dalla console o da un altro archivio di configurazione, ad esempio HashiCorp Vault. Consultare anche Provider di insiemi di credenziali). In questo caso, l'URL della console dell'account Azure Databricks è 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>
}

Per le operazioni a livello di area di lavoro, per l'autenticazione predefinita:

provider "databricks" {
  alias = "workspace"
}

Per la configurazione diretta (sostituire i segnaposto retrieve con la propria implementazione per recuperare i valori dalla console o da un altro archivio di configurazione, ad esempio HashiCorp Vault. Consultare anche Provider di insiemi di credenziali). In questo caso, l'host è l'URL per area di lavoro di Azure Databricks, ad esempio https://adb-1234567890123456.7.azuredatabricks.net:

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

Per altre informazioni sull'autenticazione con il provider Databricks Terraform, consultare Autenticazione.

Python

Per le operazioni a livello di account, usare quanto segue per l'autenticazione predefinita:

from databricks.sdk import AccountClient

a = AccountClient()
# ...

Per la configurazione diretta, usare quanto segue, sostituendo i retrieve segnaposto con la propria implementazione, per recuperare i valori dalla console o da un altro archivio di configurazione, ad esempio Azure KeyVault. In questo caso, l'URL della console dell'account Azure Databricks è 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()
)
# ...

Per le operazioni a livello di area di lavoro, in particolare per l'autenticazione predefinita:

from databricks.sdk import WorkspaceClient

w = WorkspaceClient()
# ...

Per la configurazione diretta, sostituire i segnaposto retrieve con la propria implementazione per recuperare i valori dalla console o da un altro archivio di configurazione, ad esempio Azure KeyVault. In questo caso, l'host è l'URL per area di lavoro di Azure Databricks, ad esempio 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()
)
# ...

Per altre informazioni sull'autenticazione con gli strumenti e gli SDK di Databricks che usano Python e implementano l'autenticazione unificata del client Databricks, consultare:

Nota

L'estensione Databricks per Visual Studio Code usa Python ma non ha ancora implementato l'autenticazione OAuth M2M.

Java

Per le operazioni a livello di area di lavoro, per l'autenticazione predefinita:

import com.databricks.sdk.WorkspaceClient;
// ...
WorkspaceClient w = new WorkspaceClient();
// ...

Per la configurazione diretta (sostituire i segnaposto retrieve con la propria implementazione per recuperare i valori dalla console o da un altro archivio di configurazione, ad esempio Azure KeyVault). In questo caso, l'host è l'URL per area di lavoro di Azure Databricks, ad esempio 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);
// ...

Per altre informazioni sull'autenticazione con gli strumenti e gli SDK di Databricks che usano Java e implementano l'autenticazione unificata del client Databricks, consultare:

Go

Per le operazioni a livello di account, per l'autenticazione predefinita:

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

Per la configurazione diretta (sostituire i segnaposto retrieve con la propria implementazione per recuperare i valori dalla console o da un altro archivio di configurazione, ad esempio Azure KeyVault). In questo caso, l'URL della console dell'account Azure Databricks è 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(),
}))
// ...

Per le operazioni a livello di area di lavoro, per l'autenticazione predefinita:

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

Per la configurazione diretta (sostituire i segnaposto retrieve con la propria implementazione per recuperare i valori dalla console o da un altro archivio di configurazione, ad esempio Azure KeyVault). In questo caso, l'host è l'URL per area di lavoro di Azure Databricks, ad esempio 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(),
}))
// ...

Per altre informazioni sull'autenticazione con gli strumenti e gli SDK di Databricks che usano Go e che implementano l'autenticazione unificata del client Databricks, consultare Autenticare Databricks SDK for Go con l'account o l'area di lavoro di Azure Databricks.

Generare e usare manualmente i token di accesso per l'autenticazione M2M OAuth

Gli strumenti e gli SDK di Azure Databricks che implementano lo standard di autenticazione unificata del client Databricks genereranno, aggiorneranno e useranno automaticamente i token di accesso OAuth di Azure Databricks per conto dell'utente in base alle esigenze per l'autenticazione OAuth M2M.

Databricks consiglia di usare l'autenticazione unificata client, tuttavia, se è necessario generare, aggiornare o usare manualmente i token di accesso OAuth di Azure Databricks, seguire le istruzioni riportate in questa sezione.

Usare l'ID client dell'entità servizio e il segreto OAuth per richiedere un token di accesso OAuth per eseguire l'autenticazione sia alle API REST a livello di account che alle API REST a livello di area di lavoro. Il token di accesso scadrà in un'ora. È necessario richiedere un nuovo token di accesso OAuth dopo la scadenza. L'ambito del token di accesso OAuth dipende dal livello da cui si crea il token. È possibile creare un token a livello di account o a livello di area di lavoro, come indicato di seguito:

Generare manualmente un token di accesso a livello di account

Un token di accesso OAuth creato dal livello di account può essere usato con le API REST di Databricks nell'account e in qualsiasi area di lavoro a cui l'entità servizio ha accesso.

  1. Come amministratore dell'account, accedere alla console dell'account.

  2. Fare clic sulla freccia giù accanto al nome utente nell'angolo in alto a destra.

  3. Copiare l’ID account.

  4. Costruire l'URL dell'endpoint del token sostituendo <my-account-id> nell'URL seguente con l'ID account copiato.

    https://accounts.azuredatabricks.net/oidc/accounts/<my-account-id>/v1/token
    
  5. Usare un client, curl ad esempio per richiedere un token di accesso OAuth con l'URL dell'endpoint del token, l'ID client dell'entità servizio (noto anche come ID applicazione) e il segreto OAuth dell'entità servizio creato. L'ambito all-apis richiede un token di accesso OAuth che può essere usato per accedere a tutte le API REST di Databricks a cui è stato concesso l'accesso all'entità servizio.

    • Sostituire <token-endpoint-URL> con l’URL dell’endpoint del token precedente.
    • Sostituire <client-id> con l’ID client dell’entità servizio, noto anche come ID applicazione.
    • Sostituire <client-secret> con il segreto OAuth dell’entità servizio creato.
    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'
    

    In questo modo viene generata una risposta simile a:

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

    Copiare il valore access_token della risposta.

Generare manualmente un token di accesso a livello di area di lavoro

Un token di accesso OAuth creato dal livello di area di lavoro può accedere solo alle API REST nell'area di lavoro, anche se l'entità servizio è un amministratore dell'account o è membro di altre aree di lavoro.

  1. Creare l'URL dell'endpoint del token sostituendo https://<databricks-instance> con l'URL dell'area di lavoro della distribuzione di Azure Databricks:

    https://<databricks-instance>/oidc/v1/token
    
  2. Usare un client, curl ad esempio per richiedere un token di accesso OAuth con l'URL dell'endpoint del token, l'ID client dell'entità servizio (noto anche come ID applicazione) e il segreto OAuth dell'entità servizio creato. L'ambito all-apis richiede un token di accesso OAuth che può essere usato per accedere a tutte le API REST di Databricks a cui l'entità servizio ha concesso l'accesso all'interno dell'area di lavoro da cui si richiede il token.

    • Sostituire <token-endpoint-URL> con l’URL dell’endpoint del token precedente.
    • Sostituire <client-id> con l’ID client dell’entità servizio, noto anche come ID applicazione.
    • Sostituire <client-secret> con il segreto OAuth dell’entità servizio creato.
    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'
    

    In questo modo viene generata una risposta simile a:

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

    Copiare il valore access_token della risposta.

Chiamare un'API REST di Databricks

È ora possibile usare il token di accesso OAuth per eseguire l'autenticazione alle API REST a livello di account di Azure Databricks e alle API REST a livello di area di lavoro. L'entità servizio deve essere un amministratore dell'account per chiamare le API REST a livello di account.

È possibile includere il token nell'intestazione usando Bearer l'autenticazione. È possibile usare questo approccio con o qualsiasi curl client compilato.

Esempio di richiesta API REST a livello di account

Questo esempio usa Bearer l'autenticazione per ottenere un elenco di tutte le aree di lavoro associate a un account.

  • Sostituire <oauth-access-token> con il token di accesso OAuth dell'entità servizio copiato nel passaggio precedente.
  • Sostituire <account-id> con l’ID account.
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'

Esempio di richiesta API REST a livello di area di lavoro

Questo esempio usa Bearer l'autenticazione per elencare tutti i cluster disponibili nell'area di lavoro specificata.

  • Sostituire <oauth-access-token> con il token di accesso OAuth dell'entità servizio copiato nel passaggio precedente.
  • Sostituire <workspace-URL> con l'URL dell'area di lavoro di base, che ha il formato simile 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'

Risorse aggiuntive