Usar um segredo em uma propriedade de configuração ou variável de ambiente do Spark
Este artigo fornece detalhes sobre como fazer referência a um segredo em uma propriedade de configuração ou variável de ambiente do Spark. Os segredos recuperados são editados da saída do notebook e dos logs do driver e do executor do Spark.
Importante
Esse recurso está em uma versão prévia.
Considerações de segurança
O Databricks não recomenda armazenar segredos em variáveis de ambiente de cluster se elas não estiverem disponíveis para todos os usuários no cluster. Lembre-se das seguintes implicações de segurança ao referenciar segredos em uma propriedade de configuração ou variável de ambiente do Spark:
Qualquer usuário com permissões CAN ATTACH TO em um cluster ou permissões de execução em um notebook pode ler variáveis de ambiente de cluster de dentro do notebook.
Se o controle de acesso à tabela não estiver habilitado em um cluster, qualquer usuário com permissões CAN ATTACH TO em um cluster ou permissões de execução em um notebook poderá ler as propriedades de configuração do Spark de dentro do notebook. Isso inclui usuários que não têm permissão direta para ler um segredo.
Os segredos não são editados do log
stdout
estderr
dos fluxos do driver do Spark. Para proteger dados confidenciais, por padrão, os logs do driver Spark só podem ser visualizados por usuários com a permissão PODE GERENCIAR em clusters de trabalho, de modo de acesso de usuário único e de modo de acesso compartilhado.Em clusters do modo de acesso compartilhado sem isolamento, os logs do driver Spark podem ser visualizados por usuários com a permissão PODE ANEXAR A ou PODE GERENCIAR. Para limitar quem pode ler os logs apenas aos usuários com a permissão PODE GERENCIAR, defina
spark.databricks.acl.needAdminPermissionToViewLogs
comotrue
.
Requisitos
Os seguintes requisitos se aplicam à referência de segredos nas propriedades de configuração e nas variáveis de ambiente do Spark:
- Os proprietários do cluster devem ter a permissão CAN READ no escopo do segredo.
- Você deve ser um proprietário de cluster para adicionar ou editar um segredo em uma propriedade de configuração ou variável de ambiente do Spark.
- Se um segredo for atualizado, você deverá reiniciar o cluster para buscá-lo novamente.
- Você deve ter a permissão CAN MANAGE no cluster para excluir uma propriedade de configuração secreta do Spark ou uma variável de ambiente.
Referenciar um segredo com uma propriedade de configuração do Spark
Especifique uma referência a um segredo em uma propriedade de configuração do Spark no seguinte formato:
spark.<property-name> {{secrets/<scope-name>/<secret-name>}}
Substitua:
<scope-name>
pelo nome do escopo secreto.<secret-name>
pelo nome exclusivo do segredo no escopo.<property-name>
com a propriedade de configuração do Spark
Cada propriedade de configuração do Spark pode referenciar apenas um segredo, mas você pode configurar várias propriedades do Spark para referenciar segredos.
Por exemplo:
spark.password {{secrets/scope1/key1}}
Para buscar o segredo no notebook e usá-lo:
Python
spark.conf.get("spark.password")
SQL
SELECT ${spark.password};
Referenciar um segredo em uma variável de ambiente
Especifique um caminho secreto em uma variável de ambiente no seguinte formato:
<variable-name>={{secrets/<scope-name>/<secret-name>}}
Você pode usar qualquer nome de variável válido ao referenciar um segredo. O acesso a segredos referenciados em variáveis de ambiente é determinado pelas permissões do usuário que configurou o cluster. Embora os segredos armazenados em variáveis de ambiente sejam acessíveis a todos os usuários do cluster, eles são redigidos da exibição em texto simples, semelhante a outras referências secretas.
Variáveis de ambiente que fazem referência a segredos podem ser acessadas por meio de um script de inicialização com escopo de cluster. Confira como Definir e usar variáveis de ambiente com scripts de inicialização.
Por exemplo:
Defina uma variável de ambiente para referenciar um segredo:
SPARKPASSWORD={{secrets/scope1/key1}}
Para buscar o segredo em um script de inicialização, acesse $SPARKPASSWORD
usando o seguinte padrão:
if [ -n "$SPARKPASSWORD" ]; then
# code to use ${SPARKPASSWORD}
fi