

Bild vom Autor
# Einführung in das Bewahren von Geheimnissen
Das direkte Speichern vertraulicher Informationen wie API-Schlüssel, Datenbankkennwörter oder Token in Ihrem Python-Code ist gefährlich. Wenn diese Geheimnisse preisgegeben werden, können Angreifer in Ihre Systeme eindringen und Ihr Unternehmen kann einen Vertrauensverlust sowie finanzielle und rechtliche Konsequenzen erleiden. Stattdessen sollten Sie Geheimnisse externalisieren, damit sie nie im Code oder in der Versionskontrolle auftauchen. Eine gängige Finest Observe besteht darin, Geheimnisse in Umgebungsvariablen (außerhalb Ihres Codes) zu speichern. Auf diese Weise tauchen Geheimnisse nie in der Codebasis auf. Obwohl manuelle Umgebungsvariablen funktionieren, ist es für die lokale Entwicklung praktisch, alle Geheimnisse in einer einzigen .env-Datei zu speichern.
Dieser Artikel erklärt sieben praktische Techniken zum Verwalten von Geheimnissen in Python-Projektenmit Codebeispielen und Erläuterungen zu häufigen Fallstricken.
# Technik 1: Eine .env-Datei lokal verwenden (und sicher laden)
A .env Datei ist eine Textdatei von SCHLÜSSEL=Wert Paare, die Sie lokal aufbewahren (nicht in der Versionskontrolle). Sie können damit umgebungsspezifische Einstellungen und Geheimnisse für die Entwicklung definieren. Ein empfohlenes Projektlayout ist beispielsweise:
my_project/
app/
essential.py
settings.py
.env # NOT dedicated – incorporates actual secrets and techniques
.env.instance # dedicated – lists keys with out actual values
.gitignore
pyproject.toml
Ihre eigentlichen Geheimnisse gehen auf .env lokal, z.B.:
# .env (native solely, by no means commit)
OPENAI_API_KEY=your_real_key_here
DATABASE_URL=postgresql://person:go@localhost:5432/mydb
DEBUG=true
Im Gegensatz, .env.instance ist eine Vorlage, die Sie festschreiben, damit andere Entwickler sehen können, welche Schlüssel benötigt werden:
# .env.instance (commit this)
OPENAI_API_KEY=
DATABASE_URL=
DEBUG=false
Fügen Sie Muster hinzu, um diese Dateien in Git zu ignorieren:
Damit Ihre geheime .env-Datei nie versehentlich eingecheckt wird. In Python ist es üblich, die zu verwenden python-dotenv Bibliothek, die die laden wird .env Datei zur Laufzeit. Zum Beispiel in app/essential.py Du könntest schreiben:
# app/essential.py
import os
from dotenv import load_dotenv
load_dotenv() # reads variables from .env into os.environ
api_key = os.getenv("OPENAI_API_KEY")
if not api_key:
elevate RuntimeError("Lacking OPENAI_API_KEY. Set it in your setting or .env file.")
print("App began (key loaded).")
Hier, load_dotenv() automatisch findet .env im Arbeitsverzeichnis und legt jeden fest Schlüssel=Wert hinein os.environ (es sei denn, diese Variable ist bereits festgelegt). Dieser Ansatz vermeidet häufige Fehler wie das Festschreiben von .env oder das unsichere Teilen davon und bietet Ihnen gleichzeitig eine saubere, reproduzierbare Entwicklungsumgebung. Sie können zwischen Maschinen oder Entwickler-Setups wechseln, ohne den Code zu ändern, und lokale Geheimnisse bleiben sicher.
# Technik 2: Geheimnisse aus der Umwelt lesen
Einige Entwickler setzen Platzhalter wie API_KEY=“check“ in ihrem Code oder gehen davon aus, dass Variablen immer in der Entwicklung festgelegt werden. Dies kann auf ihrer Maschine funktionieren, in der Produktion jedoch scheitern. Wenn ein Geheimnis fehlt, könnte der Platzhalter ausgeführt werden und ein Sicherheitsrisiko darstellen. Rufen Sie stattdessen zur Laufzeit immer Geheimnisse aus Umgebungsvariablen ab. In Python können Sie verwenden os.environ oder os.getenv um die Werte sicher zu bekommen. Zum Beispiel:
def require_env(title: str) -> str:
worth = os.getenv(title)
if not worth:
elevate RuntimeError(f"Lacking required setting variable: {title}")
return worth
OPENAI_API_KEY = require_env("OPENAI_API_KEY")
Dadurch schlägt Ihre App beim Begin schnell fehl, wenn ein Geheimnis fehlt. Dies ist weitaus sicherer, als mit einem fehlenden oder Dummy-Wert fortzufahren.
# Technik 3: Konfiguration mit einem Einstellungsmodul validieren
Während die Projekte wachsen, zerstreuen sich viele os.getenv Anrufe werden chaotisch und fehleranfällig. Verwenden einer Einstellungsklasse wie Pydantics Basiseinstellungen Zentralisiert die Konfiguration, validiert Typen und lädt Werte aus .env und der Umgebung. Zum Beispiel:
# app/settings.py
from pydantic_settings import BaseSettings, SettingsConfigDict
from pydantic import Subject
class Settings(BaseSettings):
model_config = SettingsConfigDict(env_file=".env", additional="ignore")
openai_api_key: str = Subject(min_length=1)
database_url: str = Subject(min_length=1)
debug: bool = False
settings = Settings()
Dann in Ihrer App:
# app/essential.py
from app.settings import settings
if settings.debug:
print("Debug mode on")
api_key = settings.openai_api_key
Dies verhindert Fehler wie die falsche Eingabe von Schlüsseln, das falsche Sparen von Typen („false“ vs. False) oder das Duplizieren von Umgebungssuchen. Die Verwendung einer Einstellungsklasse stellt sicher, dass Ihre App schnell ausfällt, wenn Geheimnisse fehlen, und vermeidet „Funktioniert auf meinem Laptop“-Probleme.
# Technik 4: Verwendung von Plattform-/CI-Geheimnissen für Bereitstellungen
Wenn Sie die Bereitstellung in der Produktion durchführen, sollten Sie Ihre lokale Model nicht kopieren .env Datei. Nutzen Sie stattdessen die Secret-Verwaltung Ihrer Internet hosting-/CI-Plattform. Wenn Sie beispielsweise GitHub Actions für CI verwenden, können Sie Geheimnisse verschlüsselt in den Repository-Einstellungen speichern und sie dann in Workflows einfügen. Auf diese Weise fügt Ihr CI oder Ihre Cloud-Plattform die tatsächlichen Werte zur Laufzeit ein, und Sie sehen sie nie im Code oder in Protokollen.
# Technik 5: Docker
Vermeiden Sie es in Docker, Geheimnisse in Bilder zu backen oder einfaches ENV zu verwenden. Docker und Kubernetes bieten Secrets and techniques-Mechanismen, die sicherer sind als Umgebungsvariablen, die durch Prozesslisten oder Protokolle durchsickern können. Für lokale Entwickler funktioniert .env plus python-dotenv, aber in Produktionscontainern mounten Sie Geheimnisse oder verwenden Sie Docker-Geheimnisse. Vermeiden ENV API_KEY=… in Docker-Dateien oder Compose-Dateien mit Geheimnissen festschreiben. Dies verringert das Risiko, dass Geheimnisse dauerhaft in den Bildern preisgegeben werden, und vereinfacht die Rotation.
# Technik 6: Leitplanken hinzufügen
Menschen machen Fehler, additionally automatisieren Sie den Geheimschutz. Der GitHub-Push-Schutz kann Commits blockieren, die Geheimnisse enthalten, und Instruments zum Scannen von CI/CD-Geheimnissen wie TruffleHog oder Gitleaks erkennen durchgesickerte Anmeldeinformationen vor der Zusammenführung. Anfänger verlassen sich oft auf Speicher oder Geschwindigkeit, was zu versehentlichen Commits führt. Leitplanken verhindern Lecks, bevor sie in Ihr Repo gelangen, und machen die Arbeit mit .env- und Umgebungsvariablen während der Entwicklung und Bereitstellung wesentlich sicherer.
# Technik 7: Verwendung eines Actual Secrets and techniques Managers
Für größere Anwendungen ist es sinnvoll, einen geeigneten Secrets and techniques-Supervisor wie HashiCorp Vault, AWS Secrets and techniques Supervisor oder Azure Key Vault zu verwenden. Diese Instruments steuern, wer auf Geheimnisse zugreifen kann, protokollieren jeden Zugriff und rotieren Schlüssel automatisch. Ohne Passwörter verwenden Groups häufig Passwörter wieder oder vergessen, sie zu rotieren, was riskant ist. Ein Secrets and techniques Supervisor behält alles unter Kontrolle, vereinfacht die Rotation und schützt Ihre Produktionssysteme, selbst wenn es sich um den Laptop eines Entwicklers oder lokal handelt .env Datei wird angezeigt.
# Zusammenfassung
Um Geheimnisse zu schützen, geht es um mehr als das Befolgen von Regeln. Es geht darum, einen Workflow aufzubauen, der Ihre Projekte sicher, einfach zu warten und über verschiedene Umgebungen hinweg portierbar macht. Um Ihnen dies zu erleichtern, habe ich eine Checkliste zusammengestellt, die Sie in Ihren Python-Projekten verwenden können.
- .env ist drin .gitignore (Niemals echte Anmeldeinformationen angeben)
- .env.instance existiert und wird mit leeren Werten festgeschrieben
- Code liest Geheimnisse nur über Umgebungsvariablen (os.getenv, eine Einstellungsklasse usw.)
- Die App scheitert schnell mit einem eindeutigen Fehler, wenn ein erforderliches Geheimnis fehlt
- Sie verwenden verschiedene Geheimnisse für dev, staging und prod (niemals denselben Schlüssel wiederverwenden)
- Verwendung von CI und Bereitstellungen verschlüsselte Geheimnisse (GitHub Actions-Geheimnisse, AWS Parameter Retailer usw.)
- Push-Schutz und/oder geheimes Scannen sind in Ihren Repos aktiviert
- Du hast ein Rotationspolitik (Schlüssel sofort auswechseln, wenn sie auslaufen, andernfalls regelmäßig)
Kanwal Mehreen ist ein Ingenieur für maschinelles Lernen und ein technischer Redakteur mit einer großen Leidenschaft für Datenwissenschaft und die Schnittstelle zwischen KI und Medizin. Sie ist Mitautorin des E-Books „Maximizing Productiveness with ChatGPT“. Als Google Era Scholar 2022 für APAC setzt sie sich für Vielfalt und akademische Exzellenz ein. Sie ist außerdem als Teradata Range in Tech Scholar, Mitacs Globalink Analysis Scholar und Harvard WeCode Scholar anerkannt. Kanwal ist ein leidenschaftlicher Verfechter von Veränderungen und hat FEMCodes gegründet, um Frauen in MINT-Bereichen zu stärken.
