Share via


Segreti

Un segreto è una coppia chiave-valore che archivia il materiale segreto, con un nome di chiave univoco all'interno di un ambito segreto. Ogni ambito è limitato a 1000 segreti. La dimensione massima consentita del valore del segreto è 128 KB.

Vedere anche l'API Segreti.

Creare un segreto

I nomi dei segreti non fanno distinzione tra maiuscole e minuscole.

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, usare l'API REST set secret di Azure o l'interfaccia utente di portale di Azure.

Azure Key Vault

Creare un segreto in un ambito supportato da Databricks

Per creare un segreto in un ambito supportato da Databricks usando l'interfaccia della riga di comando di Databricks (versione 0.205 e successive):

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 <secret_scope> <secret_key>

È anche possibile fornire un segreto da un file. Per altre informazioni sulla scrittura di segreti, vedere Informazioni sull'interfaccia della riga di comando di Databricks.

Elencare i 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. Usare l'utilità Secrets (dbutils.secrets) in un notebook o in un processo per elencare questi metadati. Ad esempio:

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

Leggere un segreto

È possibile creare segreti usando l'API REST o l'interfaccia della riga di comando, ma è necessario usare l'utilità Secrets (dbutils.secrets) in un notebook o un processo per leggere un segreto.

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.

Usare un segreto in una proprietà di configurazione Spark o in una variabile di ambiente

Importante

Questa funzionalità è disponibile in anteprima pubblica.

Nota

Disponibile in Databricks Runtime 6.4 Extended Support e versioni successive.

È possibile fare riferimento a un segreto in una proprietà di configurazione Spark o in una variabile di ambiente. I segreti recuperati vengono elaborati dall'output del notebook e dai log del driver Spark e dell'executor.

Importante

Tenere presenti le implicazioni di sicurezza seguenti quando si fa riferimento ai segreti in una proprietà di configurazione Spark o in una variabile di ambiente:

  • Se il controllo di accesso alle tabelle non è abilitato in un cluster, qualsiasi utente con autorizzazioni Can Attach To per un cluster o Esegui autorizzazioni per un notebook può leggere le proprietà di configurazione di Spark dall'interno del notebook. Sono inclusi gli utenti che non dispongono dell'autorizzazione diretta per leggere un segreto. Databricks consiglia di abilitare il controllo di accesso alle tabelle in tutti i cluster o di gestire l'accesso ai segreti tramite ambiti segreti.

  • Anche quando il controllo di accesso alle tabelle è abilitato, gli utenti con autorizzazioni Can Attach To in un cluster o Run permissions on a notebook possono leggere le variabili di ambiente del cluster dall'interno del notebook. Databricks non consiglia di archiviare segreti nelle variabili di ambiente del cluster se non devono essere disponibili per tutti gli utenti del cluster.

  • I segreti non vengono elaborati dal log stdout e stderr dai flussi del driver Spark. Per proteggere i dati sensibili, per impostazione predefinita, i log dei driver Spark sono visualizzabili solo dagli utenti con l'autorizzazione CAN MANAGE per il processo, la modalità di accesso utente singolo e i cluster in modalità di accesso condiviso. Per consentire agli utenti con l'autorizzazione CAN ATTACH TO o CAN RESTART per visualizzare i log in questi cluster, impostare la proprietà di configurazione Spark seguente nella configurazione del cluster: spark.databricks.acl.needAdminPermissionToViewLogs false.

    In nessun cluster in modalità di accesso condiviso isolamento i log del driver Spark possono essere visualizzati dagli utenti con l'autorizzazione CAN ATTACH TO o CAN MANAGE. Per limitare gli utenti che possono leggere i log solo agli utenti con l'autorizzazione CAN MANAGE, impostare su spark.databricks.acl.needAdminPermissionToViewLogstrue.

Requisiti e limitazioni

I requisiti e le limitazioni seguenti si applicano per fare riferimento ai segreti nelle proprietà di configurazione spark e nelle variabili di ambiente:

  • I proprietari del cluster devono disporre dell'autorizzazione CAN READ per l'ambito del segreto.
  • Solo i proprietari del cluster possono aggiungere un riferimento a un segreto in una proprietà di configurazione Spark o in una variabile di ambiente e modificare l'ambito e il nome esistenti. I proprietari modificano un segreto usando l'API Segreti. È necessario riavviare il cluster per recuperare di nuovo il segreto.
  • Gli utenti con l'autorizzazione CAN MANAGE per il cluster possono eliminare una proprietà di configurazione Spark segreta o una variabile di ambiente.

Sintassi per fare riferimento ai segreti in una proprietà di configurazione Spark o in una variabile di ambiente

È possibile fare riferimento a un segreto usando qualsiasi nome di variabile o proprietà di configurazione Spark valido. Azure Databricks abilita un comportamento speciale per le variabili che fanno riferimento ai segreti in base alla sintassi del valore impostato, non al nome della variabile.

La sintassi della proprietà di configurazione Spark o del valore della variabile di ambiente deve essere {{secrets/<scope-name>/<secret-name>}}. Il valore deve iniziare con e terminare con {{secrets/}}.

Le parti variabili della proprietà di configurazione Spark o della variabile di ambiente sono:

  • <scope-name>: nome dell'ambito in cui è associato il segreto.
  • <secret-name>: nome univoco del segreto nell'ambito.

Ad esempio: {{secrets/scope1/key1}}.

Nota

  • Non devono essere presenti spazi tra parentesi graffe. Se sono presenti spazi, vengono considerati come parte dell'ambito o del nome del segreto.

Fare riferimento a un segreto con una proprietà di configurazione spark

Specificare un riferimento a un segreto in una proprietà di configurazione Spark nel formato seguente:

spark.<property-name> {{secrets/<scope-name>/<secret-name>}}

Qualsiasi configurazione <property-name> spark può fare riferimento a un segreto. Ogni proprietà di configurazione spark può fare riferimento a un solo segreto, ma è possibile configurare più proprietà spark per fare riferimento ai segreti.

Ad esempio:

Per fare riferimento a un segreto, impostare una configurazione spark:

spark.password {{secrets/scope1/key1}}

Per recuperare il segreto nel notebook e usarlo:

Python

spark.conf.get("spark.password")

SQL

SELECT ${spark.password};

Fare riferimento a un segreto in una variabile di ambiente

Specificare un percorso segreto in una variabile di ambiente nel formato seguente:

<variable-name>={{secrets/<scope-name>/<secret-name>}}

È possibile usare qualsiasi nome di variabile valido quando si fa riferimento a un segreto. L'accesso ai segreti a cui si fa riferimento nelle variabili di ambiente è determinato dalle autorizzazioni dell'utente che ha configurato il cluster. I segreti archiviati nelle variabili di ambiente sono accessibili da tutti gli utenti del cluster, ma vengono elaborati dalla visualizzazione in testo non crittografato, ad esempio i segreti a cui si fa riferimento altrove.

Le variabili di ambiente che fanno riferimento ai segreti sono accessibili da uno script init con ambito cluster. Vedere Impostare e usare le variabili di ambiente con script init.

Ad esempio:

Impostare una variabile di ambiente per fare riferimento a un segreto:

SPARKPASSWORD={{secrets/scope1/key1}}

Per recuperare il segreto in uno script init, accedere $SPARKPASSWORD usando il modello seguente:

if [ -n "$SPARKPASSWORD" ]; then
  # code to use ${SPARKPASSWORD}
fi

Gestire le autorizzazioni per i segreti

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 Secrets o il provider Terraform di Databricks. Per i livelli di autorizzazione dei segreti, vedere ACL dei segreti

Creare un elenco di controllo di accesso dei segreti

Per creare un elenco di controllo di accesso segreto per un determinato ambito segreto usando l'interfaccia della riga di comando di Databricks (legacy)

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.

Visualizzare gli elenchi di controllo di accesso dei segreti

Per visualizzare tutti gli ACL dei segreti per un determinato ambito segreto:

databricks secrets list-acls <scope-name>

Per ottenere l'ACL segreto applicato 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 avrà esito negativo.

Eliminare un elenco di controllo di accesso dei segreti

Per eliminare un elenco di controllo di accesso segreto applicato a un'entità per un determinato ambito segreto:

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