Práticas recomendadas para aplicativos Databricks
Esta página lista práticas recomendadas importantes para desenvolver e executar aplicativos Databricks. Estas diretrizes concentram-se nos requisitos de segurança, desempenho e plataforma.
Práticas recomendadas gerais
-
Use o recurso Databricks -native para o processamento de dados. O aplicativo compute é otimizado para renderização da interface do usuário. Use Databricks SQL para consultas e conjunto de dados, LakeFlow Jobs para processamento de lotes e servindo modelo para cargas de trabalho de inferência AI.
-
Implemente um tratamento de desligamento elegante . Seu aplicativo deve ser encerrado dentro de 15 segundos após receber um sinal
SIGTERM
, ou ele será encerrado à força comSIGKILL
. -
Evite operações privilegiadas . Os aplicativos são executados como usuários sem privilégios e não podem realizar ações que exijam permissões elevadas, como acesso root.
-
Compreender a rede gerenciada por plataforma . As solicitações são encaminhadas por meio de um proxy reverso, portanto, seu aplicativo não pode depender da origem das solicitações. O Databricks lida com o encerramento do TLS e exige que os aplicativos ofereçam suporte ao HTTP/2 cleartext (H2C). Não implemente o tratamento personalizado de TLS.
-
Vincule ao host e à porta corretos . Seu aplicativo deve escutar em
0.0.0.0
e usar a porta especificada na variável de ambienteDATABRICKS_APP_PORT
. Consulte variável de ambiente para obter detalhes. -
Minimize o tempo do contêiner startup . Manter a lógica de inicialização leve para reduzir a latência do cold-começar. Evite bloquear operações como instalações de grandes dependências ou chamadas externas para API durante startup. Carregue recursos pesados somente quando necessário.
-
registram em stdout e stderr . Databricks captura logs da saída padrão e da transmissão de erros. Use-os para todos os registros para garantir que logs seja visível na interface do usuário Databricks. Evite gravar logs em arquivos locais.
-
Lide com erros inesperados com elegância . Implemente o tratamento global de exceções para evitar falhas causadas por erros não detectados. Retorne respostas de erro HTTP adequadas sem expor rastreamentos de pilha ou dados confidenciais.
-
versões de dependência de pinos . Use números de versão exatos em seu arquivo
requirements.txt
para garantir ambientes consistentes em todas as compilações. Evite usar versões não fixadas ou mais recentes do pacote. -
Valide e limpe a entrada do usuário . Sempre valide os dados recebidos e higienize-os para evitar ataques de injeção ou entradas malformadas, mesmo em aplicativos voltados para o interior.
-
Use o cache na memória para operações caras . Armazene em cache os dados usados com frequência, como resultados de consultas ou respostas de API, para reduzir a latência e evitar o processamento redundante. Use
functools.lru_cache
,cachetools
, ou biblioteca semelhante, e escopo de caches com cuidado em aplicativos multiusuários.
Melhores práticas de segurança
-
Siga o princípio do menor privilégio. Conceda somente as permissões necessárias para cada usuário ou grupo. Use
CAN USE
em vez deCAN MANAGE
, a menos que seja necessário controle total. Consulte Práticas recomendadas para permissões. -
Escolha os métodos de autenticação com cuidado . Use entidade de serviço quando o acesso ao recurso e aos dados for o mesmo para todos os usuários do aplicativo. Implemente a autenticação do usuário somente no espaço de trabalho com autores de aplicativos confiáveis e código de aplicativo revisado por pares, quando o aplicativo precisar respeitar as permissões do usuário que efetuou a chamada.
-
Use entidade de serviço dedicada para cada aplicativo . Não compartilhe credenciais de entidade de serviço entre aplicativos ou usuários. Conceda apenas as permissões mínimas necessárias, como
CAN USE
ouCAN QUERY
. Alterne as credenciais da entidade de serviço quando os criadores do aplicativo saírem da sua organização. Consulte gerenciar o acesso do app ao recurso. -
Isole ambientes de aplicativos . Use diferentes espaços de trabalho para separar aplicativos de desenvolvimento, preparação e produção. Isso evita o acesso acidental aos dados de produção durante o desenvolvimento e os testes.
-
Acesse dados por meio de computeapropriada . Não configure seu aplicativo para acessar ou processar dados diretamente. Use SQL Warehouse para consultas, o modelo de preenchimento para inferência AI e LakeFlow Jobs para processamento de lotes.
-
Gerenciar segredos . Nunca exponha valores secretos brutos em variáveis de ambiente. Use
valueFrom
na configuração do seu aplicativo e alterne os segredos regularmente, especialmente quando as funções da equipe mudarem. Veja as melhores práticas. -
Minimize escopos e log ações do usuário . Ao usar a autorização do usuário, solicite apenas os escopos que seu aplicativo precisa e log todas as ações do usuário com registros de auditoria estruturados. Consulte Melhores práticas para autorização do usuário.
-
Restringir o acesso de saída à rede . Permita apenas os domínios que seu aplicativo precisa, como pacotes, repositórios e APIs externas. Use o modo de execução a seco e logs de negação para validar sua configuração. Consulte Melhores práticas para configurar políticas de rede.
-
Siga práticas de codificação seguras . Parametrize consultas SQL para evitar ataques de injeção e aplique diretrizes gerais de desenvolvimento seguro, como validação de entrada e tratamento de erros. Consulte API de execução de instruções: executar SQL em armazéns.
-
Monitore atividades suspeitas . Revise regularmente logs de auditoria em busca de padrões de acesso incomuns ou ações não autorizadas. Configure alertas para eventos críticos de segurança.