1. Klassifizieren, was die Berechnung beschreibt und was einen Zugang gewährt
Beginnen Sie mit den Informationen, die Ihr Programm tatsächlich verbraucht. Die Batch-Größe, der Modellname und der Verarbeitungsmodus beschreiben eine Erfahrung. Ein Token, das einen Download autorisiert, oder ein Schlüssel, der einen Speicher öffnet, gewähren einen Zugang. Die erste Gruppe muss erklärbar sein; die zweite sollte nur dort verfügbar bleiben, wo sie benötigt wird.
Die Grenze lässt sich nicht auf Variablennamen reduzieren. Ein Pfad kann einen Kunden verraten, eine URL kann eine Kennung enthalten, und eine kleine Datenstichprobe kann vertraulich sein. Bewerten Sie daher auch den Inhalt der teilbaren Parameter. Die Konfiguration zu veröffentlichen und alle ihre absoluten Pfade zu veröffentlichen sind nicht dieselbe Entscheidung.
Die Tabelle bietet eine Arbeitsgliederung. Sie beschreibt nicht die auf einer Kernodeck-Maschine installierten Dienste. Legen Sie für Ihr Projekt fest, wer jedes Element lesen darf, zu welchem Zeitpunkt und in welcher Kopie; überlassen Sie diese Entscheidung nicht dem letzten Export eines Notebooks.
Scrollen Sie durch die Tabelle, um alle Spalten zu lesen.| Element | Rolle | Vorgeschlagene Behandlung |
|---|---|---|
| Batch-Größe, Modus, Schwellenwert | Berechnungsparameter | Ihre Werte versionieren und validieren. |
| Token, privater Schlüssel, Passwort | Zugangsmittel | Getrennt bereitstellen und nicht in die Ausgaben aufnehmen. |
| Pfad, URL, Korpus-Kennung | Potenziell sensibler Kontext | Vor dem Teilen prüfen; eine logische Kennung bevorzugen. |
| Ergebnisse und Protokolle | Ausführungsnachweise | Die aufbewahrten Felder auswählen und den übermittelten Ordner kontrollieren. |
2. Eine einzige Prioritätsregel wählen
Ein Parameter, der im Code, in einer Datei und in einer Startoption vorhanden ist, wird mehrdeutig, wenn niemand weiß, welcher gewinnt. Legen Sie eine einfache Regel fest, zum Beispiel: dokumentierte Standardwerte, dann Konfigurationsdatei, dann öffentliche Optionen des Befehls. Das ist ein Vertrag Ihrer Anwendung, keine universelle, von Python bereitgestellte Priorität.
Validieren Sie nach dieser Auflösung. Lehnen Sie einen unbekannten Schlüssel ab, damit ein Tippfehler wie batch_szie nicht stillschweigend durch einen Standardwert ersetzt wird. Unterscheiden Sie eine Ganzzahl, eine Zeichenkette, die eine Ganzzahl darstellt, und einen Boolean. Fügen Sie anschließend die nützlichen Einschränkungen hinzu: positiver Wert, zulässiger Modus, stimmige Parameterkombination.
Speichern Sie schließlich eine effektive Konfiguration, die auf die zulässigen Felder beschränkt ist. Sie erklärt, was das Programm verwendet hat, auch wenn eine Option die Datei ersetzt hat. Erstellen Sie dieses Dokument nicht, indem Sie das gesamte Konfigurationsobjekt serialisieren und erst danach einige bekannte Passwörter entfernen: Wählen Sie zuerst aus, was darin enthalten sein darf.
3. Ein Beispiel ohne Anbindung eines Dienstes bearbeiten
Das folgende Beispiel ist didaktisch und wird nicht ausgeführt. Es beschreibt einen fiktiven Vorgang zur Erzeugung von Vektoren mit einem Batch von acht Elementen. Das Wort embedding ist hier eine Schnittstellenentscheidung; es wird kein Modell geladen und es wird keine installierte GPU-Abhängigkeit vorausgesetzt. Zum Lesen oder Validieren dieser Datei ist kein Secret erforderlich.
Das Standardmodul tomllib, verfügbar ab Python 3.11, liest das TOML-Format. Es wandelt die Werte des Dokuments in Python-Objekte um; es entscheidet nicht, dass ein Batch von null in Ihrer Anwendung verboten ist. Die Bereichsprüfung bleibt nach dem Lesen explizit.
Dieser Auszug akzeptiert genau zwei Schlüssel und zwei Modi. Um ihn in einem Projekt zu verwenden, verbinden Sie anschließend die Argumente, die Fehlerbehandlung und die Ausgabepfade. Die erwarteten Ablehnungen sind leicht nachzuvollziehen: batch_size gleich null, batch_size als Zeichenkette oder Hinzufügen eines Schlüssels token. Das sind Fälle, die Sie bei sich prüfen sollten, keine hier gemessenen Ergebnisse.
batch_size = 8
mode = "embedding"import tomllib
with open("config.toml", "rb") as source:
config = tomllib.load(source)
if set(config) != {"batch_size", "mode"}:
raise ValueError("CONFIG_KEYS")
if type(config["batch_size"]) is not int or config["batch_size"] <= 0:
raise ValueError("CONFIG_BATCH_SIZE")
if config["mode"] not in ("embedding", "classification"):
raise ValueError("CONFIG_MODE")
public_config = {
"batch_size": config["batch_size"],
"mode": config["mode"],
}4. Das Secret nur an der Stelle bereitstellen, die es benötigt
Ein Schritt, der mit einer bereits vorhandenen Datei arbeitet, darf kein Download-Token verlangen. Fordern Sie das Secret an der Grenze an, an der der Zugriff erforderlich wird. Ist dieser Schritt aktiviert, aber sein Zugriff fehlt, brechen Sie ihn mit einer Meldung ab, die den erwarteten Kanal angibt, ohne den empfangenen Wert anzuzeigen oder die gesamte Anfrage zu kopieren.
Der Kanal hängt von der verfügbaren Umgebung ab: Secret-Manager, Datei mit Zugangsdaten mit eingeschränktem Zugriff oder ein von Ihrer Organisation vorgesehener Injektionsmechanismus. Eine Umgebungsvariable kann als Schnittstelle dienen, bleibt aber eine für den Prozess zugängliche Information, die in Diagnosen auftauchen kann. Verwechseln Sie Bequemlichkeit der Injektion nicht mit vollständigem Schutz.
Beschränken Sie den Zugriff auf den nötigen Umfang und planen Sie dessen Ersetzung ein. Eine Anforderung zur Software-Bereitstellung garantiert nicht die Verfügbarkeit eines Secret-Managers. Prüfen Sie den tatsächlich verfügbaren Mechanismus, bevor Sie Ihren Start darauf aufbauen, und vermeiden Sie es dann, das Secret an Unterprozesse weiterzugeben, die es nicht benötigen.
5. Ein nützliches Journal entwerfen, ohne die Eingabe zu kopieren
Definieren Sie einige Ereignisse: akzeptierte Konfiguration, geprüfte Datei, abgeschlossene Partition, validierte Ausgabe. Ordnen Sie ihnen eine Ausführungs-ID, einen Schritt und einen Zähler zu. Ein Fehler CONFIG_BATCH_SIZE genügt, um die betreffende Regel zu finden; er muss nicht die vollständige Datei enthalten.
OWASP empfiehlt, insbesondere Passwörter, Zugriffstoken und Schlüssel aus Journalen auszuschließen. Wenden Sie diese Regel auch auf Ausnahmen, zum Debuggen angezeigte Objekte und Zellenausgaben an. Eine Maskierung, die erst am letzten Bildschirm angewandt wird, entfernt nicht, was bereits in eine Datei oder einen Screenshot geschrieben wurde.
Um einen Vorfall zu teilen, bereiten Sie eine kleine Auswahl vor: nützliche Versionen, zulässige Parameter, Fehler und ein synthetisches Beispiel, das das Problem reproduziert. Vermeiden Sie das automatische Archiv des gesamten Ordners. Prüfen Sie ebenso URLs, Header, Pfade und die Zeilen rund um den Fehler; eine scheinbar harmlose Meldung kann von sensiblen Daten umgeben sein.
6. Die Trennung prüfen, bevor Sie teilen
Bereiten Sie drei Tests vor: gültige Konfiguration ohne entfernten Schritt, ungültige Konfiguration und ein Schritt, der einen fehlenden Zugriff verlangt. Der erste muss bis zu seiner funktionalen Grenze ohne unnötiges Secret gelangen können; die beiden anderen müssen unterschiedliche Fehler liefern. Prüfen Sie außerdem, dass eine öffentliche Änderung der Batch-Größe in der effektiven Konfiguration erscheint.
Um Ihr Freigabeverfahren zu kontrollieren, verwenden Sie eine offensichtlich fiktive Sentinel-Zeichenkette ohne Zugriffsberechtigung. Lassen Sie sie bei einer isolierten Übung durch dieselbe Stelle laufen wie ein Secret, und suchen Sie sie dann in den Journalen, Exporten und ausgewählten Dateien. Ihr Fehlen ist eine begrenzte Kontrolle dieses Ablaufs, kein Beweis, dass alle Lecks unmöglich sind.
Fügen Sie die entsprechenden privaten Dateien zu Ihren Git-Ausschlüssen hinzu, prüfen Sie aber auch bereits verfolgte Dateien. Die Git-Dokumentation legt fest, dass sich gitignore auf nicht verfolgte Dateien bezieht; das Hinzufügen eines Musters entfernt kein bereits erfasstes Secret. Untersuchen Sie, was Sie übermitteln werden, nicht nur die Regeln, die es ausschließen sollen.
7. Auf eine Verbreitung reagieren und eine verwertbare Spur bewahren
Wurde ein Zugang offengelegt, verwenden Sie ihn nicht weiter und lassen Sie ihn beim ausstellenden System widerrufen oder ersetzen. Das Löschen einer Zeile aus der aktuellen Datei macht frühere Kopien nicht ungefährlich. Identifizieren Sie die betroffenen Stellen, um zu entfernen, was möglich ist, und den Umfang der Verbreitung zu verstehen.
Ihr reproduzierbares Dossier kann anschließend den Namen des verwendeten Kanals und die zulässigen Parameter bewahren, ohne das Secret selbst zu speichern. Ein künftiger Start wird im richtigen Moment einen gültigen Zugang anfordern. So erhalten Sie ein übertragbares Verfahren, ohne das Archiv des Experiments in einen Schlüsselbund für Zugänge zu verwandeln.
Diese Methode betrifft Ihre Anwendung und ihre Ergebnisse. Sie garantiert weder die Isolierung der gesamten Umgebung noch die Abwesenheit technischer Spuren anderswo. Um zur Ausführung überzugehen, verbinden Sie sie mit einer dokumentierten Umgebung, kontrollierten Daten und einer Nachverfolgung, die Fortschritt und validiertes Ergebnis unterscheidet.