Verwalten von Geheimnissen und Konfigurieren der Streamlit-App¶
Streamlit-Apps müssen oft auf sensible Informationen zugreifen, wie z. B. API-Schlüssel, Kennwörter und andere Anmeldeinformationen. Wie Sie Geheimnisse in Ihrer Streamlit-App verwalten, hängt von der verwendeten Laufzeitumgebung ab. Streamlit in Snowflake bietet sichere, integrierte Mechanismen für den Zugriff auf Geheimnisse sowohl zur Laufzeit von Warehouses als auch von Containern. Auch bei der Streamlit-Konfiguration gelten für jede Laufzeitumgebung unterschiedliche Einschränkungen.
In der Streamlit-Bibliothek verwenden Apps das Verzeichnis .streamlit/, um Konfiguration und Geheimnisse zu speichern:
.streamlit/config.toml: Passt die Einstellungen der Anwendung wie Thema, Layout und Serververhalten an..streamlit/secrets.toml: Speichert sensible Informationen wie API-Schlüssel und Anmeldeinformationen (in lokaler Entwicklung).
Streamlit in Snowflake unterstützt diese Dateien mit einigen Einschränkungen, abhängig von Ihrer Laufzeitumgebung. Die folgende Tabelle fasst die Unterstützung für diese Dateien in den Laufzeiten von Warehouses und Containern zusammen:
Feature |
Warehouse-Laufzeit |
Container Runtime |
|---|---|---|
|
Begrenzte Teilmenge der Konfigurationsoptionen |
Größere Teilmenge der Konfigurationsoptionen |
|
Nicht unterstützt |
Unterstützt, aber nur für nicht geheime Umgebungsvariablen empfohlen |
Für secrets.toml bietet Streamlit in Snowflake ein sichereres, integriertes System zur Verwaltung von Geheimnissen, das für die Verwaltung sensibler Informationen empfohlen wird. In den folgenden Abschnitten wird beschrieben, wie Sie Snowflake-Geheimnisse in Ihren Apps verwenden können.
Verwalten der Verbindung zu Snowflake¶
Um Ihre Verbindung zu Snowflake zu verwalten, können Sie st.connection("snowflake") verwenden. So können Sie sowohl von Ihrer lokalen Entwicklungsumgebung als auch von Ihrer bereitgestellten App aus eine Verbindung zu Snowflake herstellen.
In Warehouse-Laufzeiten können Sie auch die Funktion get_active_session() von Snowpark verwenden, um die aktive Sitzung abzurufen.
Wichtig
get_active_session() ist nicht Thread-sicher und kann nicht in Container Runtimes verwendet werden.
Geheimnisse in Container Runtimes¶
Sie können st.secrets verwenden, um sicher auf Snowflake-Geheimnisse in Ihren Container-Laufzeit-Streamlit in Snowflake-Apps zuzugreifen. Auf diese Weise können Sie sensible Informationen sicher speichern und abrufen, wie z. B. API-Schlüssel, Anmeldeinformationen und andere Konfigurationswerte. Genauso wie es Streamlit für .streamlit/secrets.toml in der lokalen Entwicklung macht, füllt Streamlit in Snowflake Geheimnisse auch mit Umgebungsvariablen.
Bemerkung
Container-Laufzeitumgebungen haben keinen Zugriff auf das _snowflake-Modul. Wenn Sie eine ältere Warehouse-Laufzeit-App migrieren, die _snowflake-Geheimnisfunktionen verwendet, ersetzen Sie diese Aufrufe durch st.secrets, wie in diesem Abschnitt beschrieben.
Zugriff auf ein Geheimnis in einer Container Runtime¶
Stellen Sie die folgende Python-Datei in
@my_stage/app_folder/streamlit_app.pybereit. Weitere Informationen zum Bereitstellen von Dateien finden Sie unter Bereitstellen von Dateien im Stagingbereich mit Snowsight.Erstellen Sie in Ihrem Snowflake-Konto ein Geheimnis:
Weitere Informationen dazu finden Sie unter CREATE SECRET.
Erstellen Sie eine Integration für den externen Zugriff (EAI), und weisen Sie ihr das Geheimnis zu:
Erstellen Sie Ihre Streamlit-App, um mithilfe des Parameters SECRETS auf das Geheimnis zu verweisen:
Bemerkung
Sie müssen sowohl die EAI als auch das Geheimnis dem Streamlit-Objekt zuweisen. Sie können einem Streamlit-Objekt selbst kein Geheimnis zuweisen.
Weil das Geheimnis der generischen Zeichenfolge
my_secretder Zeichenfolge"my_secret_name"im Parameter SECRETS zugeordnet ist, können Sie mithilfe vonst.secrets["my_secret_name"]auf das Geheimnis im Code Ihrer Streamlit-App zugreifen.
Unterstützte Geheimnistypen und Umgebungsvariablen¶
Container-Laufzeitumgebungen unterstützen Geheimnisse der generischen Zeichenfolge und der Basisauthentifizierung. Zusätzlich zur Zuordnung von Geheimnissen zu st.secrets, ordnet Streamlit in Snowflake auch Geheimnisse den Umgebungsvariablen zu. Bei den Namen von Umgebungsvariablen wird zwischen Groß- und Kleinschreibung unterschieden. Für Geheimnisse der Basisauthentifizierung werden zwei Umgebungsvariablen erstellt: eine für den Benutzernamen (_USERNAME-Suffix) und eine für das Kennwort (_PASSWORD-Suffix).
Typ des Geheimnisses |
Zugriff auf |
Zugriff auf Umgebungsvariablen |
|---|---|---|
Generische Zeichenfolge |
|
|
Basisauthentifizierung (Benutzername) |
|
|
Basisauthentifizierung (Kennwort) |
|
|
Bemerkung
Cloudanbieter, symmetrischer Schlüssel und OAuth-Geheimnistypen werden derzeit nicht unterstützt.
Geheimnisse der generischen Zeichenfolge¶
Geheimnisse der generischen Zeichenfolge werden als Schlüssel der obersten Ebene in st.secrets gespeichert:
Sie können auf das Geheimnis mit einer Wörterbuch- oder einer Attributnotation zugreifen:
Geheimnisse der Basisauthentifizierung¶
Geheimnisse der Basisauthentifizierung werden als dict-ähnliche Objekte mit den Attributen "username" und "password" gespeichert:
Sie können auf das Geheimnis mit einer Wörterbuch- oder einer Attributnotation zugreifen:
Geheimnisse für authentifizierte Paket-Repositorys¶
Geheimnisse werden automatisch als Umgebungsvariablen angezeigt. Insbesondere ermöglicht dies die Authentifizierung mit privaten Paket-Repositorys wie JFrog Artifactory.
Verwenden Sie für die meisten authentifizierten Paket-Repositorys ein Geheimnis der Basisauthentifizierung. Das Geheimnis wird mit den Suffixen _USERNAME und _PASSWORD automatisch in Umgebungsvariablen umgewandelt. Wenn Sie eine andere Namenskonvention benötigen, verwenden Sie Geheimnisse der generischen Zeichenfolge, und legen Sie den Namen jeder Umgebungsvariablen manuell fest. Weitere Informationen zu den Umgebungsvariablen, die von uv verwendet werden, finden Sie unter Paketindizes in der uv-Dokumentation.
Beispiel: Authentifizieren bei einem privaten JFrog Artifactory-Repository¶
Stellen Sie die Quelldateien Ihrer App in
@my_stage/app_folderbereit. Die Quelldateien Ihrer App müssen einepyproject.toml-Datei enthalten, die den privaten Paketindex in der Tabelle[[tool.uv.index]]konfiguriert:Weitere Informationen zum Deklarieren der Abhängigkeiten Ihrer App in einer
pyproject.toml-Datei finden Sie unter Verwalten von Abhängigkeiten für Ihre Streamlit-App.Erstellen Sie ein Geheimnis der Basisauthentifizierung mit Ihren JFrog-Anmeldeinformationen:
Erstellen Sie eine Integration für den externen Zugriff für Ihr privates Repository:
Bemerkung
Um einen DNS-Fehler zu vermeiden, müssen Sie möglicherweise den Cloudanbieter für Ihr Repository in die Werteliste der Netzwerkregel aufnehmen. Beispiel: Wenn sich Ihr Repository in AWS befindet, benötigen Sie möglicherweise die folgende Werteliste in Ihrer Netzwerkregel:
Verknüpfen Sie die EAI und das Geheimnis mit Ihrer Streamlit-App:
Weil das Geheimnis der Basisauthentifizierung
jfrog_credsder Zeichenfolge"UV_INDEX_MY_JFROG_REPO"im Parameter SECRETS zugeordnet ist, fügt die Laufzeitumgebung automatisch die UmgebungsvariablenUV_INDEX_MY_JFROG_REPO_USERNAMEundUV_INDEX_MY_JFROG_REPO_PASSWORDein, wie von uv gefordert.
Rangfolge einer lokalen .streamlit/secrets.toml-Datei¶
Sie können von Snowflake verwaltete Geheimnisse mit einer lokalen .streamlit/secrets.toml-Datei im Quellverzeichnis Ihrer App kombinieren. Wenn beide vorhanden sind, führt die Streamlit-Bibliothek sie zusammen. Die lokal definierte .streamlit/secrets.toml-Datei hat Vorrang vor den von Snowflake verwalteten Geheimnissen.
Da .streamlit/secrets.toml als einfacher Text in Ihren Stagingdateien gespeichert wird, ist es keine bewährte Sicherheitsmethode, die tatsächlichen Geheimnisse darin zu speichern. Verwenden Sie die in Snowflake integrierte Geheimnisverwaltung für sensible Anmeldeinformationen. Verwenden Sie die lokal definierte .streamlit/secrets.toml-Datei, um nicht-sensible Konfigurationswerte oder umgebungsspezifische Einstellungen zu speichern.
Geheimnisse aus Ihrer Streamlit-App entfernen oder ändern¶
Um alle Geheimnisse aus einer Streamlit in Snowflake-App zu entfernen, verwenden Sie die UNSET SECRETS-Klausel mit ALTER STREAMLIT:
Auf diese Weise werden alle Geheimniszuordnungen aus der Streamlit in Snowflake-App entfernt. Die zugrunde liegenden Geheimnisobjekte verbleiben in Ihrem Snowflake-Konto und können später neu zugewiesen werden. Um auch alle EAI-Zuordnungen zu entfernen, deaktivieren Sie ebenfalls die Eigenschaft EXTERNAL_ACCESS_INTEGRATIONS.
Um die damit verbundenen Geheimnisse zu aktualisieren oder zu ändern, verwenden Sie ALTER STREAMLIT mit SET SECRETS:
Beispiel: Erstellen einer Streamlit-App mit Container-Laufzeit mithilfe einer authentifizierten externen API¶
In diesem Beispiel wird das Erstellen einer Streamlit in Snowflake-App gezeigt, die eine externe API unter Verwendung eines geheimen API-Schlüssels aufruft.
Stellen Sie die folgende Python-Datei in
@my_stage/weather_app/streamlit_app.pybereit:Weil
requestseine Abhängigkeit vonstreamlitist, ist es im Laufzeit-Basisbild enthalten. Daher installiert die Laufzeitumgebung es automatisch, auch wenn Sie keine Datei mit Abhängigkeiten hinzufügen oder einen Paketindex konfigurieren.Erstellen Sie das Geheimnis, die Netzwerkregel und die EAI:
Erstellen Sie das Streamlit-Objekt:
Aufrufen eines Cortex Agent in einer Container Runtime¶
Um einen Cortex Agent in einer Container Runtime-App aufzurufen, lesen Sie das Sitzungstoken aus dem zugrunde liegenden Snowpark Container Services-Container und verwenden Sie dann die requests-Bibliothek. Dies ist der empfohlene Ersatz für _snowflake.send_snow_api_request().
Geheimnisse in Warehouse-Laufzeiten¶
In Warehouse-Laufzeiten können Sie das _snowflake-Modul verwenden, um direkt auf Geheimnisse im Code Ihrer Streamlit-App zuzugreifen. Warehouse-Laufzeiten erben Zugriff auf das _snowflake-Modul aus gespeicherten Prozeduren, mit dem Sie Geheimnisse abrufen können, die im Streamlit-Objekt referenziert werden.
So verwenden Sie Geheimnisse in einer Warehouse-Laufzeit:
Erstellen Sie in Snowflake ein Geheimnisobjekt. Weitere Informationen dazu finden Sie unter CREATE SECRET.
Erstellen Sie eine Integration für den externen Zugriff und weisen Sie ihr das Geheimnis zu.
Referenzieren Sie das Geheimnis in Ihrem Streamlit-Objekt mit demSECRETS-Parameter:
Sie müssen dem Streamlit-Objekt sowohl die Integration für den externen Zugriff als auch das Geheimnis zuweisen. Sie können einem Streamlit-Objekt selbst kein Geheimnis zuweisen.
Importieren Sie im Code Ihrer Streamlit-App das
_snowflake-Modul und rufen Sie das Geheimnis ab:
Weitere Informationen zum Zugriff auf Geheimnisse mit dem _snowflake-Modul finden Sie unter Python-API für Zugriff auf Geheimnisse.
Streamlit-Konfiguration¶
Streamlit-Apps können eine Konfigurationsdatei (.streamlit/config.toml) enthalten. Mit dieser Datei können Sie verschiedene Aspekte Ihrer App anpassen, wie z. B. das Thema, das Layout und das Verhalten. Die Konfigurationsdatei ist im TOML-Format geschrieben. Weitere Informationen zu den verfügbaren Konfigurationsoptionen finden Sie in der Streamlit-Dokumentation zu config.toml.
Die Unterstützung für die Konfigurationsoptionen variiert je nach Laufzeitumgebung. Container Runtimes bieten im Allgemeinen eine größere Unterstützung für Konfigurationsoptionen als Warehouse-Laufzeiten, insbesondere für die statische Bereitstellung. Die folgende Tabelle zeigt, welche Konfigurationsabschnitte für Laufzeiten von Warehouses und Containern unterstützt werden:
Konfigurationsabschnitt |
Warehouse-Laufzeit |
Container Runtime |
|---|---|---|
|
Nicht unterstützt |
Eingeschränkte Unterstützung ( |
|
Nicht unterstützt |
Nicht unterstützt |
|
Nicht unterstützt |
Eingeschränkte Unterstützung ( |
|
Nicht unterstützt |
Unterstützt |
|
Nicht unterstützt |
Nicht unterstützt |
|
Nicht unterstützt |
Nicht unterstützt |
|
Nicht unterstützt |
Unterstützt (veraltet, verwenden Sie stattdessen Umgebungsvariablen) |
|
Unterstützt |
Unterstützt |
|
Unterstützt |
Unterstützt |
|
Nicht unterstützt |
Unterstützt (aber nur für nicht geheime Umgebungsvariablen empfohlen) |
|
Unterstützt |
Nicht anwendbar |
Weitere Informationen zur Verwendung des Abschnitts [snowflake.sleep] zum Konfigurieren von Sleep-Timern in Warehouse-Laufzeiten finden Sie unter Benutzerdefinierter Sleep-Timer für eine Streamlit-App.
Die folgende Verzeichnisstruktur zeigt ein Beispiel für eine Streamlit-App mit einer Konfigurationsdatei: