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.

Modell der gemeinsamen Verantwortung

Snowflake, Kontoadministratoren und App-Entwickler teilen sich die Verantwortung für die Sicherheit:

  • Snowflake bietet die sichere Plattform sowie Authentifizierungs-, Verschlüsselungs- und Sicherheitsfeatures.

  • Administratoren konfigurieren Sicherheitsrichtlinien auf Kontoebene, verwalten Rollen und Berechtigungen und überwachen die Nutzung der App.

  • App-Entwickler schreiben sicheren Code, gehen korrekt mit Geheimnissen um und befolgen bewährte Sicherheitsmethoden.

Weitere Informationen zum Sicherheitsmodell von Snowflake finden Sie unter Snowflake’s Shared Responsibility Model.

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.app zur 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;
Copy

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:

  1. 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;
    
    Copy
  2. 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;
Copy

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:

  1. Erstellen Sie eine Ereignistabelle, und verknüpfen Sie sie mit Ihrem Konto.

  2. Legen Sie geeignete Protokoll- und Ablaufverfolgungsstufen für Datenbanken fest, die Streamlit-Apps enthalten.

  3. Ü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;
Copy