
threatcl v0.6.5
Dokumentation Ihrer Bedrohungsmodelle mit HCL
threatcl
Bedrohungsmodellierung mit HCL
Was ist mit hcltm passiert?
hcltm wurde in threatcl umbenannt. Willkommen!
Überblick
[!TIP] Möchtest du die neue Dokumentation lesen? Gehe zu threatcl.dev
Es gibt viele verschiedene Möglichkeiten, ein Bedrohungsmodell zu dokumentieren. Von einer einfachen Textdatei über detailliertere Word-Dokumente bis hin zu vollständig instrumentierten Bedrohungsmodellen in einer zentralisierten Lösung. Zwei der wertvollsten Eigenschaften eines Bedrohungsmodells sind die klare Dokumentation der Bedrohungen und die Fähigkeit, wertvolle Veränderungen voranzutreiben.
threatcl zielt darauf ab, einen DevOps-orientierten Ansatz zur Dokumentation eines System-Bedrohungsmodells zu bieten, indem es sich auf die folgenden Ziele konzentriert:
- Einfaches Textdatei-Format
- Einfache, CLI-gesteuerte Benutzererfahrung
- Integration in Versionskontrollsysteme (VCS)
Dieses Repository beherbergt die threatcl CLI-Software. Die threatcl-Spezifikation basiert auf HCL2, der Konfigurationssprache von HashiCorp, die "für Menschen angenehm zu lesen und zu schreiben sein soll, sowie eine JSON-basierte Variante, die für Maschinen einfacher zu generieren und zu parsen ist". Die threatcl-Spezifikation befindet sich unter github.com/threatcl/spec. Die Kombination der threatcl CLI-Software und der threatcl-Spezifikation ermöglicht es Praktikern, ein System-Bedrohungsmodell in HCL zu definieren, zum Beispiel:```hcl
threatmodel "Tower of London" {
description = "A historic castle"
author = "@xntrik"
attributes { new_initiative = "true" internet_facing = "true" initiative_size = "Small" }
information_asset "crown jewels" { description = "including the imperial state crown" information_classification = "Confidential" }
usecase { description = "The Queen can fetch the crown" }
third_party_dependency "community watch" { description = "The community watch helps guard the premise" uptime_dependency = "degraded" }
threat "Crown theft" { description = "Someone who isn't the Queen steals the crown" impacts = ["Confidentiality"]
control "Guards" {
description = "Trained guards patrol tower"
risk_reduction = 75
}
}
data_flow_diagram_v2 "dfd name" { // ... see below for more information }
}
Siehe [Data Flow Diagram](#data-flow-diagram) für weitere Informationen zum Erstellen von Datenflussdiagrammen, die automatisch in PNGs konvertiert werden können.
Ein Beispiel, wie auf vordefinierte Steuerungsbibliotheken für die [OWASP Proactive Controls](https://owasp.org/www-project-proactive-controls/) und die [AWS Security Checklist](https://d1.awsstatic.com/whitepapers/Security/AWS_Security_Checklist.pdf) verwiesen wird, finden Sie in [examples/tm3.hcl](https://github.com/threatcl/threatcl/blob/HEAD/examples/tm3.hcl). Wir haben auch die [MITRE ATT&CK Controls](https://attack.mitre.org/mitigations/enterprise/) [hier](https://github.com/threatcl/threatcl/blob/HEAD/examples/MITRE_ATTACK_controls.hcl).
Sie können auch ein externes Bedrohungsmodell in Ihr eigenes einbinden, um auf all seine Informationen zuzugreifen und sie zu nutzen. Ein Beispiel finden Sie in [examples/including-example/corp-app.hcl](https://github.com/threatcl/threatcl/blob/HEAD/examples/including-example/corp-app.hcl).
Eine vollständige Beschreibung der Spezifikation finden Sie [hier](https://github.com/threatcl/threatcl/blob/HEAD/spec.hcl) oder führen Sie Folgendes aus:```bash
threatcl generate boilerplate
threatcl verarbeitet auch JSON-Dateien, aber der einzige Vorbehalt ist, dass Importmodule und Variablen nicht funktionieren. Sie können examples/tm1.json als Beispiel ansehen.
Warum HCL?
HCL ist die primäre Konfigurationssprache, die in den Produkten von HashiCorp verwendet wird, insbesondere Terraform – deren Open-Source-Infrastructure-as-Code-Software. Ich habe eine Zeit lang bei HashiCorp gearbeitet und die Sprache ist mir richtig ans Herz gewachsen. Außerdem: Wenn DevOps- und Software-Ingenieure die Sprache verwenden, dann vereinfacht die Dokumentation von Bedrohungsmodellen die Ziele von threatcl.
Sie können threatcl mit JSON verwenden, verlieren aber einige Funktionen. Weitere Informationen finden Sie im Ordner examples/.
Warum nicht einfach in MD dokumentieren?
Ich mochte die Idee, ein Format zu verwenden, mit dem programmatisch interagiert werden kann.
Anerkennungen und Referenzen
Eine der Funktionen von threatcl ist die automatische Generierung von Datenflussdiagrammen aus HCL-Dateien. Dies nutzt das go-dfd-Paket von Marqeta und Blake Hitchcock. Schauen Sie sich unbedingt ihren Blogbeitrag über Threat models at the speed of DevOps an.
Außerdem möchte ich Jamie Finnigan und Talha Tariq bei HashiCorp danken, dass sie mir erlaubt haben, an diesem Open-Source-Tool weiterzuarbeiten, auch nachdem ich bei HashiCorp aufgehört habe.
Auch danke an die IriusRisk-Leute für die OpenThreatModel-Spezifikation.
threatcl cli
Installation
Laden Sie die neueste Version von den Releases herunter und verschieben Sie die threatcl-Binärdatei in Ihren PATH.
Installation mit Homebrew
Installieren Sie threatcl mit Homebrew — die Formel lebt in homebrew-core:```bash
brew install threatcl
## Mit Docker ausführen```bash
docker run --rm -it ghcr.io/threatcl/threatcl:latest
Verifying releases (build provenance)
Every tagged release ships SLSA build provenance —
Sigstore-signed, keyless attestations generated by the GitHub Actions release
pipeline (GitHub OIDC → Fulcio, no signing keys). You can verify that a binary or
the container image was genuinely built from this repo's release workflow using
the GitHub CLI (gh attestation verify — no extra
tooling or trusted keys to manage).
Verify a downloaded archive (or the SHA256SUMS file):```bash
gh attestation verify threatcl_.tar.gz --repo threatcl/threatcl
Überprüfen Sie das Container-Image (der Tag wird automatisch zu seinem Digest aufgelöst):```bash
gh attestation verify oci://ghcr.io/threatcl/threatcl:<version> --repo threatcl/threatcl
Um auf das exakte Bild zu verweisen, das Sie ausführen, ermitteln Sie den Digest selbst und verifizieren (und ziehen) Sie ihn anhand des Digests:```bash digest=$(docker buildx imagetools inspect ghcr.io/threatcl/threatcl: --format '{{ .Manifest.Digest }}') gh attestation verify oci://ghcr.io/threatcl/threatcl@${digest} --repo threatcl/threatcl
Siehe [docs/SLSA.md](https://github.com/threatcl/threatcl/blob/HEAD/docs/SLSA.md) für die vollständige Lieferketten-Position.
## Ausführen mit GitHub Actions
`threatcl` kann direkt in Ihre GitHub-Repos integriert werden mit https://github.com/threatcl/threatcl-action. Dies ist eine der idealen Methoden, um Ihre Bedrohungsmodelle zu verwalten, und hilft, das Ziel der Integration in Ihre Versionskontrollsysteme zu erreichen.
## Erstellen aus dem Quellcode
1. Klonen Sie dieses Repository.
2. Wechseln Sie in das Verzeichnis `threatcl`
3. `make bootstrap`
4. `make build`
Für weitere Hilfe zum Beitragen zu `threatcl` siehe die [CHANGELOG.md](https://github.com/threatcl/threatcl/blob/HEAD/CHANGELOG.md).
## Verwendung
Für Hilfe zu Unterbefehlen verwenden Sie das Flag `-h`.```bash
$ threatcl
Usage: threatcl [--version] [--help] <command> [<args>]
Available commands are:
cloud Interact with ThreatCL Cloud services
dashboard Generate markdown files from existing HCL threatmodel file(s)
dfd Generate Data Flow Diagram PNG or DOT files from existing HCL threatmodel file(s)
export Export threat models into other formats
generate Generate an HCL Threat Model
list List Threatmodels found in HCL file(s)
mcp Model Context Protocol (MCP) server for threatcl
mermaid Output raw mermaid source from 'mermaid' blocks in existing HCL threatmodel file(s)
query Execute GraphQL queries against threat model data
server Start a GraphQL API server for threat models
terraform Parse output from 'terraform show -json'
validate Validate existing HCL Threatmodel file(s)
view View existing HCL Threatmodel file(s)
(Optional) Konfigurationsdatei
Die meisten threatcl-Befehle haben ein -config-Flag, mit dem Sie eine config.hcl-Datei angeben können. Mit HCL in dieser Datei können einige der Standardattribute von threatcl überschrieben werden. Diese sind unten aufgeführt:
- Initiative Sizes - standardmäßig "Undefined", "Small", "Medium", "Large"
- Default Initiative Size - standardmäßig "Undefined
- Information Classifications - standardmäßig "Restricted", "Confidential", "Public"
- Default Information Classification - standardmäßig "Confidential"
- Impact Types - standardmäßig "Confidentiality", "Integrity", "Availability"
- STRIDE Elements - standardmäßig "Spoofing", "Tampering", "Info Disclosure", "Denial Of Service", "Elevation Of Privilege"
- Uptime Dependency Classifications - standardmäßig "none", "degraded", "hard", "operational"
- Default Uptime Depency Classification - standardmäßig "none"
Zum Beispiel:```hcl initiative_sizes = ["S", "M", "L"] default_initiative_size = "M" info_classifications = ["1", "2"] default_info_classification = "1" impact_types = ["big", "small"] strides = ["S", "T"] uptime_dep_classifications = ["N", "D"] default_uptime_dep_classification = "N"
Wenn Sie diese Attribute ändern, müssen Sie daran denken, die Konfigurationsdatei für andere Vorgänge bereitzustellen, da dies die Validierung oder die Dashboard-Erstellung beeinträchtigen kann.
## Cloud-Befehle
Besuchen Sie https://threatcl.dev/cloud/overview/, um mehr über die Unterbefehle von `cloud` zu erfahren.
## Auflisten und Anzeigen
Die Befehle `threatcl list` und `threatcl view` können verwendet werden, um Daten aus HCL-Dateien der `threatcl`-Spezifikation aufzulisten und anzuzeigen.```bash
$ threatcl list examples/*
# File Threatmodel Author
1 examples/tm1.hcl Tower of London @xntrik
2 examples/tm1.hcl Fort Knox @xntrik
3 examples/tm2.hcl Modelly model @xntrik
Validieren
Der Befehl threatcl validate wird verwendet, um eine threatcl-Spec-HCL-Datei zu validieren.```bash
$ threatcl validate examples/*
Validated 3 threatmodels in 3 files
### Invariants
`threatcl validate` kann auch organisationsweite Invarianten durchsetzen – maschinell geprüfte Regeln wie „keine öffentlichen Endpunkte sollten ohne Authentifizierung sein“ oder „alle internetfähigen Funktionen müssen Audit-Logging dokumentieren“ – für jedes validierte Bedrohungsmodell:```bash
$ threatcl validate -invariants=invariants.hcl ./models/
Validated 4 threatmodels in 3 files
Invariant violation [error] 'threats_have_implemented_controls': threat 'Credential theft' in threatmodel 'Payments' (models/payments.hcl): Every threat must have at least one implemented control
Checked 3 invariants against 4 threatmodels: 1 errors, 0 warnings, 1 exemptions
Invarianten leben in ihrer eigenen HCL-Datei, zielen auf eine bestimmte Sammlung (Bedrohungen, Kontrollen, DFD-Prozesse, Flüsse, ...) und drücken ihre Bedingung als natives HCL-Ausdruck aus. Sie unterstützen die Schweregrade error/warning und ausnahmsweise Ausnahmen pro Modell mit Begründungen. Siehe docs/invariants.md.
Export
Der Befehl threatcl export wird verwendet, um ein threatcl-Bedrohungsmodell (oder mehrere Modelle) in die native JSON-Darstellung (standardmäßig) oder in die OTM-JSON-Darstellung oder sogar zurück in hcl zu exportieren (Was nützlich ist, um frisches HCL aus dynamischen Bedrohungsmodellen auszugeben). Sie können sie auch direkt mit dem Flag -output in eine Datei speichern.```bash
$ threatcl export -format=otm examples/tm1.hcl
[{"assets":[{"description":"including the imperial state crown","id":"crown-jewels","name":"crown jewels","risk":{"availability":0,"confidentiality":0,"integrity":0}}],"mitigations":[{"attributes":{"implementation_notes":"They are trained to be guards as well","implemented":true},"description":"Lots of guards patrol the area","id":"lots-of-guards","name":"Lots of Guards","riskReduction":80}],"otmVersion":"0.2.0","project":{"attributes":{"initiative_size":"Small","internet_facing":true,"network_segment":"dmz","new_initiative":true},"description":"A historic castle","id":"tower-of-london","name":"Tower of London","owner":"@xntrik"},"threats":[{"categories":["Confidentiality"],"description":"Someone who isn't the Queen steals the crown","id":"threat-1","name":"Threat 1","risk":{"impact":0,"likelihood":null}}]},{"assets":[{"description":"Lots of gold","id":"gold","name":"Gold","risk":{"availability":0,"confidentiality":0,"integrity":0}}],"mitigations":[{"attributes":{"implemented":true},"description":"A large wall surrounds the fort","id":"big-wall","name":"Big Wall","riskReduction":80}],"otmVersion":"0.2.0","project":{"attributes":{"initiative_size":"Small","internet_facing":true,"new_initiative":false},"description":"A .. fort?","id":"fort-knox","name":"Fort Knox","owner":"@xntrik"},"threats":[{"categories":["Confidentiality"],"description":"Someone steals the gold","id":"threat-1","name":"Threat 1","risk":{"impact":0,"likelihood":null}}]}]
## Generate
Der Befehl `threatcl generate` wird verwendet, um entweder eine generische `boilerplate`-Datei für die `threatcl`-Spezifikation im HCL-Format auszugeben oder interaktiv Fragen an den Benutzer zu stellen, um dann eine `threatcl`-Spezifikations-HCL-Datei auszugeben.
### Generate Interactive
Siehe folgendes Beispiel von:```bash
threatcl generate interactive
Interaktiven Editor generieren
Wenn Sie es vorziehen, direkt in Ihrem $EDITOR zu arbeiten, führen Sie Folgendes aus:```bash
threatcl generate interactive editor
Dies öffnet Ihren Editor mit einem rudimentären HCL-Bedrohungsmodell. Wenn Sie das Modell nach der Erstellung validieren möchten, verwenden Sie das Flag `-validate`.
## MCP
Der Befehl `threatcl mcp` startet einen lokalen [MCP](https://modelcontextprotocol.io/introduction)-Server, sodass Sie über einen MCP-Host mit threatcl-HCL-Dateien interagieren können, z. B. über KI/LLM-Anwendungen wie [Claude Desktop](https://claude.ai/download), [Cursor](https://www.cursor.com/) oder andere Anwendungen, die MCP unterstützen.
Der Befehl akzeptiert ein optionales Argument, `-dir=<Pfad>`, das zusätzlichen MCP-Tools ermöglicht, mit Dateien innerhalb dieses Pfades zu interagieren. Ohne diese Einstellung können die MCP-Tools mit Zeichenketten interagieren, verlassen sich jedoch auf andere Mechanismen innerhalb des MCP-Hosts, um mit dem zugrunde liegenden Dateisystem zu interagieren.
Es ist fair zu sagen, dass diese Funktionalität derzeit noch ziemlich experimentell ist.
## LSP (Language Server)
Der Befehl `threatcl lsp` startet einen [Language Server Protocol](https://microsoft.github.io/language-server-protocol/)-Server über stdio und bietet LSP-fähigen Editoren Live-Diagnosen, Vervollständigung, Hover-, Dokumentensymbole- und Formatierungsfunktionen für threatcl-HCL-Bedrohungsmodelle.
Er wird vom LSP-Client Ihres Editors gestartet und nicht von Hand ausgeführt. Da threatcl-Dateien die Erweiterung `.hcl` mit Terraform und anderen HCL-Dialekten teilen, vermeidet die Übereinstimmung mit `*.tm.hcl` (oder die Beschränkung des Clients auf Ihren Bedrohungsmodell-Arbeitsbereich) Konflikte mit einem Terraform-Sprachserver.
Siehe [docs/lsp.md](https://github.com/threatcl/threatcl/blob/HEAD/docs/lsp.md) für die Einrichtung in Editoren (Neovim, Helix, VS Code, Zed) und aktuelle Einschränkungen.
## Server (GraphQL-API)
Der Befehl `threatcl server` startet einen GraphQL-API-Server, der Ihre Bedrohungsmodelle über HTTP zur programmatischen Abfrage und Integration bereitstellt.
### Grundlegende Nutzung```bash
# Start the server
$ threatcl server -dir ./examples
# With file watching for auto-reload
$ threatcl server -dir ./examples -watch
# Custom port
$ threatcl server -dir ./examples -port 3000
Navigiere zu http://localhost:8080, um die interaktive GraphQL-Playground zu öffnen.
Beispielabfrage```graphql
query { stats { totalThreatModels totalThreats implementedControls }
threatModels(filter: { internetFacing: true }) { name threats { description controls { name implemented } } } }
### Dokumentation
Für die vollständige API-Dokumentation, das Schema-Referenz, erweiterte Abfragen und Integrationsbeispiele siehe:
- **Vollständige API-Dokumentation**: [docs/graphql-api.md](https://github.com/threatcl/threatcl/blob/HEAD/docs/graphql-api.md)
- **Abfragebeispiele**: [examples/graphql-queries.md](https://github.com/threatcl/threatcl/blob/HEAD/examples/graphql-queries.md)
## Abfrage (GraphQL CLI)
Der Befehl `threatcl query` führt GraphQL-Abfragen direkt von der Kommandozeile aus, ohne einen Server zu starten. Dies ist ideal für Automatisierung, CI/CD-Pipelines und Shell-Scripting.
### Grundlegende Verwendung```bash
# Get statistics
$ threatcl query -dir ./examples -query '{ stats { totalThreats } }'
# Query from file
$ threatcl query -dir ./examples -file queries/get-stats.graphql
# Use in scripts
$ THREATS=$(threatcl query -dir ./examples \
-query '{ stats { totalThreats } }' \
-output compact | jq -r '.data.stats.totalThreats')
$ echo "Found $THREATS threats"
Ausgabeformate
pretty(Standard): Formatiertes JSON mit Einrückungjson: Gleich wie prettycompact: Einzeiliges JSON für Skripting
Abfrage mit Variablen```bash
$ threatcl query -dir ./examples
-query 'query($author: String) { threatModels(filter: {author: $author}) { name } }'
-vars '{"author": "John Doe"}'
### CI/CD-Beispiel```bash
#!/bin/bash
# Check if all controls are implemented before deployment
UNIMPLEMENTED=$(threatcl query -dir ./threatmodels \
-query '{ stats { totalControls implementedControls } }' \
-output compact | jq -r '.data.stats.totalControls - .data.stats.implementedControls')
if [ "$UNIMPLEMENTED" -gt 0 ]; then
echo "ERROR: $UNIMPLEMENTED controls are not yet implemented"
exit 1
fi
echo "All controls implemented, proceeding with deployment"
Siehe docs/graphql-api.md für verfügbare Abfragen und das GraphQL-Schema.
Dashboard
Der Befehl threatcl dashboard nimmt threatcl-Spezifikations-HCL-Dateien entgegen und generiert eine Reihe von Markdown- und PNG-Dateien, die in einen ausgewählten Ordner abgelegt werden.```bash
$ threatcl dashboard -overwrite -outdir=dashboard-example examples/*
Created the 'dashboard-example' directory
Writing dashboard markdown files to 'dashboard-example' and overwriting existing files
Successfully wrote to 'dashboard-example/tm1-toweroflondon.md'
Successfully wrote to 'dashboard-example/tm1-fortknox.md'
Successfully wrote to 'dashboard-example/tm2-modellymodel.png'
Successfully wrote to 'dashboard-example/tm2-modellymodel.md'
Successfully wrote to 'dashboard-example/dashboard.md'
### Benutzerdefinierte Markdown-Vorlagen
Der Befehl `threatcl dashboard` kann auch optionale Flags verwenden, um benutzerdefinierte Vorlagen anzugeben (gemäß Golangs [text/template](https://pkg.go.dev/text/template)).
Um eine Dashboard-Vorlagendatei anzugeben, verwenden Sie das Flag `-dashboard-template`. Ein Beispiel finden Sie unter [dashboard-template.tpl](https://github.com/threatcl/threatcl/blob/HEAD/examples/dashboard-template.tpl).
Um eine Threatmodel-Vorlagendatei anzugeben, verwenden Sie das Flag `-threatmodel-template`. Ein Beispiel finden Sie unter [threatmodel-template.tpl](https://github.com/threatcl/threatcl/blob/HEAD/examples/threatmodel-template.tpl).
### Benutzerdefinierter Dateiname für die Dashboard-Indexdatei
Der Befehl `threatcl dashboard` kann auch ein optionales Flag verwenden, um einen Dateinamen für die generierte Dashboard-Indexdatei anzugeben. Standardmäßig ist diese Datei `dashboard.md`. Verwenden Sie das Flag `-dashboard-filename` ohne Erweiterung, um diesen Dateinamen zu ändern.
## Datenflussdiagramm
Gemäß der [Spezifikation](https://github.com/threatcl/threatcl/blob/HEAD/spec.hcl) kann ein `threatmodel` `data_flow_diagram_v2`-Blöcke enthalten. Ein Beispiel für ein einfaches DFD ist [hier](https://github.com/threatcl/threatcl/blob/HEAD/examples/tm2.hcl) verfügbar. Der alte, einmalig verwendbare Block `data_flow_diagram` wird irgendwann veraltet sein, daher ist es besser, benannte Blöcke von `data_flow_diagram_v2` zu verwenden, damit Sie mehrere zugehörige DFDs haben können.
Der Befehl `threatcl dfd` nimmt `threatcl`-Spezifikations-HCL-Dateien entgegen und generiert mehrere PNG-Dateien, die in einem ausgewählten Ordner abgelegt werden.
Wenn die HCL-Datei keinen `threatmodel`-Block mit einem `data_flow_diagram`- oder `data_flow_diagram_v2`-Block enthält, wird nichts ausgegeben.
Der Befehl selbst ist dem Dashboard-Befehl sehr ähnlich.```bash
$ threatcl dfd -overwrite -outdir testout examples/*
Successfully created 'testout/tm2-modellymodel.png'
Wenn Ihr threatmodel keinen diagram_link enthält, aber ein data_flow_diagram, dann wird dies ebenfalls gerendert, wenn Sie threatcl dashboard ausführen.
Mermaid
Gemäß der Spezifikation darf ein threatmodel auch frei formulierte mermaid-Blöcke enthalten. Im Gegensatz zu data_flow_diagram_v2 (das threatcl für Sie rendert) bettet ein mermaid-Block rohen mermaid-Quelltext wörtlich ein – mermaid leitet den Diagrammtyp (Sequenz, Zustand, Flussdiagramm usw.) aus der ersten Zeile des Inhalts ab.
Der Befehl threatcl mermaid extrahiert diesen rohen Quelltext, sodass er in andere Rendering-Werkzeuge weitergeleitet werden kann. Er rendert selbst keine Bilder.
Standardmäßig wird der Quelltext an STDOUT ausgegeben:```bash $ threatcl mermaid examples/tm2.hcl sequenceDiagram User->>App: credentials App->>Auth: verify Auth-->>App: token
Dies erleichtert die Weiterleitung an einen Renderer wie [mermaid-cli](https://github.com/mermaid-js/mermaid-cli):```bash
$ threatcl mermaid model.hcl | mmdc -o diagram.svg -i -
Falls es mehrere mermaid-Blöcke gibt, wählen Sie einen mit -index=n aus, oder schreiben Sie sie alle mit -outdir in ein Verzeichnis (eine .mmd-Datei pro Block). Sie können auch einen einzelnen Block mit -out in eine Datei schreiben.```bash
$ threatcl mermaid -outdir testout model.hcl
Successfully created 'testout/model-mymodelloginsequence.mmd'
## Terraform
Der Befehl `threatcl terraform` ist in der Lage, Datenressourcen aus der Ausgabe von `terraform show -json` [Dokumentation hier](https://www.terraform.io/docs/cli/commands/show.html) von Plan-Dateien oder aktiven Zustandsdateien zu extrahieren und diese in entworfene `information_asset`-Blöcke zur Aufnahme in `threatcl`-Dateien umzuwandeln.
Wenn Sie sich in einem Ordner mit vorhandenem Zustand befinden, können Sie Folgendes ausführen:```bash
terraform show -json | threatcl terraform -stdin
Dies wird etwas Ähnliches wie dies ausgeben:```bash information_asset "aws_rds_cluster default" { description = "cluster_identifier: aurora-cluster-demo, database_name: mydb" information_classification = "" source = "terraform state" } information_asset "aws_s3_bucket example" { description = "bucket: terraform-20211107232017071500000001" information_classification = "" source = "terraform state" }
Sie können auch eine ähnliche Ausgabe aus einer Plan-Datei sehen, die noch nicht mit Terraform angewendet wurde, indem Sie Folgendes ausführen:```bash
terraform show -json <plan-file> | threatcl terraform -stdin
Wenn Sie eine bestehende threatcl-Bedrohungsmodell-Datei ("threatmodel.hcl") aktualisieren möchten, können Sie dies mit:```bash
terraform show -json | threatcl terraform -stdin -add-to-existing=threatmodel.hcl > new-threatmodel.hcl
Mit dem `-add-to-existing`-Flag können Sie auch `-tm-name=<string>` angeben, wenn Sie ein bestimmtes Bedrohungsmodell aus der Quelldatei angeben müssen, falls mehrere vorhanden sind. Sie können auch eine Standardklassifizierung mit dem `-default-classification=Confidential`-Flag anwenden.
Diese Befehle können auch eine Datei als Eingabe akzeptieren, in diesem Fall lassen Sie das `-stdin`-Flag weg.
Die Terraform-Ressourcen, die `threatcl` kennt, sind in [pkg/terraform/terraform.go](https://github.com/threatcl/threatcl/blob/HEAD/pkg/terraform/terraform.go) fest codiert. Wenn Sie möchten, dass der Befehl `threatcl terraform` andere `information_asset`-Ressourcen ausgibt, die nicht dort enthalten sind, können Sie Ihre eigene Version dieser JSON-Datei über das `-tf-collection=<json file>`-Flag bereitstellen.