? Vous pouvez utiliser cette action GitHub pour générer du contenu présenté par l'IA pour la modélisation des menaces et l'examen de la sécurité. Il utilise xvnpw/ai-threat-modeling en dessous.
️ C'est un projet expérimental
Fonctionnalités prises en charge :
Fonctionnalité | Description |
---|---|
Exigences de haut niveau en matière de sécurité et de confidentialité | L'action prendra la description du projet et utilisera LLM pour générer des exigences de haut niveau en matière de sécurité et de confidentialité. |
Modèle d'architecture de menace | L'action nécessitera une description de l'architecture et utilisera LLM pour générer un modèle de menace pour celle-ci. |
Critères d'acceptation de sécurité pour la user story | L'action prendra en compte une user story particulière et générera des critères d'acceptation liés à la sécurité |
Examen du fichier d'entrée | L'action prendra le fichier d'entrée (par exemple, la description de l'architecture) et l'examinera à l'aide de LLM. |
Utilisez les versions ci-dessous pour des modèles spécifiques :
Modèle | Version | Note |
---|---|---|
OpenAI GPT-3.5, Anthropique Claude 2 | v1.2.6.1 | |
OpenAI GPT-4 | Dernier | |
Claude 3 | Dernier |
Modèle | Saisir | Sortir |
---|---|---|
OpenAI GPT-3.5 | PROJET.md | PROJECT_SECURITY.md ou sous forme de pull request |
Anthropique Claude 2 | PROJET.md | PROJECT_SECURITY.md ou sous forme de pull request |
OpenAI GPT-4 | PROJET.md | PROJECT_SECURITY.md ou sous forme de pull request |
Anthropique Claude 3 Opus | PROJET.md | PROJECT_SECURITY.md ou sous forme de pull request |
Modèle | Saisir | Sortir |
---|---|---|
OpenAI GPT-3.5 | ARCHITECTURE.md | ARCHITECTURE_SECURITY.md |
Anthropique Claude 2 | ARCHITECTURE.md | ARCHITECTURE_SECURITY.md |
OpenAI GPT-4 | ARCHITECTURE.md | ARCHITECTURE_SECURITY.md |
Anthropique Claude 3 Opus | ARCHITECTURE.md | ARCHITECTURE_SECURITY.md |
Modèle | Saisir | Sortir |
---|---|---|
OpenAI GPT-3.5 | 0001_STORE_DIET_INTRODUCTIONS.md ou numéro | 0001_STORE_DIET_INTRODUCTIONS_SECURITY.md ou comme commentaire de problème |
Anthropique Claude 2 | 0001_STORE_DIET_INTRODUCTIONS.md ou numéro | 0001_STORE_DIET_INTRODUCTIONS_SECURITY.md ou comme commentaire de problème |
OpenAI GPT-4 | 0001_STORE_DIET_INTRODUCTIONS.md ou numéro | 0001_STORE_DIET_INTRODUCTIONS_SECURITY.md ou comme commentaire de problème |
Anthropique Claude 3 Opus | 0001_STORE_DIET_INTRODUCTIONS.md ou numéro | 0001_STORE_DIET_INTRODUCTIONS_SECURITY.md ou comme commentaire de problème |
Modèle | Saisir | Sortir |
---|---|---|
OpenAI GPT-4 | ARCHITECTURE.md | ARCHITECTURE_REVIEW.md |
Anthropique Claude 3 Opus | ARCHITECTURE.md | ARCHITECTURE_REVIEW.md |
Ajoutez une étape comme celle-ci à votre flux de travail :
- 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 }}
Supporte actuellement :
L'action générera output_file
basé sur les entrées. En utilisant d'autres actions, vous pouvez :
Si vos fichiers d'entrée sont assez volumineux, vous devez changer model
pour un modèle avec un contexte plus large, par exemple gpt-3.5-turbo-16k
.
Si vous modifiez les fichiers d'entrée, pensez à modifier le déclencheur :
on :
push :
branches :
- main
paths :
- ' project-desc-1.md '
- ' project-desc-2.md '
Exemple (approche des demandes de tirage) :
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 '
Consultez les exigences de haut niveau en matière de sécurité et de confidentialité pour plus de détails sur les déclencheurs et les modèles.
Exemple (push direct dans le référentiel) :
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 '
L'utilisation la plus utile concerne les problèmes de github. Mais vous pouvez également générer une sortie basée sur les modifications apportées à un répertoire particulier (je l'ai fait lors de recherches).
La fonctionnalité User Stories nécessite deux nouveaux paramètres :
input_architecture_files
- tableau json de chemins des fichiers d'architecture d'entrée, par exemple ["arch-1.md","arch-2.md"]
input_architecture_threat_model_file
- chemin vers le modèle de menace d'architecture, par exemple ARCHITECTURE_SECURITY.md
et un facultatif :
user_story_output_suffix
- suffixe qui sera ajouté au nom du fichier d'entrée pour créer le fichier de sortie, par exemple _SECURITY
Dans le cas d'une user story, la construction est déclenchée lors des modifications apportées à un répertoire particulier. Tout d’abord, il doit déterminer quels fichiers ont été modifiés et les traiter individuellement.
Comme vous pouvez le voir, nous n'utilisons pas le paramètre input_files
. Cette fois, nous surveillons l'ensemble du répertoire pour détecter les changements :
on :
push :
branches :
- main
paths :
- ' user-stories/*.md '
- ' !user-stories/*_SECURITY.md '
Pour vos propres répertoires, vous devez ajuster la configuration paths
. Il en va de même pour la validation des modifications avec add: 'user-stories/'
.
Exemple (push direct dans le référentiel) :
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/ '
Dans ce cas, nous considérons uniquement les histoires portant une certaine étiquette :
if : contains(github.event.issue.labels.*.name, 'ai-threat-modeling')
Le commentaire est ajouté (ou mis à jour) à l'aide des actions peter-evans/find-comment et peter-evans/create-or-update-comment.
Exemple (commentaire sur le problème) :
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
Exemple (push direct dans le référentiel) :
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 '
Avec Add & Commit, vous pouvez facilement valider output_file
dans le référentiel :
- name : Commit changes
uses : EndBug/add-and-commit@v9
with :
message : ' Project architecture threat model '
add : ' ARCHITECTURE_SECURITY.md '
Si vous modifiez le fichier de sortie, n'oubliez pas de modifier le fichier de validation :
- name : Commit changes
uses : EndBug/add-and-commit@v9
with :
message : ' Project security requirements '
add : ' project-sec-reqs.md '
Avec Create Pull Request, vous pouvez créer une nouvelle pull request avec output_file
:
- 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 '
Dans ce mode, vous devez également ajuster les autorisations pour le workflow :
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
Modifiez également les paramètres des actions.
Vous souhaiterez peut-être régler les invites. Pour ce faire, vous n'avez pas besoin d'effectuer une action, mais de fournir un répertoire de modèles dans votre référentiel cible :
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
Dans le fichier de workflow, ajoutez :
uses : xvnpw/[email protected]
with :
...
templates_dir : ' ./templates '
./templates
- est le répertoire relatif à la racine
.
Ce projet a commencé comme une recherche sur les capacités des LLM, mais il s'est amélioré au fil du temps au-delà du simple PoC. Avec la version 1, il peut être utilisé pour réviser des documents dans github en utilisant direct push, pr ou issues. Les développements ultérieurs ou les correctifs ne sont pas garantis . Si vous envisagez de l'utiliser dans votre entreprise, il est préférable de l'adapter à vos besoins.
Forkez ce projet. Modifier les fichiers et libérer l'action :
git add .
git commit -m "My first action is ready"
git tag -a -m "My first action release" v1
git push --follow-tags
Ce projet utilise l'API OpenAI. Par défaut, vos données ne seront pas utilisées à des fins d'apprentissage, conformément aux politiques d'utilisation des données de l'API :
OpenAI n'utilisera pas les données soumises par les clients via notre API pour entraîner ou améliorer nos modèles, sauf si vous décidez explicitement de partager vos données avec nous à cette fin. Vous pouvez choisir de partager des données.
OpenRouter décrit la confidentialité et le filtrage dans les paramètres de chaque modèle.