? Puede utilizar esta acción de GitHub para generar contenido destacado de IA para modelado de amenazas y revisión de seguridad. Utiliza xvnpw/ai-threat-modeling debajo.
️ Este es un proyecto experimental.
Funciones compatibles:
Característica | Descripción |
---|---|
Requisitos de seguridad y privacidad de alto nivel | La acción tomará la descripción del proyecto y utilizará LLM para generar requisitos de alto nivel con respecto a la seguridad y la privacidad. |
Modelo de amenaza de arquitectura | La acción tomará la descripción de la arquitectura y utilizará LLM para generar un modelo de amenaza para ella. |
Criterios de aceptación de seguridad para historias de usuario | La acción tomará una historia de usuario particular y generará criterios de aceptación relacionados con la seguridad. |
Revisión del archivo de entrada | La acción tomará el archivo de entrada (por ejemplo, descripción de la arquitectura) y lo revisará usando LLM. |
Utilice las siguientes versiones para modelos específicos:
Modelo | Versión | Nota |
---|---|---|
OpenAI GPT-3.5, Claude 2 antrópico | v1.2.6.1 | |
OpenAI GPT-4 | El último | |
claudio 3 | El último |
Modelo | Aporte | Producción |
---|---|---|
OpenAI GPT-3.5 | PROYECTO.md | PROJECT_SECURITY.md o como solicitud de extracción |
Claude antrópico 2 | PROYECTO.md | PROJECT_SECURITY.md o como solicitud de extracción |
OpenAI GPT-4 | PROYECTO.md | PROJECT_SECURITY.md o como solicitud de extracción |
Antrópico Claude 3 Opus | PROYECTO.md | PROJECT_SECURITY.md o como solicitud de extracción |
Modelo | Aporte | Producción |
---|---|---|
OpenAI GPT-3.5 | ARQUITECTURA.md | ARQUITECTURA_SEGURIDAD.md |
Claude antrópico 2 | ARQUITECTURA.md | ARQUITECTURA_SEGURIDAD.md |
OpenAI GPT-4 | ARQUITECTURA.md | ARQUITECTURA_SEGURIDAD.md |
Antrópico Claude 3 Opus | ARQUITECTURA.md | ARQUITECTURA_SEGURIDAD.md |
Modelo | Aporte | Producción |
---|---|---|
OpenAI GPT-3.5 | 0001_STORE_DIET_INTRODUCTIONS.md o problema | 0001_STORE_DIET_INTRODUCTIONS_SECURITY.md o como comentario del problema |
Claude antrópico 2 | 0001_STORE_DIET_INTRODUCTIONS.md o problema | 0001_STORE_DIET_INTRODUCTIONS_SECURITY.md o como comentario del problema |
OpenAI GPT-4 | 0001_STORE_DIET_INTRODUCTIONS.md o problema | 0001_STORE_DIET_INTRODUCTIONS_SECURITY.md o como comentario del problema |
Antrópico Claude 3 Opus | 0001_STORE_DIET_INTRODUCTIONS.md o problema | 0001_STORE_DIET_INTRODUCTIONS_SECURITY.md o como comentario del problema |
Modelo | Aporte | Producción |
---|---|---|
OpenAI GPT-4 | ARQUITECTURA.md | ARQUITECTURA_REVIEW.md |
Antrópico Claude 3 Opus | ARQUITECTURA.md | ARQUITECTURA_REVIEW.md |
Agregue un paso como este a su flujo de trabajo:
- 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 }}
Actualmente apoyando:
La acción generará output_file
basado en las entradas. Usando otras acciones puedes:
Si sus archivos de entrada son bastante grandes, deberá cambiar model
a uno con un contexto mayor, por ejemplo, gpt-3.5-turbo-16k
.
Si cambia los archivos de entrada, recuerde cambiar el disparador:
on :
push :
branches :
- main
paths :
- ' project-desc-1.md '
- ' project-desc-2.md '
Ejemplo (enfoque de solicitudes de extracción):
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 '
Consulte Requisitos de privacidad y seguridad de alto nivel para obtener detalles sobre activadores y modelos.
Ejemplo (envío directo al repositorio):
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 '
El uso más útil es con problemas de github. Pero también puede generar resultados basados en cambios en un directorio particular (lo hice en la investigación).
La función Historias de usuarios requiere dos parámetros nuevos:
input_architecture_files
: matriz json de rutas de archivos de arquitectura de entrada, por ejemplo, ["arch-1.md","arch-2.md"]
input_architecture_threat_model_file
: ruta al modelo de amenaza de arquitectura, por ejemplo, ARCHITECTURE_SECURITY.md
y uno opcional:
user_story_output_suffix
: sufijo que se agregará al nombre del archivo de entrada para crear el archivo de salida, por ejemplo, _SECURITY
En el caso de una historia de usuario, la compilación se activa cuando se realizan cambios en un directorio en particular. Primero, necesita determinar qué archivos se modificaron y procesarlos individualmente.
Como puede ver, no utilizamos el parámetro input_files
. Esta vez observamos todo el directorio en busca de cambios:
on :
push :
branches :
- main
paths :
- ' user-stories/*.md '
- ' !user-stories/*_SECURITY.md '
Para sus propios directorios, necesita ajustar la configuración paths
. Lo mismo se aplica para realizar cambios con add: 'user-stories/'
.
Ejemplo (envío directo al repositorio):
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/ '
En este caso consideramos sólo historias con cierta etiqueta:
if : contains(github.event.issue.labels.*.name, 'ai-threat-modeling')
El comentario se agrega (o actualiza) usando las acciones peter-evans/find-comment y peter-evans/create-or-update-comment.
Ejemplo (comentario sobre el tema):
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
Ejemplo (envío directo al repositorio):
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 '
Con Add & Commit puedes enviar output_file
fácilmente al repositorio:
- name : Commit changes
uses : EndBug/add-and-commit@v9
with :
message : ' Project architecture threat model '
add : ' ARCHITECTURE_SECURITY.md '
Si cambia el archivo de salida, recuerde cambiar el archivo de confirmación:
- name : Commit changes
uses : EndBug/add-and-commit@v9
with :
message : ' Project security requirements '
add : ' project-sec-reqs.md '
Con Crear solicitud de extracción puede crear una nueva solicitud de extracción con 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 '
En este modo, también necesitas ajustar los permisos para el flujo de trabajo:
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
También cambie la configuración de las acciones.
Es posible que desees ajustar las indicaciones. Para hacerlo, no necesita bifurcar la acción, pero proporcione el directorio de plantillas en su repositorio de destino:
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
En el archivo de flujo de trabajo agregue:
uses : xvnpw/[email protected]
with :
...
templates_dir : ' ./templates '
./templates
: es el directorio relativo a la raíz
.
Este proyecto comenzó como una investigación de las capacidades de los LLM, pero con el tiempo mejoró más allá de una simple PoC. Con la versión 1, se puede utilizar para revisar documentos en github mediante push directo, pr o issues. No se garantizan más desarrollos ni correcciones. Si planea usarlo en su empresa, lo mejor es bifurcarlo y ajustarlo a sus necesidades.
Bifurca este proyecto. Editar archivos y liberar acción:
git add .
git commit -m "My first action is ready"
git tag -a -m "My first action release" v1
git push --follow-tags
Este proyecto utiliza la API OpenAI. De forma predeterminada, sus datos no se utilizarán para el aprendizaje, según las políticas de uso de datos de la API:
OpenAI no utilizará los datos enviados por los clientes a través de nuestra API para entrenar o mejorar nuestros modelos, a menos que usted decida explícitamente compartir sus datos con nosotros para este propósito. Puede optar por compartir datos.
OpenRouter describe la privacidad y el filtrado en la configuración de cada modelo.