Usare le credenziali del servizio Catalogo Unity per connettersi ai servizi cloud esterni

Questo articolo descrive come usare le credenziali del servizio nel catalogo unity per connettersi a servizi cloud esterni. Un oggetto credenziale del servizio in Unity Catalog incapsula una credenziale cloud a lungo termine che fornisce l'accesso a un servizio cloud esterno a cui gli utenti devono connettersi da Azure Databricks.

Vedere anche:

Requisiti

Prima di poter usare le credenziali di un servizio per connettersi a un servizio cloud esterno, è necessario disporre di:

  • Un'area di lavoro di Azure Databricks abilitata per Unity Catalog.

  • Risorsa di calcolo in Databricks Runtime 16.2 o versione successiva.

    I SQL warehouse non sono supportati per l'uso diretto delle credenziali di servizio. Vedi Usa una credenziale di servizio in un UDF Python.

    La versione di anteprima pubblica delle credenziali del servizio è disponibile in Databricks Runtime 15.4 LTS e versioni successive, con supporto Python ma senza supporto scala.

  • Credenziali del servizio create nel metastore del catalogo Unity che consentono l'accesso al servizio cloud.

  • Il privilegio ACCESS sulla credenziale di servizio o la proprietà della credenziale di servizio.

Utilizzare una credenziale di servizio nel tuo codice

Questa sezione fornisce esempi di uso delle credenziali del servizio in un notebook. Sostituire i valori segnaposto. Questi esempi non mostrano necessariamente l'installazione delle librerie necessarie, che dipendono dal servizio client a cui si vuole accedere.

È supportato solo Python.

Usa una credenziale di servizio in un UDF Python

Nelle funzioni definite dall'utente, usare databricks.service_credentials.getServiceCredentialsProvider() per accedere alle credenziali del servizio. La dbutils.credentials.getServiceCredentialsProvider() funzione usata nei notebook non è disponibile nei contesti di esecuzione UDF.

I requisiti dipendono dal tipo di UDF:

Tipo UDF Requisiti
UDF scalare con ambito di sessione PySpark Databricks Runtime 17.1 o versione successiva in calcolo classico, oppure un notebook serverless o una sessione di job che esegue la versione 3 o successiva dell'ambiente.
Batch Unity Catalog UDF Python Databricks Runtime 16.3 o superiore su calcolo classico; calcolo serverless; magazzini SQL pro e serverless. La versione 6 dell'ambiente non è obbligatoria.
Catalogo Scalar Unity Python UDF Databricks Runtime 18.1 o versioni successive nel compute classico. Nel calcolo serverless e nei warehouse SQL Pro e Serverless, imposta esplicitamente environment_version dell'UDF su 6 o versione successiva. Omettere l'intera ENVIRONMENT clausola o impostazione environment_version = 'None' non abilita questa funzione su questi tipi di calcolo. Il calcolo classico non richiede la versione 6 dell'ambiente.

Per effettuare chiamate in uscita da una UDF Python scalare o Batch Unity Catalog in un warehouse SQL serverless, abilita l'anteprima pubblica Abilita la connettività di rete per i carichi di lavoro isolati nei warehouse SQL serverless nella pagina Anteprime del tuo workspace. I Pro SQL warehouse non richiedono questa anteprima.

Per creare un UDF del Catalogo Unity che dichiari una credenziale di servizio, il creatore della funzione deve avere ACCESS sulla credenziale. Nel calcolo serverless, negli SQL warehouse Pro e serverless e nel calcolo con modalità di accesso standard, i chiamanti necessitano dei consueti privilegi di funzione, incluso EXECUTE, ma non necessitano di ACCESS per la credenziale. Nel calcolo in modalità di accesso dedicato, i chiamanti devono anche disporre di ACCESS.

Gli UDF con ambito di sessione PySpark utilizzano i permessi del chiamante. Il chiamante deve avere ACCESS sulla credenziale di servizio; per il calcolo in modalità di accesso dedicato, il chiamante deve avere MANAGE.

Vedi le versioni dell'ambiente e i requisiti di dipendenza personalizzata.

esempio python: configurare un client Azure SDK per l'uso di credenziali del servizio specifiche

from azure.keyvault.secrets import SecretClient # example Azure SDK client

credential = dbutils.credentials.getServiceCredentialsProvider('your-service-credential')
vault_url = "https://your-keyvault-name.vault.azure.net/"
client = SecretClient(vault_url=vault_url, credential=credential)

Specificare una credenziale del servizio predefinita per una risorsa di calcolo

Facoltativamente, è possibile specificare una credenziale del servizio predefinita per un cluster di calcolo di tutti gli scopi o processi impostando una variabile di ambiente. Per impostazione predefinita, l'SDK usa tale credenziale del servizio se non viene fornita alcuna autenticazione. Gli utenti necessitano ancora di ACCESS su tale credenziale del servizio per connettersi al servizio cloud esterno. Databricks non consiglia questo approccio, perché rende il codice meno portabile rispetto alla denominazione delle credenziali del servizio nel codice.

Nota

Le risorse di calcolo serverless e SQL Warehouse non supportano le variabili di ambiente e pertanto non supportano le credenziali del servizio predefinite.

  1. Aprire la pagina di modifica per il cluster.

    Vedere Gestire il calcolo classico.

  2. Fare clic su Avanzate nella parte inferiore della pagina e passare alla scheda Spark .

  3. Aggiungere la voce seguente in Variabili di ambiente, sostituendo <your-service-credential>:

    DATABRICKS_DEFAULT_SERVICE_CREDENTIAL_NAME=<your-service-credential>

Gli esempi di codice seguenti non specificano una credenziale del servizio. Usano invece le credenziali del servizio specificate nella variabile di ambiente DATABRICKS_DEFAULT_SERVICE_CREDENTIAL_NAME:

Pitone

Se si usa una credenziale del servizio predefinita, non è necessario specificare le credenziali come argomento:

from azure.identity import DefaultAzureCredential
from azure.keyvault.secrets import SecretClient

credential = DefaultAzureCredential()
vault_url = "https://your-keyvault-name.vault.azure.net/"
client = SecretClient(vault_url=vault_url, credential=credential)

Confrontare questo esempio con l'esempio di Python : configurare un client Azure SDK per l'uso di una credenziale del servizio specifica, che non importa DefaultAzureCredential e aggiunge la specifica delle credenziali:

credential = dbutils.credentials.getServiceCredentialsProvider('your-service-credential')