
Durchsuche Codebasen und GCP-Projekte nach offengelegten API-Anmeldedaten.
Durchsuche Codebasen, GCP-Projekte und CI-Pipelines nach offengelegten Google-API-Anmeldedaten – bevor sie ausgenutzt werden.
Das Problem: Google hat rückwirkend den Gemini-API-Zugriff auf bestehende API-Schlüssel (Maps, Places usw.) aktiviert, die für die öffentliche Nutzung und Einbettung in clientseitigen Code vorgesehen waren. Wenn jemand in Ihrem Team Gemini im selben GCP-Projekt aktiviert, werden diese ohnehin öffentlichen Schlüssel stillschweigend zu Gemini-Anmeldedaten – und setzen Ihr Projekt einem unbefugten KI-Einsatz und Abrechnungsvorfällen von 80.000+ Dollar aus (Kontext).
Was keyguard macht:
keyguard scan — findet Anmeldedaten-Zeichenfolgen in Quelldateien und Git-Verlauf mittels Regex + Entropie-Erkennungkeyguard audit — verbindet sich zu laufenden GCP-Projekten und kennzeichnet API-Schlüssel, die derzeit Gemini-Zugriff habenkeyguard ci — durchsucht GitHub Actions-, CircleCI- und GitLab-CI-Protokolle und Variablen nach durchgesickerten Anmeldedatenpip install keyguard-scan
Oder klonen und in Entwicklungsumgebung installieren:
git clone https://github.com/arzaan789/keyguard.git
cd keyguard
pip install -e ".[dev]"
# Aktuelles Verzeichnis und Git-Verlauf scannen
keyguard scan .
# Ihre laufenden GCP-Projekte prüfen
keyguard audit
# CI-Plattformen scannen
keyguard ci
keyguard scanDurchsucht Quelldateien und Git-Verlauf nach offengelegten Anmeldedaten mittels Regex + Shannon-Entropie-Filterung. Platzhalter mit niedriger Entropie wie "REPLACE_ME" oder "XXXXXXXX" werden automatisch ignoriert.
# Verzeichnis scannen (Dateien + vollständiger Git-Verlauf)
keyguard scan .
# Nur Dateien, Git-Verlauf überspringen
keyguard scan . --no-git-history
# In JSON und SARIF exportieren
keyguard scan . --output json --output sarif --out-file report
# Tatsächliche Schlüsselwerte anzeigen (nicht geschwärzt)
keyguard scan . --no-redact
# Benutzerdefinierte Konfigurationsdatei verwenden
keyguard scan . --config /path/to/.keyguard.toml
Exit-Codes: 0 = sauber, 1 = Funde, 2 = Fehler
keyguard auditVerbindet sich zu laufenden GCP-Projekten über die Cloud Resource Manager-, Service Usage- und API Keys-APIs. Kennzeichnet Schlüssel, die uneingeschränkt sind (stiller Gemini-Zugriff) oder die explizit generativelanguage.googleapis.com erlauben, während Gemini im Projekt aktiviert ist.
Die Authentifizierung verwendet standardmäßig Application Default Credentials – führen Sie zuerst gcloud auth application-default login aus.
# Alle zugänglichen GCP-Projekte prüfen
keyguard audit
# Bestimmte(s) Projekt(e) prüfen
keyguard audit --project mein-projekt-id --project ein-anderes-projekt
# Service-Account-Schlüsseldatei verwenden
keyguard audit --gcp-credentials /path/to/key.json
# JSON-Funde exportieren
keyguard audit --output json --out-file gcp-findings.json
Funde:
CRITICAL — Schlüssel hat keine API-Einschränkungen + Gemini ist aktiviert (das stille Maps→Gemini-Upgrade-Szenario)HIGH — Schlüssel erlaubt explizit generativelanguage.googleapis.com (beabsichtigt, aber möglicherweise in Client-Code eingebettet)keyguard ciDurchsucht CI-Plattform-Protokolle und gespeicherte Variablen nach offengelegten Anmeldedaten. Unterstützt GitHub Actions, CircleCI und GitLab CI.
# Alle konfigurierten Plattformen scannen
keyguard ci
# Nur eine Plattform scannen
keyguard ci --platform github
# Auf ein bestimmtes Repository eingrenzen
keyguard ci --repo meine-organisation/api-service
# JSON-Funde exportieren
keyguard ci --output json --out-file ci-findings.json
Was gescannt wird:
keyguard watchScannt Dateien bei jeder Änderung erneut. Nützlich während der Entwicklung.
keyguard watch .
keyguard rules listListet alle aktiven Erkennungsregeln auf.
keyguard rules list
keyguard config checkÜberprüft eine .keyguard.toml-Konfigurationsdatei.
keyguard config check
keyguard config check --config /path/to/.keyguard.toml
Erstellen Sie eine .keyguard.toml im Projekt-Stammverzeichnis:
[scan]
paths = ["."]
exclude = ["tests/fixtures/", "**/*.example"]
scan_git_history = true
[output]
format = ["terminal", "json"]
redact = true
[notify]
slack_webhook = "https://hooks.slack.com/services/..."
[rules]
disabled = []
# CI-Plattform-Authentifizierung und -Bereich
[ci]
github_token = "ghp_xxxxxxxxxxxxxxxxxxxx"
circleci_token = "CCIPAT_xxxxxxxxxxxxxxxx"
gitlab_token = "glpat-xxxxxxxxxxxxxxxxxxxx"
gitlab_url = "https://gitlab.com" # Überschreibung für selbst gehostetes GitLab
max_runs = 10 # Letzte Runs/Pipelines pro Repository
[ci.github]
orgs = ["meine-org"]
repos = ["meine-org/spezifisches-repo"] # optional: nur bestimmte Repositories scannen
[ci.circleci]
orgs = ["meine-org"]
[ci.gitlab]
groups = ["meine-gruppe"]
Keyguard verwendet einen Regex + Shannon-Entropie-Ansatz. Jede Regel definiert:
AIza[0-9A-Za-z\-_]{35} für Google-API-Schlüssel)Eingebaute Regeln erkennen:
| Regel-ID | Was wird gefunden |
|---|---|
google-api-key | Google-API-Schlüssel (AIza...) – einschließlich Maps-Schlüsseln, die stillschweigend Gemini-Zugriff erhalten haben |
gcp-service-account-key | GCP-Dienstkonto-RSA-Private-Keys |
google-oauth-client-secret | Google OAuth2-Client-Geheimnisse (GOCSPX-...) |
Sie können benutzerdefinierte Regeln in .keyguard.toml hinzufügen:
[[rules.extra]]
id = "mein-internes-token"
description = "Interner Dienst-Token"
pattern = "tok-[0-9a-f]{32}"
entropy_min = 3.5
severity = "high"
tags = ["internal"]
name: keyguard scan
on: [push, pull_request]
jobs:
scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # vollständiger Verlauf für Git-Scan
- run: pip install keyguard-scan
- run: keyguard scan .
# .pre-commit-config.yaml
repos:
- repo: local
hooks:
- id: keyguard
name: keyguard credential scan
entry: keyguard scan --no-git-history
language: system
pass_filenames: false
docker run --rm -v $(pwd):/repo ghcr.io/arzaan789/keyguard scan /repo
Terminal (Standard) — farbige Tabelle, gruppiert nach Schweregrad.
JSON — maschinenlesbares Funde-Array:
keyguard scan . --output json --out-file findings.json
SARIF — integriert sich in den GitHub-Sicherheitsreiter und andere SAST-Tools:
keyguard scan . --output sarif --out-file findings.sarif
Slack-Webhook — sendet eine Zusammenfassung, wenn Funde erkannt werden:
[notify]
slack_webhook = "https://hooks.slack.com/services/..."
git clone https://github.com/arzaan789/keyguard.git
cd keyguard
pip install -e ".[dev]"
pytest
143 Tests, 0 Fehler.
Projektstruktur:
keyguard/
scanner/ # Datei- + Git-Verlauf-Scanner
engine/ # Regex- + Entropie-Erkennung (Regeln, Matcher)
output/ # Terminal, JSON/SARIF, Webhook
auditor/ # GCP-API-Client + Audit-Logik
ci/ # GitHub Actions, CircleCI, GitLab CI-Scanner
cli.py # Click-CLI-Einstiegspunkt
config.py # .keyguard.toml-Lader
MIT