Pular para o conteúdo principal

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 com SIGKILL.

  • 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 ambiente DATABRICKS_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 de CAN 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 ou CAN 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.