Vue d’ensemble de la sécurité pour Streamlit in Snowflake

Cette rubrique fournit une vue d’ensemble de la sécurité pour les administrateurs système gérant Streamlit in Snowflake dans leurs comptes Snowflake. La compréhension du modèle de sécurité et la mise en œuvre de contrôles appropriés garantissent que les développeurs peuvent créer des applications sécurisées, tandis que les administrateurs assurent la gouvernance des données et des ressources sensibles.

Modèle de sécurité

Streamlit in Snowflake suit le modèle de sécurité complet de Snowflake, qui comprend des fonctionnalités d’authentification, de contrôle d’accès basé sur les rôles, de politiques réseau et de gouvernance des données. Les applications sont des objets Snowflake de première classe qui s’intègrent à l’infrastructure de sécurité existante.

Exécution des droits du propriétaire

Par défaut, les applications Streamlit s’exécutent avec les droits du propriétaire, comme les procédures stockées. Cela a les conséquences suivantes :

  • Les applications exécutent des requêtes en utilisant les privilèges du propriétaire de l’application, et non du visualiseur.

  • Le rôle du propriétaire de l’application détermine les données et les opérations auxquelles l’application peut accéder.

  • Les visualiseurs peuvent interagir avec l’application sans avoir besoin d’un accès direct aux tables ou vues sous-jacentes.

Ce modèle élimine le besoin de jetons de compte de service et s’intègre de manière transparente aux fonctionnalités d’authentification et de contrôle d’accès de Snowflake. Pour plus d’informations, voir Comprendre les droits du propriétaire et les applications Streamlit in Snowflake.

Modèle de responsabilité partagée

La responsabilité de la sécurité est partagée entre Snowflake, les administrateurs des comptes et les développeurs d’applications :

  • Snowflake fournit les fonctionnalités de plateforme sécurisée, d’authentification, de chiffrement et de sécurité.

  • Les administrateurs configurent les politiques de sécurité au niveau du compte, gèrent les rôles et les privilèges, et auditent l’utilisation des applications.

  • Les développeurs d’applications écrivent du code sécurisé, gèrent correctement les secrets et suivent les meilleures pratiques de sécurité.

Pour plus d’informations sur le modèle de sécurité de Snowflake, voir Modèle de responsabilité partagée de Snowflake.

Politique de sécurité du contenu

Toutes les applications s’exécutent dans le cadre d’une `Politique de sécurité du contenu <https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/CSP>(`_) CSP qui restreint les ressources qui peuvent être chargées. Cette politique fournit une protection approfondie contre les scripts inter-sites (XSS) et d’autres attaques par injection de code. La CSP n’est pas configurable pour le moment.

La CSP bloque les ressources externes suivantes :

  • Chargement de code (scripts, styles, polices) à partir de domaines externes

  • Intégration d’applications dans des iframes à partir de domaines externes

La CSP autorise les ressources externes suivantes :

  • Images et médias de sources HTTPS : Les applications peuvent charger des images et des fichiers médias à partir de n’importe quelle URL HTTPS, y compris les services externes d’hébergement d’images et les APIs qui renvoient des images. Cela ne nécessite pas d’intégration d’accès externe.

  • URIs de données et URLs blob : Les applications peuvent utiliser des données intégrées (URIs de données) et du contenu généré dynamiquement (URLs de blob) pour les images et les médias. Cela prend en charge des fonctionnalités telles que l’affichage de graphiques, de schémas ou de contenu téléchargé par l’utilisateur.

  • Ressources Mapbox et Carto : Un sous-ensemble limité de ressources de Mapbox et Carto est autorisé à prendre en charge les visualisations de mappage.

Note

  • Pour les environnements d’exécution d’entrepôts qui utilisent conda pour gérer les dépendances, vous devez accepter les conditions d’Anaconda pour utiliser Mapbox. Pour plus d’informations, voir Utilisation de paquets tiers à partir d’Anaconda.

  • Le chargement d’images ou de médias à partir de domaines externes est pris en charge dans Streamlit in Snowflake, mais pas dans Snowflake Native App Framework.

  • Le CSP bloque également les appels frontaux qui sont généralement considérés comme dangereux, tels que eval().

Cette politique restrictive signifie que la plupart des bibliothèques et des composants personnalisés JavaScript tiers qui dépendent de scripts externes ne fonctionneront pas dans les applications Streamlit. Pour des informations sur les limites de la CSP, voir Limitations lors du chargement de ressources externes dans Streamlit in Snowflake.

Configuration de sécurité essentielle

Les configurations de sécurité suivantes sont essentielles pour un environnement Streamlit in Snowflake performant et sécurisé.

Configuration de l’accès au réseau

Configurez l’accès au réseau pour que les applications puissent communiquer avec Snowflake.

Pour tous les déploiements :

  • Ajoutez *.snowflake.app à la liste d’autorisation de votre réseau pour permettre la communication entre les applications Streamlit et Snowflake.

  • Assurez-vous que les WebSockets ne sont pas bloqués dans votre configuration réseau.

Pour plus d’informations, voir You can’t load the Streamlit app.

Pour la connectivité privée :

Si votre organisation a besoin d’une connectivité privée, configurez AWS PrivateLink, Azure Private Link ou Google Cloud Private Service Connect pour l’accès à Snowflake et l’accès à l’application Streamlit. Pour plus d’informations, voir Private connectivity for Streamlit in Snowflake.

Contrôle d’accès basé sur les rôles

Établissez une hiérarchie des rôles pour gérer les applications Streamlit.

Structure de rôles recommandée :

  • Rôles de créateur : Rôles avec les privilèges CREATE STREAMLIT sur les schémas où les applications seront déployées.

  • Rôles de visualiseur : Rôles avec les privilèges USAGE sur les applications pour les utilisateurs finaux.

L’exemple suivant montre comment créer une hiérarchie de rôles pour les applications Streamlit :

-- Create dedicated roles for Streamlit
CREATE ROLE streamlit_developer;
CREATE ROLE streamlit_viewer;

-- Grant hierarchy
GRANT ROLE streamlit_viewer TO ROLE streamlit_developer;

-- Grant privileges for app creation
GRANT USAGE ON DATABASE streamlit_db TO ROLE streamlit_developer;
GRANT USAGE ON SCHEMA streamlit_db.apps TO ROLE streamlit_developer;
GRANT CREATE STREAMLIT ON SCHEMA streamlit_db.apps TO ROLE streamlit_developer;
GRANT USAGE ON COMPUTE_POOL streamlit_compute_pool TO ROLE streamlit_developer;
GRANT USAGE ON INTEGRATION python_package_index TO ROLE streamlit_developer;

-- Grant privileges for app viewing
GRANT USAGE ON WAREHOUSE streamlit_wh TO ROLE streamlit_viewer;
GRANT USAGE ON DATABASE streamlit_db TO ROLE streamlit_viewer;
GRANT USAGE ON SCHEMA streamlit_db.apps TO ROLE streamlit_viewer;
GRANT USAGE ON STREAMLIT streamlit_db.apps.my_app TO ROLE streamlit_viewer;
Copy

Le développeur de l’application a aussi besoin de USAGE sur streamlit_wh, mais cela est hérité du rôle de visualiseur. Pour obtenir des informations sur les privilèges requis, voir Privilèges requis pour créer et utiliser une application Streamlit.

Gestion des secrets

Configurez une gestion appropriée des secrets pour les applications qui accèdent à des services externes ou à des identifiants de connexion sensibles :

  1. Activez l’accès aux secrets pour les applications en accordant les privilèges appropriés :

    -- Grant privileges on secrets to app owner role
    GRANT READ ON SECRET my_secret TO ROLE streamlit_developer;
    GRANT USAGE ON INTEGRATION my_external_access_integration TO ROLE streamlit_developer;
    
    Copy
  2. Pour les applications d’exécution de conteneurs, créez des fonctions SQL pour envelopper l’accès secret plutôt que d’intégrer des secrets dans le code de l’application.

Pour plus d’informations, voir Gérer les secrets et configurer votre application Streamlit.

Fonctions de contexte et sécurité au niveau des lignes

Si vos applications utilisent des fonctions contextuelles (comme CURRENT_USER()) ou accèdent à des tables avec des politiques d’accès aux lignes, attribuez le privilège READ SESSION global aux rôles de propriétaire d’application :

USE ROLE ACCOUNTADMIN;
GRANT READ SESSION ON ACCOUNT TO ROLE streamlit_developer;
Copy

Note

Les applications utilisant CURRENT_ROLE() dans les politiques d’accès aux lignes renverront toujours le rôle du propriétaire de l’application, et non le rôle du visualiseur, car les applications s’exécutent avec les droits du propriétaire par défaut.

Pour plus d’informations et d’exemples, voir Politiques d’accès aux lignes dans Streamlit in Snowflake.

Environnement d’exécution de conteneur uniquement : Sécurité du dépôt de paquets

Configurez un ou plusieurs index de paquets pour les environnements d’exécution de conteneur.

Les environnements d’exécution de conteneur peuvent installer des paquets à partir de référentiels externes tels que PyPI. Vous pouvez contrôler les sources des paquets à l’aide d’index de paquets recommandés, comme JFrog Artifactory, ou vous pouvez utiliser l’index des paquets par défaut PyPI. Quel que soit l’index de paquets que vous utilisez, vous devez créer une intégration d’accès externe (EAI) pour permettre à vos applications d’installer des dépendances.

L’utilisation d’un index de paquets recommandés offre les avantages suivants :

  • Cela permet de prévenir les attaques sur la chaîne d’approvisionnement et de veiller à ce que les paquets proviennent de sources fiables.

  • Il vous permet de contrôler les paquets et les versions disponibles pour vos applications.

  • Il fournit des pistes d’audit pour les installations de paquets.

Pour plus d’informations, voir Gestion des dépendances pour les environnements d’exécution des conteneurs.

Environnements d’exécutions d’entrepôt uniquement : Conditions des offres externes

Les environnements d’exécution d’entrepôt utilisent conda pour gérer les dépendances de votre application. Si vous souhaitez utiliser Mapbox dans vos applications, vous devez accepter les conditions des offres externes.

Pour obtenir des informations sur l’utilisation de ce paquet, voir Utilisation de paquets tiers à partir d’Anaconda.

Fonctionnalités de sécurité disponibles

Les fonctionnalités de sécurité suivantes sont disponibles pour améliorer la sécurité et la gouvernance des applications.

Intégrations d’accès externes

Contrôlez les réseaux et services externes auxquels vos applications peuvent accéder :

  • Créez des règles réseau pour définir les points de terminaison autorisés.

  • Créez des intégrations d’accès externes qui font référence aux règles de réseau et aux secrets d’authentification.

  • Attribuez des intégrations d’accès externes aux applications Streamlit.

Cela empêche les applications d’établir des connexions sortantes non autorisées et fournit des pistes d’audit pour l’accès externe.

Pour plus d’informations, voir Accès au réseau externe dans Streamlit in Snowflake.

Intégration Git

Intégrez des applications Streamlit aux dépôts Git pour le contrôle des versions et le suivi des modifications :

  • Accordez des privilèges appropriés sur les objets du dépôt Git (READ, WRITE ou OWNERSHIP).

  • Utilisez l’intégration Git pour maintenir des pistes d’audit des modifications de code.

  • Mettez en œuvre des processus de révision du code avant de déployer des modifications dans les applications de production.

Pour plus d’informations, voir Synchroniser les applications Streamlit in Snowflake avec un référentiel Git.

Connectivité privée

Pour les organisations ayant des exigences strictes en matière de sécurité du réseau, configurez la connectivité privée pour vous assurer que tout le trafic Streamlit reste dans votre réseau privé. Streamlit in Snowflake prend en charge les options de connectivité privée suivantes :

La connectivité privée élimine l’exposition à l’Internet public et fournit une isolation supplémentaire du réseau.

Pour plus d’informations, voir Private connectivity for Streamlit in Snowflake.

Journalisation et traçage

Pour les environnements d’exécution d’entrepôt, activez la journalisation et le traçage pour surveiller le comportement des applications et résoudre les problèmes :

  1. Créez une table d’événements et associez-la à votre compte.

  2. Définissez des niveaux de journalisation et de traçage appropriés pour les bases de données contenant des applications Streamlit.

  3. Examinez régulièrement les journaux à la recherche d’événements de sécurité, d’erreurs et de comportements inhabituels.

La journalisation et le traçage ne sont pas encore pris en charge pour les environnements d’exécution de conteneur.

Pour plus d’informations, voir Journalisation et traçage pour Streamlit in Snowflake.

Bonnes pratiques pour les administrateurs

Les meilleures pratiques suivantes contribuent à assurer un environnement Streamlit sécurisé.

Utiliser des rôles et des schémas dédiés :

  • Créez des schémas distincts pour les applications de développement, de test et de production.

  • Utilisez différents rôles pour chaque environnement afin d’éviter les modifications accidentelles des applications de production.

  • Accordez la propriété des applications de production aux rôles de service plutôt qu’aux comptes d’utilisateur individuels.

Mettre en œuvre l’accès le moins privilégié :

  • Accordez uniquement les privilèges minimum requis à chaque rôle.

  • Examinez et auditez régulièrement les appartenances et les privilèges des rôles.

  • Évitez l’octroi d’ACCOUNTADMIN ou d’autres rôles puissants aux rôles de propriétaire d’application, à moins que cela ne soit absolument nécessaire.

Gérer le cycle de vie de l’application :

  • Établissez des processus pour l’approbation et le déploiement des applications.

  • Demandez des révisions de code avant de promouvoir des applications en production.

  • Documentez les applications qui accèdent à des données sensibles et nécessitent un examen supplémentaire.

  • Examinez régulièrement et supprimez les applications inutilisées ou obsolètes.

Surveiller l’utilisation des ressources :

  • Définissez les tailles d’entrepôt appropriées pour les charges de travail d’application.

  • Surveillez les coûts de calcul et configurez des alertes en cas de modèles d’utilisation inhabituels.

  • Pour les environnements d’exécution de conteneur, configurez les pools de calcul avec les paramètres MIN_NODES et MAX_NODES appropriés.

  • Utilisez des entrepôts distincts pour différents environnements d’applications afin d’isoler les coûts et les ressources.

Pour plus d’informations sur la gestion des ressources, voir Gestion des coûts pour Streamlit in Snowflake et Environnements d’exécution pour les applications Streamlit.

Utiliser des pratiques de développement d’applications sécurisé :

  • Ne jamais intégrer d’identifiants de connexion ou des clés d’API directement dans le code de l’application.

  • Utilisez les secrets Snowflake pour stocker des informations sensibles.

  • Validez et assainissez les entrées d’utilisateur pour éviter l’injection SQL.

  • Limitez les données exposées dans les applications à ce que les visualiseurs ont besoin de voir.

  • Testez soigneusement les applications avant de les partager avec un public plus large.

Pour plus d’informations sur les considérations de sécurité des droits du propriétaire, voir Droits des propriétaires et sécurité des applications.

Effectuer des audits de sécurité réguliers :

  • Vérifier les rôles qui ont des privilèges CREATE STREAMLIT.

  • Auditez quelles applications accèdent à quelles sources de données.

  • Vérifiez les intégrations d’accès externes et les règles réseau.

  • Vérifiez les applications appartenant à d’anciens employés ou à des comptes inactifs.

  • Vérifiez l’accès au dépôt Git et l’historique des validations.

Utilisez les requêtes suivantes pour auditer vos applications Streamlit :

-- List all Streamlit apps and their owners
SHOW STREAMLITS;

-- Check privileges on a specific app
SHOW GRANTS ON STREAMLIT streamlit_db.apps.my_app;

-- List all roles with CREATE STREAMLIT privileges
SHOW GRANTS OF CREATE STREAMLIT;
Copy