? Mit dieser GitHub-Aktion können Sie KI-Inhalte für die Bedrohungsmodellierung und Sicherheitsüberprüfung generieren. Darunter wird xvnpw/ai-threat-modeling verwendet.
️ Dies ist ein experimentelles Projekt
Unterstützte Funktionen:
Besonderheit | Beschreibung |
---|---|
Hohe Sicherheits- und Datenschutzanforderungen | Die Maßnahmen werden eine Projektbeschreibung umfassen und LLM verwenden, um hohe Anforderungen an Sicherheit und Datenschutz zu generieren |
Bedrohungsmodell der Architektur | Die Aktion erfordert eine Architekturbeschreibung und verwendet LLM, um ein Bedrohungsmodell dafür zu generieren |
Sicherheitsakzeptanzkriterien für User Story | Die Aktion greift auf eine bestimmte User Story zurück und generiert sicherheitsrelevante Akzeptanzkriterien |
Überprüfung der Eingabedatei | Die Eingabedatei (z. B. Architekturbeschreibung) wird mit LLM überprüft |
Verwenden Sie die folgenden Versionen für bestimmte Modelle:
Modell | Version | Notiz |
---|---|---|
OpenAI GPT-3.5, Anthropic Claude 2 | v1.2.6.1 | |
OpenAI GPT-4 | Letzte | |
Claude 3 | Letzte |
Modell | Eingang | Ausgabe |
---|---|---|
OpenAI GPT-3.5 | PROJEKT.md | PROJECT_SECURITY.md oder als Pull-Request |
Anthropischer Claude 2 | PROJEKT.md | PROJECT_SECURITY.md oder als Pull-Request |
OpenAI GPT-4 | PROJEKT.md | PROJECT_SECURITY.md oder als Pull-Request |
Anthropischer Claude 3 Opus | PROJEKT.md | PROJECT_SECURITY.md oder als Pull-Request |
Modell | Eingang | Ausgabe |
---|---|---|
OpenAI GPT-3.5 | ARCHITEKTUR.md | ARCHITECTURE_SECURITY.md |
Anthropischer Claude 2 | ARCHITEKTUR.md | ARCHITECTURE_SECURITY.md |
OpenAI GPT-4 | ARCHITEKTUR.md | ARCHITECTURE_SECURITY.md |
Anthropischer Claude 3 Opus | ARCHITEKTUR.md | ARCHITECTURE_SECURITY.md |
Modell | Eingang | Ausgabe |
---|---|---|
OpenAI GPT-3.5 | 0001_STORE_DIET_INTRODUCTIONS.md oder Problem | 0001_STORE_DIET_INTRODUCTIONS_SECURITY.md oder als Problemkommentar |
Anthropischer Claude 2 | 0001_STORE_DIET_INTRODUCTIONS.md oder Problem | 0001_STORE_DIET_INTRODUCTIONS_SECURITY.md oder als Problemkommentar |
OpenAI GPT-4 | 0001_STORE_DIET_INTRODUCTIONS.md oder Problem | 0001_STORE_DIET_INTRODUCTIONS_SECURITY.md oder als Problemkommentar |
Anthropischer Claude 3 Opus | 0001_STORE_DIET_INTRODUCTIONS.md oder Problem | 0001_STORE_DIET_INTRODUCTIONS_SECURITY.md oder als Problemkommentar |
Modell | Eingang | Ausgabe |
---|---|---|
OpenAI GPT-4 | ARCHITEKTUR.md | ARCHITECTURE_REVIEW.md |
Anthropischer Claude 3 Opus | ARCHITEKTUR.md | ARCHITECTURE_REVIEW.md |
Fügen Sie Ihrem Workflow einen Schritt wie diesen hinzu:
- uses : xvnpw/[email protected] # You can change this to use a specific version.
with :
# Type of feature, one of: project, architecture, user-story
# Default: ''
# Required
type : ' project '
# Provider name, one of: openai, openrouter
# Default: 'openai'
provider : ' openai '
# Paths to input files formatted as json array
# Default: ''
input_files : ' ["PROJECT.md"] '
# Path to output file
# Default: ''
output_file : ' PROJECT_SECURITY.md '
# For USER STORY only! paths to architecture files formatted as json array
# Default: ''
input_architecture_files : ' ["ARCHITECTURE.md"] '
# For USER STORY only! path to architecture threat model
# Default: ''
input_architecture_threat_model_file : ' ARCHITECTURE_SECURITY.md '
# For USER STORY only! suffix that will be added to input file name to create output file
# Default: '_SECURITY'
user_story_output_suffix : ' _SECURITY '
# Type of OpenAI GPT model
# Default: gpt-4
# For openai models check: https://platform.openai.com/account/rate-limits
# For openrouter models check: https://openrouter.ai/docs#models
model : ' gpt-3.5-turbo-16k '
# Sampling temperature for a model
# Default: 0
temperature : ' 0.3 '
# Review input files using LLM
# Default: false
review : true
# Verbose log messages
# Default: false
verbose : true
# Debug log messages
# Default: false
debug : true
# Prompt templates directory
# Default: '/app/templates'
# By default action will use prompt templates build-in docker image. You can specify your own without forking action.
templates_dir : ' ./templates '
env :
# OpenAI API key
# Optional. Only if want to use openai provider
# Get a key from https://platform.openai.com/account/api-keys
# Add it to secrets in your repository settings
OPENAI_API_KEY : ${{ secrets.OPENAI_API_KEY }}
# Open Router API key
# Optional. Only if want to use openrouter provider
# Get a key from https://openrouter.ai/keys
# Add it to secrets in your repository settings
OPENROUTER_API_KEY : ${{ secrets.OPENROUTER_API_KEY }}
Unterstützt derzeit:
Die Aktion generiert output_file
basierend auf den Eingaben. Mit anderen Aktionen können Sie:
Wenn Ihre Eingabedateien recht groß sind, müssen Sie model
in ein Modell mit größerem Kontext ändern, z. B. gpt-3.5-turbo-16k
.
Wenn Sie Eingabedateien ändern, denken Sie daran, den Auslöser zu ändern:
on :
push :
branches :
- main
paths :
- ' project-desc-1.md '
- ' project-desc-2.md '
Beispiel (Pull-Requests-Ansatz):
on :
push :
branches :
- main
paths :
- ' PROJECT.md '
jobs :
project_ai_devsecops_job :
runs-on : ubuntu-latest
permissions :
# Give the default GITHUB_TOKEN write permission to commit and push the
# added or changed files to the repository. Also permission to create/update
# pull requests.
contents : write
pull-requests : write
name : Run ai threat modeling action for project analysis
steps :
- name : Checkout repo
uses : actions/checkout@v3
- name : Generate project security requirements
uses : xvnpw/[email protected]
with :
type : ' project '
input_files : ' ["PROJECT.md"] '
output_file : ' PROJECT_SECURITY.md '
temperature : 0
verbose : true
env :
OPENAI_API_KEY : ${{ secrets.OPENAI_API_KEY }}
# Will use peter-evans/create-pull-request to create or update pull request
- name : Create Pull Request
uses : peter-evans/create-pull-request@v5
with :
branch : create-pull-request/project
title : (AI Generated) High Level Security and Privacy Requirements
body : Automated pull request based on your changes to project. Please review it carefully.
labels : ' security, ai '
Einzelheiten zu Auslösern und Modellen finden Sie unter „Hohe Sicherheits- und Datenschutzanforderungen“.
Beispiel (direkter Push ins Repository):
on :
push :
branches :
- main
paths :
- ' ARCHITECTURE.md '
jobs :
architecture_ai_tm_job :
runs-on : ubuntu-latest
permissions :
# Give the default GITHUB_TOKEN write permission to commit and push the
# added or changed files to the repository.
contents : write
name : Will run ai threat modeling action for architecture analysis
steps :
- name : Checkout repo
uses : actions/checkout@v3
- name : Generate architecture threat model
uses : xvnpw/[email protected]
with :
type : ' architecture '
input_files : ' ["ARCHITECTURE.md"] '
output_file : ' ARCHITECTURE_SECURITY.md '
temperature : 0
verbose : true
env :
OPENAI_API_KEY : ${{ secrets.OPENAI_API_KEY }}
# Will use add-and-commit action to push output_file directly into repository
- name : Commit changes
uses : EndBug/add-and-commit@v9
with :
message : ' Project architecture threat model '
add : ' ARCHITECTURE_SECURITY.md '
Die nützlichste Verwendung ist bei Github-Problemen. Sie können aber auch eine Ausgabe basierend auf Änderungen an einem bestimmten Verzeichnis generieren (das habe ich bei der Recherche gemacht).
Für die User Stories-Funktion sind zwei neue Parameter erforderlich:
input_architecture_files
– JSON-Array von Pfaden der Eingabearchitekturdateien, z. B. ["arch-1.md","arch-2.md"]
input_architecture_threat_model_file
– Pfad zum Architektur-Bedrohungsmodell, z. B. ARCHITECTURE_SECURITY.md
und eine optionale:
user_story_output_suffix
– Suffix, das dem Namen der Eingabedatei hinzugefügt wird, um eine Ausgabedatei zu erstellen, z. B. _SECURITY
Im Falle einer User Story wird der Build bei Änderungen an einem bestimmten Verzeichnis ausgelöst. Zunächst muss ermittelt werden, welche Dateien geändert wurden, und diese einzeln verarbeitet werden.
Wie Sie sehen, verwenden wir den Parameter input_files
nicht. Diesmal beobachten wir das gesamte Verzeichnis auf Änderungen:
on :
push :
branches :
- main
paths :
- ' user-stories/*.md '
- ' !user-stories/*_SECURITY.md '
Für Ihre eigenen Verzeichnisse müssen Sie paths
anpassen. Das Gleiche gilt für das Festschreiben von Änderungen mit add: 'user-stories/'
.
Beispiel (direkter Push ins Repository):
on :
push :
branches :
- main
paths :
- ' user-stories/*.md '
- ' !user-stories/*_SECURITY.md '
jobs :
user_story_ai_tm_job :
runs-on : ubuntu-latest
permissions :
# Give the default GITHUB_TOKEN write permission to commit and push the
# added or changed files to the repository.
contents : write
name : Will run ai threat modeling action for user story analysis
steps :
- name : Checkout repo
uses : actions/checkout@v3
- name : Check which files were changed
id : files_check
uses : lots0logs/[email protected]
with :
token : ${{ secrets.GITHUB_TOKEN }}
- name : Printing
run : |
echo "${{ steps.files_check.outputs.all }}"
- name : Generate user story security acceptance criteria
uses : xvnpw/[email protected]
with :
type : ' user-story '
input_files : " ${{ steps.files_check.outputs.all }} "
input_architecture_files : ' ["ARCHITECTURE.md"] '
input_architecture_threat_model_file : " ARCHITECTURE_SECURITY.md "
user_story_output_suffix : " _SECURITY "
temperature : 0
verbose : true
model : " gpt-3.5-turbo-16k "
env :
OPENAI_API_KEY : ${{ secrets.OPENAI_API_KEY }}
- name : Commit changes
uses : EndBug/add-and-commit@v9
with :
message : ' User stories: security acceptance criteria '
add : ' user-stories/ '
In diesem Fall berücksichtigen wir nur Geschichten mit einer bestimmten Bezeichnung:
if : contains(github.event.issue.labels.*.name, 'ai-threat-modeling')
Kommentare werden mit den Aktionen peter-evans/find-comment und peter-evans/create-or-update-comment hinzugefügt (oder aktualisiert).
Beispiel (Kommentar zum Thema):
name : Run ai threat modeling action for user story in issue analysis
on :
issues :
types :
- labeled
- edited
jobs :
user_story_issue_ai_devsecops :
name : Run ai threat modeling action for user story in issue analysis
if : contains(github.event.issue.labels.*.name, 'ai-threat-modeling')
runs-on : ubuntu-latest
permissions :
issues : write
contents : write
steps :
- name : Checkout repo
uses : actions/checkout@v3
- uses : actions/github-script@v6
id : set-result
with :
result-encoding : string
retries : 3
script : |
const issue = await github.rest.issues.get({
issue_number: ${{ github.event.issue.number }},
owner: "${{ github.repository_owner }}",
repo: "${{ github.event.repository.name }}",
});
const body = issue.data.body;
const fs = require('fs');
fs.writeFile('${{ github.workspace }}/issue_body.md', body, (err) => {
if (err) throw err;
console.log('Data written to file');
});
return JSON.stringify(body);
- name : Generate user story security acceptance criteria
uses : xvnpw/[email protected]
with :
type : ' user-story '
input_files : ' ["issue_body.md"] '
input_architecture_files : ' ["ARCHITECTURE.md"] '
input_architecture_threat_model_file : " ARCHITECTURE_SECURITY.md "
temperature : 0
verbose : true
model : " gpt-3.5-turbo-16k "
env :
OPENAI_API_KEY : ${{ secrets.OPENAI_API_KEY }}
- name : Find Comment
uses : peter-evans/find-comment@v2
id : fc
with :
issue-number : ${{ github.event.issue.number }}
comment-author : ' github-actions[bot] '
body-includes : (AI Generated) Security Related Acceptance Criteria
- name : Add comment
uses : peter-evans/create-or-update-comment@v3
with :
comment-id : ${{ steps.fc.outputs.comment-id }}
issue-number : ${{ github.event.issue.number }}
body-path : ${{ github.workspace }}/issue_body_SECURITY.md
edit-mode : replace
Beispiel (direkter Push ins Repository):
on :
push :
branches :
- main
paths :
- ' ARCHITECTURE.md '
workflow_dispatch :
jobs :
architecture_ai_review_job :
runs-on : ubuntu-latest
permissions :
# Give the default GITHUB_TOKEN write permission to commit and push the
# added or changed files to the repository.
contents : write
name : Run ai threat modeling action for architecture review
steps :
- name : Checkout repo
uses : actions/checkout@v3
- name : Generate architecture review
uses : xvnpw/[email protected]
with :
type : ' architecture ' # will create threat model
input_files : ' ARCHITECTURE.md '
output_file : ' ARCHITECTURE_REVIEW.md '
review : true
temperature : 0.2
verbose : true
model : ' gpt-4 '
env :
OPENAI_API_KEY : ${{ secrets.OPENAI_API_KEY }}
- name : Commit changes
uses : EndBug/add-and-commit@v9
with :
message : ' Project architecture review '
add : ' ARCHITECTURE_REVIEW.md '
pull : ' --rebase --autostash '
Mit „Add & Commit“ können Sie output_file
einfach in das Repository übertragen:
- name : Commit changes
uses : EndBug/add-and-commit@v9
with :
message : ' Project architecture threat model '
add : ' ARCHITECTURE_SECURITY.md '
Wenn Sie die Ausgabedatei ändern, denken Sie daran, die Commit-Datei zu ändern:
- name : Commit changes
uses : EndBug/add-and-commit@v9
with :
message : ' Project security requirements '
add : ' project-sec-reqs.md '
Mit „Pull-Request erstellen“ können Sie einen neuen Pull-Request mit output_file
erstellen:
- name : Create Pull Request
uses : peter-evans/create-pull-request@v5
with :
branch : create-pull-request/project
title : (AI Generated) High Level Security and Privacy Requirements
body : Automated pull request based on your changes to project. Please review it carefully.
labels : ' security, ai '
In diesem Modus müssen Sie auch die Berechtigungen für den Workflow anpassen:
permissions :
# Give the default GITHUB_TOKEN write permission to commit and push the
# added or changed files to the repository.
# It has also permission to pull requests
contents : write
pull-requests : write
Ändern Sie auch die Einstellungen für Aktionen.
Möglicherweise möchten Sie die Eingabeaufforderungen optimieren. Dazu müssen Sie die Aktion nicht forken, sondern müssen ein Vorlagenverzeichnis in Ihrem Ziel-Repository bereitstellen:
cd $HOME / < projects > # your directory with repositories
git clone [email protected]:xvnpw/ai-threat-modeling-action.git
cp -r ai-threat-modeling-action/templates < target-repo > /
cd < target-repo > /templates
# edit templates
Fügen Sie in der Workflow-Datei Folgendes hinzu:
uses : xvnpw/[email protected]
with :
...
templates_dir : ' ./templates '
./templates
– ist ein Verzeichnis relativ zum Stammverzeichnis
.
Dieses Projekt begann mit der Erforschung der Fähigkeiten von LLMs, verbesserte sich jedoch im Laufe der Zeit über den einfachen PoC hinaus. Mit Version 1 können damit Dokumente in GitHub per Direct Push, PR oder Issues überprüft werden. Weiterentwicklung oder Korrekturen können nicht garantiert werden. Wenn Sie vorhaben, es in Ihrem Unternehmen zu verwenden, teilen Sie es am besten auf und passen Sie es an Ihre Bedürfnisse an.
Forken Sie dieses Projekt. Dateien bearbeiten und Aktion freigeben:
git add .
git commit -m "My first action is ready"
git tag -a -m "My first action release" v1
git push --follow-tags
Dieses Projekt verwendet die OpenAI-API. Standardmäßig werden Ihre Daten gemäß den API-Datennutzungsrichtlinien nicht zum Lernen verwendet:
OpenAI wird die von Kunden über unsere API übermittelten Daten nicht zum Trainieren oder Verbessern unserer Modelle verwenden, es sei denn, Sie entscheiden sich ausdrücklich dafür, Ihre Daten zu diesem Zweck mit uns zu teilen. Sie können der Weitergabe von Daten zustimmen.
OpenRouter beschreibt Datenschutz und Filterung in den Einstellungen für jedes Modell.