Partager via


Meilleures pratiques pour Databricks Apps

Cette page répertorie les meilleures pratiques importantes pour le développement et l’exécution de Databricks Apps. Ces instructions se concentrent sur les exigences en matière de sécurité, de performances et de plateforme.

Bonnes pratiques générales

  • Utilisez des fonctionnalités natives Azure Databricks pour le traitement des données. Le calcul d’application est optimisé pour le rendu de l’interface utilisateur. Utilisez Databricks SQL pour les requêtes et les jeux de données, les travaux Lakeflow pour le traitement par lots, et la mise en service de modèles pour les charges de travail d’inférence IA. Déchargez le traitement lourd des données vers ces services pour éviter les problèmes de performances. Testez votre application dans des conditions de charge attendues pour vérifier qu’elle répond à vos besoins.

  • Implémentez une gestion d’arrêts appropriés. Votre application doit s’arrêter dans les 15 secondes après qu’elle reçoit un SIGTERM signal, ou qu’elle se termine de force avec SIGKILL.

  • Évitez les opérations privilégiées. Les applications s’exécutent en tant qu’utilisateurs non privilégiés et ne peuvent pas effectuer d’actions nécessitant des autorisations élevées telles que l’accès racine. Vous ne pouvez pas installer de packages au niveau du système à l’aide de gestionnaires de packages tels que apt-get, yumou apk. Utilisez plutôt des packages Python à partir de PyPI ou Node.js packages à partir de npm pour gérer les dépendances de votre application.

  • Comprendre la mise en réseau gérée par la plateforme. Les requêtes sont transférées par le biais d’un proxy inverse, de sorte que votre application ne peut pas dépendre de l’origine des requêtes. Azure Databricks gère l’arrêt TLS et nécessite que les applications prennent en charge le texte clair HTTP/2 (H2C). N’implémentez pas de gestion TLS personnalisée.

  • Connectez-vous à l’hôte et au port corrects. Votre application doit écouter 0.0.0.0 et utiliser le port spécifié dans la variable d’environnement DATABRICKS_APP_PORT . Pour plus d’informations, consultez les variables d’environnement .

  • Réduisez le temps de démarrage du conteneur. Conservez la logique d’initialisation légère pour réduire la latence de démarrage à froid. Évitez de bloquer les opérations telles que les installations de dépendance volumineuses ou les appels d’API externes au démarrage. Chargez des ressources lourdes uniquement si nécessaire.

  • Connectez-vous à stdout et stderr. Azure Databricks capture les journaux provenant des flux de sortie standard et d’erreur. Utilisez-les pour l’ensemble de la journalisation afin de garantir la visibilité des journaux dans l’interface utilisateur Azure Databricks. Évitez d’écrire des logs dans des fichiers locaux.

  • Gérez correctement les erreurs inattendues. Implémentez la gestion globale des exceptions pour empêcher les incidents d’erreurs non détectées. Retournez des réponses d’erreur HTTP appropriées sans exposer de traces de pile ou de données sensibles.

  • Épinglez les versions des dépendances. Utilisez des numéros de version exacts dans votre requirements.txt fichier pour garantir des environnements cohérents entre les builds. Évitez d’utiliser des versions non épinglées ou les dernières versions des packages.

  • Valider et nettoyer l’entrée de l’utilisateur. Validez toujours les données entrantes et nettoyez-les pour éviter les attaques par injection ou les entrées incorrectes, même dans les applications internes.

  • Utilisez la mise en cache en mémoire pour les opérations coûteuses. Cachez les données fréquemment utilisées, telles que les résultats de requête ou les réponses d’API, afin de réduire la latence et d’éviter le traitement redondant. Utilisez functools.lru_cache, cachetools ou des bibliothèques similaires, et gérez soigneusement les caches dans les applications multi-utilisateurs.

  • Utilisez des modèles de requête asynchrones pour les opérations de longue durée. Évitez les requêtes synchrones qui attendent que les opérations se terminent, risquant d'expirer. Au lieu de cela, effectuez une demande initiale pour démarrer l’opération, puis vérifiez régulièrement l’état de la ressource ou du point de terminaison pour vérifier l’état d’achèvement.

Bonnes pratiques de sécurité

  • Suivez le principe du privilège minimum. Accordez uniquement les autorisations nécessaires pour chaque utilisateur ou groupe. Utilisez CAN USE plutôt que CAN MANAGE, sauf si un contrôle total est requis. Consultez les meilleures pratiques en matière d’autorisations.

  • Choisissez soigneusement les méthodes d’authentification. Utilisez des principaux de service lorsque l’accès aux ressources et aux données est le même pour tous les utilisateurs de l’application. Implémentez uniquement l’authentification utilisateur dans les espaces de travail avec des auteurs d’applications approuvés et du code d’application examiné par un homologue, lorsque l’application doit respecter les autorisations de l’utilisateur appelant.

  • Utilisez des principaux de service dédiés pour chaque application. Ne partagez pas les informations d’identification du principal de service entre les applications ou les utilisateurs. Accordez uniquement les autorisations minimales nécessaires, telles que CAN USE ou CAN QUERY. Faire pivoter les informations d’identification du principal de service lorsque les créateurs d’applications quittent votre organisation. Consultez Gérer l’accès aux applications aux ressources.

  • Isoler les environnements d’application. Utilisez différents espaces de travail pour séparer les applications de développement, de préproduction et de production. Cela empêche l’accès accidentel aux données de production pendant le développement et le test.

  • Accédez aux données par le biais du calcul approprié. Ne configurez pas votre application pour accéder aux données ou les traiter directement. Utilisez des entrepôts SQL pour les requêtes, Model Serving pour l'inférence en intelligence artificielle et les Lakeflow Jobs pour le traitement par lots.

  • Gérer les secrets. N’exposez jamais de valeurs secrètes brutes dans les variables d’environnement. Utilisez valueFrom dans votre configuration d’application et effectuez une rotation régulière des secrets, surtout lorsque les rôles changent au sein de l’équipe. Consultez les meilleures pratiques.

  • Réduisez les étendues et journalisez les actions des utilisateurs Lorsque vous utilisez l’autorisation utilisateur, demandez uniquement les étendues dont votre application a besoin et consignez toutes les actions utilisateur avec des enregistrements d’audit structurés. Consultez les meilleures pratiques pour l’autorisation de l’utilisateur.

  • Restreindre l’accès réseau sortant. Autorisez uniquement les domaines dont votre application a besoin, tels que les référentiels de packages et les API externes. Utilisez le mode de fonctionnement sec et les journaux de déni pour valider votre configuration. Consultez les meilleures pratiques pour la configuration des stratégies réseau.

  • Suivez les pratiques de codage sécurisées. Paramétrez les requêtes SQL pour empêcher les attaques par injection et appliquer des instructions de développement sécurisées générales, telles que la validation d’entrée et la gestion des erreurs. Consultez l’API d’exécution des instructions : Exécuter SQL sur les entrepôts.

  • Surveillez les activités suspectes. Passez régulièrement en revue les journaux d’audit pour connaître des modèles d’accès inhabituels ou des actions non autorisées. Configurez des alertes pour les événements de sécurité critiques.