? 이 GitHub Action을 사용하여 위협 모델링 및 보안 검토를 위한 AI 추천 콘텐츠를 생성할 수 있습니다. 아래에서는 xvnpw/ai-threat-modeling을 사용합니다.
️ 이것은 실험적인 프로젝트입니다
지원되는 기능:
특징 | 설명 |
---|---|
높은 수준의 보안 및 개인 정보 보호 요구 사항 | 조치는 프로젝트 설명을 취하고 LLM을 사용하여 보안 및 개인 정보 보호에 관한 높은 수준의 요구 사항을 생성합니다. |
아키텍처의 위협 모델 | 조치는 아키텍처 설명을 취하고 LLM을 사용하여 이에 대한 위협 모델을 생성합니다. |
사용자 스토리에 대한 보안 허용 기준 | 조치는 특정 사용자 스토리를 취하여 보안 관련 허용 기준을 생성합니다. |
입력 파일 검토 | 조치는 입력 파일(예: 아키텍처 설명)을 취하고 LLM을 사용하여 검토합니다. |
특정 모델에는 아래 버전을 사용하십시오.
모델 | 버전 | 메모 |
---|---|---|
OpenAI GPT-3.5, Anthropic Claude 2 | v1.2.6.1 | |
오픈AI GPT-4 | 최신 | |
클로드 3 | 최신 |
모델 | 입력 | 산출 |
---|---|---|
OpenAI GPT-3.5 | 프로젝트.md | PROJECT_SECURITY.md 또는 풀 요청으로 |
인류학 클로드 2 | 프로젝트.md | PROJECT_SECURITY.md 또는 풀 요청으로 |
오픈AI GPT-4 | 프로젝트.md | PROJECT_SECURITY.md 또는 풀 요청으로 |
인류학 클로드 3 작품 | 프로젝트.md | PROJECT_SECURITY.md 또는 풀 요청으로 |
모델 | 입력 | 산출 |
---|---|---|
OpenAI GPT-3.5 | 건축.md | ARCHITECTURE_SECURITY.md |
인류학 클로드 2 | 건축.md | ARCHITECTURE_SECURITY.md |
오픈AI GPT-4 | 건축.md | ARCHITECTURE_SECURITY.md |
인류학 클로드 3 작품 | 건축.md | ARCHITECTURE_SECURITY.md |
모델 | 입력 | 산출 |
---|---|---|
OpenAI GPT-3.5 | 0001_STORE_DIET_INTRODUCTIONS.md 또는 문제 | 0001_STORE_DIET_INTRODUCTIONS_SECURITY.md 또는 문제 설명으로 |
인류학 클로드 2 | 0001_STORE_DIET_INTRODUCTIONS.md 또는 문제 | 0001_STORE_DIET_INTRODUCTIONS_SECURITY.md 또는 문제 설명으로 |
오픈AI GPT-4 | 0001_STORE_DIET_INTRODUCTIONS.md 또는 문제 | 0001_STORE_DIET_INTRODUCTIONS_SECURITY.md 또는 문제 설명으로 |
인류학 클로드 3 작품 | 0001_STORE_DIET_INTRODUCTIONS.md 또는 문제 | 0001_STORE_DIET_INTRODUCTIONS_SECURITY.md 또는 문제 설명으로 |
모델 | 입력 | 산출 |
---|---|---|
오픈AI GPT-4 | 건축.md | ARCHITECTURE_REVIEW.md |
인류학 클로드 3 작품 | 건축.md | ARCHITECTURE_REVIEW.md |
워크플로에 다음과 같은 단계를 추가하세요.
- 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 }}
현재 지원하는 것:
작업은 입력을 기반으로 output_file
생성합니다. 다른 작업을 사용하면 다음을 수행할 수 있습니다.
입력 파일이 상당히 큰 경우 model
더 큰 컨텍스트를 가진 모델로 변경해야 합니다(예: gpt-3.5-turbo-16k
.
입력 파일을 변경하는 경우 트리거를 변경해야 합니다.
on :
push :
branches :
- main
paths :
- ' project-desc-1.md '
- ' project-desc-2.md '
예(풀 요청 접근 방식):
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 '
트리거 및 모델에 대한 자세한 내용은 높은 수준의 보안 및 개인 정보 보호 요구 사항을 확인하세요.
예(저장소에 직접 푸시):
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 '
가장 유용한 사용법은 github 문제입니다. 그러나 특정 디렉터리의 변경 사항을 기반으로 출력을 생성할 수도 있습니다(연구에서 그렇게 했습니다).
사용자 스토리 기능에는 두 가지 새로운 매개변수가 필요합니다.
input_architecture_files
- 입력 아키텍처 파일 경로의 json 배열(예: ["arch-1.md","arch-2.md"]
input_architecture_threat_model_file
- 아키텍처 위협 모델의 경로(예: ARCHITECTURE_SECURITY.md
하나는 선택 사항입니다.
user_story_output_suffix
- 출력 파일을 생성하기 위해 입력 파일 이름에 추가되는 접미사(예: _SECURITY
사용자 스토리의 경우 특정 디렉터리가 변경되면 빌드가 트리거됩니다. 먼저 어떤 파일이 변경되었는지 파악하고 개별적으로 처리해야 합니다.
보시다시피, 우리는 input_files
매개변수를 사용하지 않습니다. 이번에는 전체 디렉토리에서 변경 사항을 확인합니다.
on :
push :
branches :
- main
paths :
- ' user-stories/*.md '
- ' !user-stories/*_SECURITY.md '
자신의 디렉터리에 대해서는 paths
구성을 조정해야 합니다. add: 'user-stories/'
사용하여 변경 사항을 커밋하는 경우에도 동일하게 적용됩니다.
예(저장소에 직접 푸시):
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/ '
이 경우 특정 라벨이 있는 스토리만 고려합니다.
if : contains(github.event.issue.labels.*.name, 'ai-threat-modeling')
댓글은 peter-evans/find-comment 및 peter-evans/create-or-update-comment 작업을 사용하여 추가(또는 업데이트)됩니다.
예(문제에 대한 의견):
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
예(저장소에 직접 푸시):
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 '
추가 및 커밋을 사용하면 output_file
저장소에 쉽게 커밋할 수 있습니다.
- name : Commit changes
uses : EndBug/add-and-commit@v9
with :
message : ' Project architecture threat model '
add : ' ARCHITECTURE_SECURITY.md '
출력 파일을 변경하는 경우 커밋 파일을 변경해야 합니다.
- name : Commit changes
uses : EndBug/add-and-commit@v9
with :
message : ' Project security requirements '
add : ' project-sec-reqs.md '
Create Pull Request를 사용하면 output_file
사용하여 새로운 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 '
이 모드에서는 워크플로에 대한 권한도 조정해야 합니다.
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
또한 작업에 대한 설정을 변경합니다.
프롬프트를 조정하고 싶을 수도 있습니다. 이렇게 하려면 작업을 분기할 필요가 없지만 대상 저장소에 템플릿 디렉터리를 제공해야 합니다.
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
워크플로 파일에 다음을 추가합니다.
uses : xvnpw/[email protected]
with :
...
templates_dir : ' ./templates '
./templates
-
루트에 상대적인 디렉터리입니다.
이 프로젝트는 LLM 기능에 대한 연구로 시작되었지만 시간이 지남에 따라 단순한 PoC 이상으로 개선되었습니다. 버전 1에서는 직접 푸시, 홍보 또는 이슈를 사용하여 github에서 문서를 검토하는 데 사용할 수 있습니다. 추가 개발이나 수정은 보장되지 않습니다 . 회사에서 사용할 계획이라면 포크하여 필요에 맞게 조정하는 것이 가장 좋습니다.
이 프로젝트를 포크하세요. 파일 편집 및 작업 해제:
git add .
git commit -m "My first action is ready"
git tag -a -m "My first action release" v1
git push --follow-tags
이 프로젝트는 OpenAI API를 사용합니다. 기본적으로 API 데이터 사용 정책에 따라 데이터는 학습에 사용되지 않습니다.
OpenAI는 귀하가 이러한 목적으로 귀하의 데이터를 당사와 공유하기로 명시적으로 결정하지 않는 한 모델을 훈련하거나 개선하기 위해 고객이 API를 통해 제출한 데이터를 사용하지 않습니다. 데이터 공유를 선택할 수 있습니다.
OpenRouter는 각 모델의 설정에서 개인 정보 보호 및 필터링을 설명합니다.