Condividi tramite


Gestione dei segreti

Per l'accesso ai dati è necessario talvolta eseguire l'autenticazione a origini dati esterne tramite JDBC. Anziché immettere direttamente le credenziali in un notebook, è possibile usare i segreti di Azure Databricks per archiviare le credenziali e farvi riferimento in notebook e processi. Questo articolo offre una panoramica dei segreti di Azure Databricks.

Panoramica dei segreti

Per configurare e usare i segreti:

  1. Creare un ambito dei segreti. Un ambito segreto è una raccolta di segreti identificati da un nome.
  2. Aggiungere segreti all'ambito
  3. Assegnare le autorizzazioni per l'ambito del segreto.
  4. Accedere ai segreti usando Le utilità di Databricks, vedere Utilità segreti (dbutils.secrets).

Per un esempio end-to-end di come usare i segreti nei flussi di lavoro, vedere Esercitazione: Creare e usare un segreto databricks. Per usare un segreto in una proprietà di configurazione Spark o in una variabile di ambiente, vedere Usare un segreto in una proprietà di configurazione Spark o in una variabile di ambiente.

Avviso

Gli amministratori, gli autori di segreti e gli utenti autorizzati possono leggere i segreti di Azure Databricks. Sebbene Databricks si adoperi per oscurare i valori segreti che potrebbero essere visualizzati nei notebook, non è possibile impedire agli utenti di accedere ai segreti. Vedere Redaction secret (Redaction secret).

Gestire gli ambiti dei segreti

Un ambito segreto è una raccolta di segreti identificati da un nome. Databricks consiglia di allineare gli ambiti dei segreti ai ruoli o alle applicazioni anziché ai singoli utenti.

Esistono due tipi di ambito segreto:

  • Backup di Azure Key Vault: è possibile fare riferimento ai segreti archiviati in un insieme di credenziali delle chiavi di Azure usando gli ambiti segreti supportati da Azure Key Vault. L'ambito del segreto supportato da Azure Key Vault è un'interfaccia di sola lettura per Key Vault. È necessario gestire i segreti negli ambiti segreti supportati da Azure Key Vault in Azure.
  • Backup di Databricks: un ambito segreto supportato da Databricks viene archiviato in un database crittografato di proprietà e gestito da Azure Databricks.

Dopo aver creato un ambito segreto, è possibile assegnare autorizzazioni per concedere agli utenti l'accesso per leggere, scrivere e gestire gli ambiti segreti.

Creare un ambito segreto supportato da Azure Key Vault

Questa sezione descrive come creare un ambito segreto supportato da Azure Key Vault usando il portale di Azure e l'interfaccia utente dell'area di lavoro di Azure Databricks. È anche possibile creare un ambito segreto supportato da Azure Key Vault usando l'interfaccia della riga di comando di Databricks.

Requisiti

  • È necessario disporre di un'istanza di Azure Key Vault. Se non si dispone di un'istanza dell'insieme di credenziali delle chiavi, seguire le istruzioni in Creare un insieme di credenziali delle chiavi usando il portale di Azure.
  • È necessario avere il ruolo Collaboratore, Collaboratore o Proprietario dell'insieme di credenziali delle chiavi di Azure che si vuole usare per ripristinare l'ambito del segreto.

Nota

La creazione di un ambito segreto supportato da Azure Key Vault richiede il ruolo Collaboratore o Proprietario nell'istanza di Azure Key Vault anche se il servizio Azure Databricks ha precedentemente concesso l'accesso all'insieme di credenziali delle chiavi.

Se l'insieme di credenziali delle chiavi esiste in un tenant diverso rispetto all'area di lavoro di Azure Databricks, l'utente di Azure AD che crea l'ambito segreto deve avere l'autorizzazione per creare entità servizio nel tenant dell'insieme di credenziali delle chiavi. In caso contrario, si verifica l'errore seguente:

Unable to grant read/list permission to Databricks service principal to KeyVault 'https://xxxxx.vault.azure.net/': Status code 403, {"odata.error":{"code":"Authorization_RequestDenied","message":{"lang":"en","value":"Insufficient privileges to complete the operation."},"requestId":"XXXXX","date":"YYYY-MM-DDTHH:MM:SS"}}

Configurare l'istanza di Azure Key Vault per Azure Databricks

  1. Accedere al portale di Azure e selezionare l'istanza di Azure Key Vault.

  2. In Impostazioni fare clic sulla scheda Configurazione di Accesso.

  3. Impostare Modello di autorizzazione su criteri di accesso dell'insieme di credenziali.

    Nota

    La creazione di un ambito dei segreti basato su Azure Key Vault concede le autorizzazioni di Get e List all'ID applicazione per il servizio Azure Databricks usando i criteri di accesso di Key Vault. Il modello di autorizzazione per il controllo degli accessi in base al ruolo di Azure non è supportato con Azure Databricks.

  4. In Impostazioni, selezionare Rete.

  5. In Firewall e reti virtuali impostare Consentire l'accesso da: a Consentire l'accesso pubblico da reti virtuali e indirizzi IP specifici.

    In Eccezione selezionare Consenti alle servizi Microsoft attendibili di ignorare il firewall.

    Nota

    È anche possibile impostare Consenti l'accesso da: su Consenti l'accesso pubblico da tutte le reti.

Creare un ambito dei segreti supportato da Azure Key Vault

  1. Vai a https://<databricks-instance>#secrets/createScope. Sostituire <databricks-instance> con l'URL dell'area di lavoro della distribuzione di Azure Databricks. Questo URL fa distinzione tra maiuscole e minuscole. Ad esempio, scope in createScope deve usare un carattere maiuscolo S.

    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. In Gestisci Principale selezionare Creator o Tutti gli utenti dell'area di lavoro per specificare quali utenti dispongono dell'autorizzazione MANAGE nell'ambito del segreto.

    L'autorizzazione MANAGE consente agli utenti di leggere, scrivere e concedere autorizzazioni per l'ambito. L'account deve avere il piano Premium per scegliere Creator.

  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 > impostazioni di un insieme di credenziali delle chiavi di Azure nel portale di Azure.

  5. Cliccare su Crea.

  6. Usare il comando dell'interfaccia della riga di comando di Databricksdatabricks secrets list-scopes per verificare che l'ambito sia stato creato correttamente.

Creare un ambito segreto supportato da Databricks

Questa sezione descrive come creare un ambito segreto usando l'interfaccia della riga di comando di Databricks (versione 0.205 e successive). È anche possibile usare l'API Segreti.

Nomi di ambito dei segreti:

  • Deve essere univoco all'interno di un'area di lavoro.
  • Deve essere costituito da caratteri alfanumerici, trattini, caratteri di sottolineatura, @punti e non può superare i 128 caratteri.
  • Non fa distinzione tra maiuscole e minuscole.

I nomi di ambito dei segreti sono considerati non sensibili e sono leggibili da tutti gli utenti nell'area di lavoro.

Per creare un ambito usando l'interfaccia della riga di comando di Databricks:

databricks secrets create-scope <scope-name>

Per impostazione predefinita, gli ambiti vengono creati con l'autorizzazione MANAGE per l'utente che ha creato l'ambito. Dopo aver creato un ambito segreto supportato da Databricks, è possibile aggiungervi segreti.

Elencare gli scope segreti

Per elencare gli ambiti esistenti in un'area di lavoro usando l'interfaccia della riga di comando:

databricks secrets list-scopes

È anche possibile elencare gli ambiti segreti usando l'API dei Segreti .

Eliminare un ambito dei segreti

L'eliminazione di un ambito segreto elimina tutti i segreti e gli elenchi di controllo di accesso applicati all'ambito. Per eliminare un ambito usando l'interfaccia della riga di comando, eseguire quanto segue:

databricks secrets delete-scope <scope-name>

È anche possibile eliminare un ambito segreto usando l'API Segreti.

Gestire i segreti

Un segreto è una coppia chiave-valore che archivia materiale sensibile usando un nome di chiave univoco all'interno di un ambito segreto.

Questa sezione descrive come creare un ambito segreto usando l'interfaccia della riga di comando di Databricks (versione 0.205 e successive). È anche possibile usare l'API Segreti. I nomi dei segreti non fanno distinzione tra maiuscole e minuscole.

Creare un segreto

Il metodo per la creazione di un segreto dipende dall'uso di un ambito supportato da Azure Key Vault o da un ambito supportato da Databricks.

Creare un segreto in un ambito supportato da Azure Key Vault

Per creare un segreto in Azure Key Vault, usa il portale di Azure o la REST API Azure Set Secret. Per un esempio, vedere Passaggio 4: Aggiungere il segreto client ad Azure Key Vault.

Azure Key Vault

Creare un segreto in un ambito supportato da Databricks

Questa sezione descrive come creare un segreto usando l'interfaccia della riga di comando di Databricks (versione 0.205 e successive) o in un notebook usando Databricks SDK per Python. È anche possibile usare l'API Segreti. I nomi dei segreti non fanno distinzione tra maiuscole e minuscole.

Interfaccia della riga di comando di Databricks

Quando si crea un segreto in un ambito supportato da Databricks, è possibile specificare il valore del segreto in uno dei tre modi seguenti:

  • Specificare il valore come stringa usando il flag –string-value.
  • Immettere il segreto quando richiesto in modo interattivo (segreti a riga singola).
  • Passare il segreto usando l'input standard (segreti su più righe).

Ad esempio:

databricks secrets put-secret --json '{
  "scope": "<scope-name>",
  "key": "<key-name>",
  "string_value": "<secret>"
}'

Se si crea un segreto su più righe, è possibile passare il segreto usando l'input standard. Ad esempio:

(cat << EOF
this
is
a
multi
line
secret
EOF
) | databricks secrets put-secret <scope-name> <key-name>

Databricks SDK per Python

from databricks.sdk import WorkspaceClient

w = WorkspaceClient()

w.secrets.put_secret("<secret_scope>","<key-name>",string_value ="<secret>")

Leggere un segreto

Per leggere un segreto in un notebook o in un processo, è necessario usare l'utilità Segreti (dbutils.secrets). Ad esempio:

password = dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>")

Elenca segreti

Per elencare i segreti in un determinato ambito:

databricks secrets list-secrets <scope-name>

La risposta visualizza le informazioni sui metadati relativi ai segreti, ad esempio i nomi delle chiavi dei segreti. Usi l'utilità Segreti (dbutils.secrets) in un notebook o in un'attività per elencare questi metadati. Ad esempio:

dbutils.secrets.list('my-scope')

consente di eliminare un segreto

Per eliminare un segreto da un ambito con l'interfaccia della riga di comando di Databricks:

databricks secrets delete-secret <scope-name> <key-name>

È anche possibile usare l'API Segreti.

Per eliminare un segreto da un ambito supportato da Azure Key Vault, usare l'API REST SetSecret di Azure o portale di Azure'interfaccia utente.

Gestire le autorizzazioni per l'ambito del segreto

Per impostazione predefinita, all'utente che crea gli ambiti dei segreti viene concessa l'autorizzazione MANAGE. Ciò consente all'autore dell'ambito di leggere i segreti nell'ambito, scrivere segreti nell'ambito e gestire le autorizzazioni per l'ambito.

Nota

Gli ACL dei segreti sono a livello di ambito. Se si usano ambiti supportati da Azure Key Vault, gli utenti a cui viene concesso l'accesso all'ambito hanno accesso a tutti i segreti nell'insieme di credenziali delle chiavi di Azure. Per limitare l'accesso, usare istanze separate di Azure Key Vault.

Questa sezione descrive come gestire il controllo di accesso segreto usando l'interfaccia della riga di comando di Databricks (versione 0.205 e successive). È anche possibile usare l'API Segreti. Per i livelli di autorizzazione dei segreti, vedere ACL dei segreti

Concedere a un utente le autorizzazioni per un ambito segreto

Per concedere a un utente le autorizzazioni per un ambito segreto usando l'interfaccia della riga di comando di Databricks:

databricks secrets put-acl <scope-name> <principal> <permission>

L'esecuzione di una richiesta put per un'entità che dispone già di un'autorizzazione applicata sovrascrive il livello di autorizzazione esistente.

Il principal campo specifica un'entità di sicurezza di Azure Databricks esistente. Un utente viene specificato usando il proprio indirizzo di posta elettronica, un'entità servizio usando il relativo applicationId valore e un gruppo usando il nome del gruppo. Per altre informazioni, vedere Principal.

Visualizzare le autorizzazioni per l'ambito del segreto

Per visualizzare tutte le autorizzazioni dell'ambito segreto per un determinato ambito segreto:

databricks secrets list-acls <scope-name>

Per ottenere le autorizzazioni dell'ambito segreto applicate a un'entità per un determinato ambito segreto:

databricks secrets get-acl <scope-name> <principal>

Se non esiste un elenco di controllo di accesso per l'entità e l'ambito specificati, la richiesta ha esito negativo.

Eliminare un'autorizzazione per l'ambito del segreto

Per eliminare un'autorizzazione di ambito segreto applicata a un'entità per un determinato ambito segreto:

databricks secrets delete-acl <scope-name> <principal>

Redaction secret

L'archiviazione delle credenziali come segreti di Azure Databricks semplifica la protezione delle credenziali quando si eseguono notebook e processi. Tuttavia, è facile stampare accidentalmente un segreto in buffer di output standard o visualizzare il valore durante l'assegnazione di variabili.

Per evitare questo problema, Azure Databricks redige tutti i valori segreti letti usando dbutils.secrets.get(). Quando viene visualizzato nell'output della cella del notebook, i valori segreti vengono sostituiti con [REDACTED].

Ad esempio, se si imposta una variabile su un valore segreto usando dbutils.secrets.get() e quindi si stampa tale variabile, tale variabile viene sostituita con [REDACTED].

Avviso

La redazione segreta per l'output della cella del notebook si applica solo ai valori letterali. La funzionalità di rimozione dei segreti non impedisce trasformazioni intenzionali e arbitrarie di un valore letterale segreto. Per garantire il corretto controllo dei segreti, è consigliabile usare elenchi di controllo di accesso per limitare le autorizzazioni per eseguire i comandi. In questo modo si impedisce l'accesso non autorizzato ai contesti del notebook condiviso.