Zurück zu den Updates
New releaseAug 1, 2026

threatcl v0.6.5

Dokumentation Ihrer Bedrohungsmodelle mit HCL

Teilen

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ückung
  • json: Gleich wie pretty
  • compact: 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.

Kategorien