
Ein Befehl bewertet Ihr gesamtes Cloud-Konto — Fehlkonfigurationen, fehlende Beobachtbarkeit und Sicherheitslage.
Ein Befehl bewertet Ihr gesamtes Cloud-Konto – Fehlkonfigurationen, fehlende Beobachtbarkeit und Sicherheitslage, geordnet nach den fünf Dingen, die zuerst behoben werden sollten.
Richten Sie es an AWS, Cloudflare, Vercel, Supabase, Render, Fly.io oder Railway und es liefert eine Bewertung, was kaputt ist und einen Fix für jedes Problem – in sich geschlossen genug, um es direkt an einen Agenten zu übergeben.
npx cloud-doctor
https://github.com/user-attachments/assets/60b610ab-7aee-4c3a-8d9e-83f045c8cc56
Das wählt einen Anbieter aus, ermittelt Ihre Identität (AWS-Profil, API-Token, …) und führt den Scan interaktiv durch. Um direkt zu einem Anbieter zu springen:
npx cloud-doctor aws --profile prod
npx cloud-doctor cloudflare --yes
npx cloud-doctor vercel --yes
Wenn in der ~/.npmrc min-release-age gesetzt ist (Lieferkettenhärtung) und frische Releases blockiert:
# =<Zahl>, 0 als Beispiel gewählt
npm x --min-release-age=0 cloud-doctor -- aws profiles
Liebäugeln Sie mit der neuesten Version? Alpha-Builds werden unter einem eigenen Tag veröffentlicht: npx cloud-doctor@alpha.
Authentifizierungstokens können als Umgebungsvariablen gesetzt werden oder Sie geben sie ein, wenn die TUI danach fragt:
CLOUDFLARE_API_TOKEN=cfut_aHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1kUXc0dzlXZ1hjUQ== npx cloud-doctor cloudflare
(Das Token nicht base64-dekodieren)
oder
$ npx cloud-doctor cloudflare
Cloudflare-Anmeldedaten sind nicht gesetzt – geben Sie sie unten ein.
Nur für diese Ausführung gespeichert, nie auf die Festplatte geschrieben. Überspringen Sie diese Eingabeaufforderungen: export CLOUDFLARE_API_TOKEN
Dashboard → Mein Profil → API-Tokens
? Cloudflare schreibgeschützter API-Token › <Eingabe>
Demnächst: Google Cloud, Kubernetes und Datenbanken (Postgres, MySQL, Redis) – siehe Was kommt als Nächstes.
npx cloud-doctor # Anbieter wählen (Standard AWS) → Identität wählen → scannen
npx cloud-doctor aws # AWS-Schnellpfad
npx cloud-doctor aws --profile prod # Nicht-interaktiv, wenn eindeutig
npx cloud-doctor aws --yes --json # CI, maschinenlesbare Ausgabe
npx cloud-doctor aws --yes --json --fail-under 75 # CI-Schwelle für die Bewertung
npx cloud-doctor cloudflare --yes # benötigt CLOUDFLARE_API_TOKEN
npx cloud-doctor vercel --yes # benötigt VERCEL_TOKEN (+ VERCEL_TEAM_ID)
npx cloud-doctor supabase --yes # benötigt SUPABASE_ACCESS_TOKEN
npx cloud-doctor render --yes # benötigt RENDER_API_KEY
npx cloud-doctor fly --yes # benötigt FLY_API_TOKEN (+ FLY_ORG)
npx cloud-doctor railway --yes # benötigt RAILWAY_API_TOKEN
npx cloud-doctor aws profiles # Profile in ~/.aws/config auflisten
npx cloud-doctor aws whoami # aufgelöste AWS-Identität anzeigen
--yes überspringt Eingabeaufforderungen (CI-sicher); --json gibt einen stabilen, schema-versionierten Bericht statt der Terminalansicht aus; --verbose gibt jeden Befund aus statt der Top-Verstöße. --no-color deaktiviert farbige Ausgabe.
Bewertungen werden nie vorgetäuscht: Wenn null Regeln ausgeführt werden konnten, ist die Bewertung null mit der Bezeichnung „Keine Prüfungen durchgeführt“, niemals eine hohle 100.
Regeln pro Anbieter über doctor.config.ts (oder doctor.config.json oder cloudDoctor in package.json) anpassen:
import { defineConfig } from "cloud-doctor/api";
export default defineConfig({
defaultProvider: "aws",
aws: {
profile: "prod",
regions: ["us-east-1", "eu-west-1"],
account: "123456789012",
},
rules: {
"aws/s3-unencrypted-bucket": "off",
"aws/iam-user-access-key": "error",
},
});
"off" deaktiviert eine Regel; "error" / "warning" überschreibt ihren Schweregrad. Deaktivierte Regeln werden von der Bewertung ausgeschlossen und als stummgeschaltet offengelegt – niemals stillschweigend subtrahiert.
Ein schlankes CLI über einem Plugin-Register – jeder Anbieter implementiert denselben Vertrag, sodass das CLI keinen über den anderen stellt.
Jeder Anbieter implementiert CloudDoctorPlugin:
discoverIdentities() – Profile/Projekte/Konten für die Auswahl auflistenresolveIdentity() – Flags/Umgebungsvariablen/Konfiguration → Identität abbilden, keine NetzwerkaufrufevalidateIdentity() – nachweisen, dass die Anmeldedaten funktionieren (sts:GetCallerIdentity oder Äquivalent)scan() – die bewerteten Regeln ausführen, Diagnose + Bewertung zurückgebenNeue Anbieter werden in packages/plugins/src/index.ts registriert.
gcloud, k8s und db kommen bald.
pnpm install
pnpm build
pnpm typecheck
pnpm test
Für praktische Regelüberprüfung ohne Zugriff auf ein echtes Cloud-Konto enthält das Repository eine http-mock- und Moto/fab-Fixture-Umgebung: (ps: fab, das CLI zum Generieren einer Umgebung für Tests, ist derzeit privat; das abhängige Projekt wird ebenfalls Open Source)
pnpm mock:up <Szenario> # eine persistente Mock-Instanz starten
eval "$(pnpm -s mock:env <Szenario>)" # Umgebungsvariablen darauf ausrichten
pnpm mock:run <Szenario> # das CLI dagegen ausführen
Ein großes Dankeschön an react-doctor
| Anbieter | Befehl | Authentifizierung |
|---|
| AWS | cloud-doctor aws | AWS SDK Credential Chain – --profile, AWS_PROFILE, Umgebungsvariablen, SSO, Web Identity |
| Cloudflare | cloud-doctor cloudflare | CLOUDFLARE_API_TOKEN |
| Vercel | cloud-doctor vercel | VERCEL_TOKEN (+ optional VERCEL_TEAM_ID) |
| Supabase | cloud-doctor supabase | SUPABASE_ACCESS_TOKEN |
| Render | cloud-doctor render | RENDER_API_KEY |
| Fly.io | cloud-doctor fly | FLY_API_TOKEN (+ optional FLY_ORG) |
| Railway | cloud-doctor railway | RAILWAY_API_TOKEN (Workspace/Konto-Token) |
| Paket | Rolle |
|---|
packages/cloud-doctor | CLI (commander, prompts, ora) + programmatische diagnose()-API |
packages/core | Plugin-Register, Bewertung, Konfigurationsladen, gemeinsame Typen |
packages/plugin-* | Ein Paket pro Anbieter – Identitätsermittlung + Regeln |
packages/plugins | Standardregister, das alle Anbieter miteinander verbindet |