Sicherheitsübersicht für Streamlit in Snowflake¶
Dieses Thema bietet einen Sicherheitsüberblick für Systemadministratoren, die Streamlit in Snowflake in ihren Snowflake-Konten verwalten. Das Sicherheitsmodell zu verstehen und geeignete Kontrollelemente zu implementieren stellt sicher, dass Entwickler sichere Anwendungen erstellen können, während Administratoren die Kontrolle über vertrauliche Daten und Ressourcen behalten.
Sicherheitsmodell¶
Streamlit in Snowflake folgt dem umfassenden Sicherheitsmodell von Snowflake, das Authentifizierung, rollenbasierte Zugriffssteuerung, Netzwerkrichtlinien und Data Governance-Features umfasst. Apps sind erstklassige Snowflake-Objekte, die sich in bestehende Sicherheitsinfrastrukturen integrieren lassen.
Ausführung der Eigentümerrechte¶
Standardmäßig werden Streamlit-Apps mit Eigentümerrechten ausgeführt, ähnlich wie bei gespeicherten Prozeduren. Dies hat folgende Konsequenzen:
Apps führen Abfragen mit den Berechtigungen des App-Eigentümers bzw. der App-Eigentümerin aus, nicht der Berechtigungen des Betrachtenden.
Die Rolle des App-Eigentümers bzw. der App-Eigentümerin bestimmt, auf welche Daten und Operationen die App zugreifen kann.
Betrachtende können mit der App interagieren, ohne direkten Zugriff auf die zugrunde liegenden Tabellen oder Ansichten zu benötigen.
Dieses Modell macht Token für Dienstkonten überflüssig und lässt sich nahtlos in die Authentifizierungs- und Zugriffssteuerungsfeatures von Snowflake integrieren. Weitere Informationen dazu finden Sie unter Erläuterungen zu Eigentümerrechten und Streamlit in Snowflake-Apps.
Inhaltssicherheitsrichtlinie¶
Alle Streamlit-Apps werden innerhalb einer Inhaltssicherheitsrichtlinie (Content Security Policy, CSP) ausgeführt, die einschränkt, welche Ressourcen geladen werden können. Diese Richtlinie bietet einen umfassenden Schutz gegen Cross-Site Scripting (XSS) und andere Angriffe durch Codeeinschleusung. Die CSP ist derzeit nicht konfigurierbar.
Die CSP blockiert die folgenden externen Ressourcen:
Laden von Code (Skripte, Formatvorlagen, Schriftarten) von externen Domains
Einbetten von Apps in iFrames von externen Domains
Die CSP erlaubt die folgenden externen Ressourcen:
Bilder und Medien aus HTTPS-Quellen: Apps können Bilder und Mediendateien von jeder HTTPS-URL laden, einschließlich externer Bild-Hostingdienste und APIs, die Images zurückgeben. Dies erfordert keine Integration für den externen Zugriff.
Daten-URIs und Blob-URLs: Apps können eingebettete Daten (z. B. Daten-URIs) und dynamisch generierten Inhalten (Blob-URLs) für Bilder und Medien verwenden. Dies unterstützt Features wie das Anzeigen von Diagrammen, Grafiken oder vom Benutzenden hochgeladenen Inhalten.
Mapbox- und Carto-Ressourcen: Eine begrenzte Teilmenge von Ressourcen von Mapbox und Carto ist zur Unterstützung von Zuordnungsvisualisierungen zulässig.
Bemerkung
Bei Warehouse-Laufzeiten, die Conda zum Verwalten von Abhängigkeiten verwenden, müssen Sie die Anaconda-Bedingungen akzeptieren, um Mapbox verwenden zu können. Weitere Informationen dazu finden Sie unter Verwenden von Drittanbieterpaketen aus Anaconda.
Das Laden von Bildern oder Medien von externen Domains wird in Streamlit in Snowflake unterstützt, jedoch nicht in Snowflake Native App Framework.
CSP blockiert auch Front-End-Aufrufe, die allgemein als unsicher gelten, wie z. B.
eval().
Diese restriktive Richtlinie bedeutet, dass die meisten Drittanbieter-JavaScript-Bibliotheken und kundenspezifischen Komponenten, die auf externen Skripten basieren, in Streamlit-Apps nicht funktionieren. Weitere Informationen zu CSP-Einschränkungen finden Sie unter Beschränkungen beim Laden externer Ressourcen in Streamlit in Snowflake.
Grundlegende Sicherheitseinrichtung¶
Die folgenden Sicherheitskonfigurationen sind unerlässlich für eine sichere und gut funktionierende Streamlit in Snowflake-Umgebung.
Konfiguration des Netzwerkzugriffs¶
Konfigurieren Sie den Netzwerkzugriff, um sicherzustellen, dass Apps mit Snowflake kommunizieren können.
Für alle Bereitstellungen:
Fügen Sie
*.snowflake.appzur Netzwerk-Zulassungsliste hinzu, um die Kommunikation zwischen Streamlit-Apps und Snowflake zu ermöglichen.Stellen Sie sicher, dass WebSockets in Ihrer Netzwerkkonfiguration nicht blockiert werden.
Weitere Informationen dazu finden Sie unter You can’t load the Streamlit app.
Für private Konnektivität:
Wenn Ihre Organisation private Konnektivität benötigt, konfigurieren Sie AWS PrivateLink, Azure Private Link oder Google Cloud Private Service Connect sowohl für den Zugriff durch Snowflake als auch für den Zugriff durch die Streamlit-App. Weitere Informationen dazu finden Sie unter Private connectivity for Streamlit in Snowflake.
Rollenbasierte Zugriffssteuerung¶
Richten Sie eine Rollenhierarchie für die Verwaltung von Streamlit-Apps ein.
Empfohlene Rollenstruktur:
Erstellerrollen: Rollen mit CREATE STREAMLIT-Berechtigungen für Schemas, in denen die Apps bereitgestellt werden.
Betrachterrollen: Rollen mit USAGE-Berechtigungen für Apps für Endbenutzende.
Das folgende Beispiel zeigt, wie Sie eine Rollenhierarchie für Streamlit-Apps erstellen:
-- 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;
Der App-Entwickler benötigt auch die Berechtigung USAGE für streamlit_wh, aber diese wird von der Betrachterrolle übernommen. Weitere Informationen zu den erforderlichen Berechtigungen finden Sie unter Erforderliche Berechtigungen zum Erstellen und Verwenden einer Streamlit-App.
Verwalten von Geheimnissen¶
Konfigurieren Sie die ordnungsgemäße Geheimnisverwaltung für Apps, die auf externe Dienste oder vertrauliche Anmeldeinformationen zugreifen:
Aktivieren Sie den Zugriff auf Geheimnisse für Apps, indem Sie entsprechende Berechtigungen erteilen:
-- 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;
Erstellen Sie für Container-Laufzeit-Apps SQL-Funktionen, um den Zugriff auf Geheimnisse zu packen, anstatt Geheimnisse in den App-Code einzubetten.
Weitere Informationen dazu finden Sie unter Verwalten von Geheimnissen und Konfigurieren der Streamlit-App.
Kontextfunktionen und Sicherheit auf Zeilenebene¶
Wenn Ihre Apps Kontextfunktionen verwenden (wie CURRENT_USER()) oder auf Tabellen mit Zeilenzugriffsrichtlinien zugreifen, erteilen Sie die globale Berechtigung READ SESSION für App-Eigentümerrollen:
USE ROLE ACCOUNTADMIN;
GRANT READ SESSION ON ACCOUNT TO ROLE streamlit_developer;
Bemerkung
Apps, die CURRENT_ROLE() in Zeilenzugriffsrichtlinien verwenden, geben immer die Rolle des Eigentümers oder der Eigentümerin der App zurück und nicht die Rolle des Betrachtenden, da Apps standardmäßig mit Eigentümerrechten ausgeführt werden.
Weitere Informationen und Beispiele dazu finden Sie unter Zeilenzugriffsrichtlinien in Streamlit in Snowflake.
Nur Container-Laufzeiten: Sicherheit des Paket-Repositorys¶
Konfigurieren Sie einen oder mehrere Paketindizes für Container-Laufzeiten.
Container-Laufzeiten können Pakete aus externen Repositorys wie PyPI installieren. Sie können Paketquellen mit kuratierten Paketindizes steuern, wie z. B. JFrog Artifactory, oder Sie verwenden den Standard-Paketindex PyPI. Unabhängig davon, welchen Paketindex Sie verwenden, müssen Sie eine Integration für den externen Zugriff (External Access Integration, EAI) erstellen, damit Ihre Apps Abhängigkeiten installieren können.
Die Verwendung eines kuratierten Paketindex bietet die folgenden Vorteile:
Dies trägt dazu bei, Angriffe in der Lieferkette zu verhindern und sicherzustellen, dass Pakete aus vertrauenswürdigen Quellen stammen.
Hiermit können Sie kontrollieren, welche Pakete und Versionen für Ihre Apps verfügbar sind.
Sie bietet Prüfpfade für Paketinstallationen.
Weitere Informationen dazu finden Sie unter Verwalten von Abhängigkeiten für Container Runtimes.
Nur Warehouse-Laufzeiten: Bedingungen für externe Angebote¶
Warehouse-Laufzeiten verwenden Conda, um die Abhängigkeiten Ihrer Anwendung zu verwalten. Wenn Sie Mapbox in Ihren Apps verwenden möchten, müssen Sie die Bedingungen für externe Angebote akzeptieren.
Weitere Informationen zur Verwendung dieses Pakets finden Sie unter Verwenden von Drittanbieterpaketen aus Anaconda.
Verfügbare Sicherheitsfeatures¶
Die folgenden Sicherheitsfeatures sind verfügbar, um die Sicherheit und Governance von Apps zu verbessern.
Integration für externen Zugriff¶
Steuern, auf welche externen Netzwerke und Dienste Ihre Apps zugreifen können:
Erstellen Sie Netzwerkregeln, um zulässige Endpunkte zu definieren.
Erstellen Sie Integrationen für den externen Zugriff, die auf Netzwerkregeln und Authentifizierungsgeheimnisse verweisen.
Weisen Sie Streamlit-Apps Integration für den externen Zugriff zu.
Dies verhindert, dass Apps unautorisiert ausgehende Verbindungen herstellen, und bietet Prüfpfade für den externen Zugriff.
Weitere Informationen dazu finden Sie unter Externer Zugriff auf das Netzwerk in Streamlit in Snowflake.
Git-Integration¶
Integrieren von Streamlit-Apps in Git-Repositorys für die Versionskontrolle und die Änderungsverfolgung:
Gewähren Sie entsprechende Berechtigungen für Git-Repository-Objekte (READ, WRITE oder OWNERSHIP).
Verwenden Sie die Git-Integration, um Prüfpfade für Code-Änderungen zu pflegen.
Implementieren Sie Code-Überprüfungsprozesse, bevor Sie Änderungen an Produktions-Apps bereitstellen.
Weitere Informationen dazu finden Sie unter Synchronisieren Sie Streamlit in Snowflake-Anwendungen mit einem Git-Repository.
Private Konnektivität¶
Für Organisationen mit strengen Anforderungen an die Netzwerksicherheit können Sie private Konnektivität konfigurieren, um sicherzustellen, dass der gesamte Streamlit-Datenverkehr in Ihrem privaten Netzwerk verbleibt. Streamlit in Snowflake unterstützt die folgenden privaten Konnektivitätsoptionen:
Private Konnektivität vermeidet die Gefährdung durch das öffentliche Internet und bietet eine zusätzliche Isolierung des Netzwerks.
Weitere Informationen dazu finden Sie unter Private connectivity for Streamlit in Snowflake.
Protokollierung und Ablaufverfolgung¶
Aktivieren Sie für Warehouse-Laufzeiten die Protokollierung und Ablaufverfolgung, um das Verhalten der App zu überwachen und Probleme zu beheben:
Erstellen Sie eine Ereignistabelle, und verknüpfen Sie sie mit Ihrem Konto.
Legen Sie geeignete Protokoll- und Ablaufverfolgungsstufen für Datenbanken fest, die Streamlit-Apps enthalten.
Überprüfen Sie die Protokolle regelmäßig auf Sicherheitsereignisse, Fehler und ungewöhnliches Verhalten.
Protokollierung und Ablaufverfolgung werden für Container-Laufzeiten noch nicht unterstützt.
Weitere Informationen dazu finden Sie unter Protokollierung und Ablaufverfolgung für Streamlit in Snowflake.
Best Practices für Administratoren¶
Die folgenden Best Practices helfen bei der Aufrechterhaltung einer sicheren Streamlit-Umgebung.
Dedizierte Rollen und Schemas verwenden:
Erstellen Sie separate Schemas für Entwicklungs-, Test- und Produktions-Apps.
Verwenden Sie für jede Umgebung unterschiedliche Rollen, um versehentliche Änderungen an Produktions-Apps zu vermeiden.
Gewähren Sie die Eigentümerschaft an der Produktions-App den Dienstrollen und nicht einzelnen Benutzerkonten.
Zugriff mit geringsten Berechtigungen implementieren:
Jeder Rolle werden nur die minimal erforderlichen Berechtigungen erteilt.
Überprüfen und auditieren Sie regelmäßig die Rollenmitgliedschaft und die Berechtigungen.
Vermeiden Sie das Gewähren von ACCOUNTADMIN oder andere Rollen mit umfangreichen Berechtigungen für App-Eigentümerrollen, sofern dies nicht unbedingt erforderlich ist.
Lebenszyklus einer App verwalten:
Richten Sie Prozesse für die Genehmigung und Bereitstellung von Apps ein.
Machen Sie Code-Überprüfungen erforderlich, bevor Apps in die Produktion aufgenommen werden.
Dokumentieren Sie, welche Apps auf vertrauliche Daten zugreifen und eine zusätzliche Prüfung erfordern.
Überprüfen und entfernen Sie regelmäßig nicht verwendete oder veraltete Apps.
Ressourcennutzung überwachen:
Legen Sie geeignete Warehouse-Größen für die Workloads der Apps fest.
Überwachen der Computekosten und Einrichten von Alerts für ungewöhnliche Nutzungsmuster.
Für Container-Laufzeiten konfigurieren Sie Computepools mit entsprechenden MIN_NODES- und MAX_NODES-Einstellungen.
Verwenden Sie separate Warehouses für verschiedene App-Umgebungen, um Kosten und Ressourcen zu isolieren.
Weitere Informationen zum Management von Ressourcen finden Sie unter Verwalten der Kosten für Streamlit in Snowflake und Laufzeitumgebungen für Streamlit-Apps.
Verwenden Sie sichere Praktiken bei der Entwicklung von Apps:
Betten Sie niemals Anmeldeinformationen oder API-Schlüssel direkt in den App-Code ein.
Verwenden Sie Snowflake-Geheimnisse zum Speichern vertraulicher Informationen.
Validieren und bereinigen Sie Benutzereingaben, um eine SQL-Injektion zu verhindern.
Beschränken Sie die über Apps bereitgestellten Daten auf das, was die Betrachtenden sehen müssen.
Testen Sie Apps gründlich, bevor Sie sie für ein größeres Publikum freigeben.
Weitere Informationen zu den Sicherheitserwägungen hinsichtlich Eigentümerrechte finden Sie unter Eigentümerrechte und App-Sicherheit.
Regelmäßige Sicherheitsüberprüfungen durchführen:
Überprüfen Sie, welche Rollen CREATE STREAMLIT-Berechtigungen haben.
Überwachen Sie, welche Apps auf welche Datenquellen zugreifen.
Überprüfen Sie die Integrationen für den externen Zugriff und die Regeln für das Netzwerk.
Prüfen Sie, ob Apps im Besitz früherer Mitarbeiter oder inaktiver Konten sind.
Überprüfen Sie den Zugriff auf das Git-Repository und den Commit-Verlauf.
Verwenden Sie die folgenden Abfragen, um Ihre Streamlit-Apps zu überprüfen:
-- 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;