- คุณสามารถใช้ GitHub Action นี้เพื่อสร้างเนื้อหาเด่นของ AI สำหรับการสร้างแบบจำลองภัยคุกคามและการตรวจสอบความปลอดภัย มันใช้ xvnpw/ai-threat-modeling ข้างใต้
นี่เป็นโครงการทดลอง
คุณสมบัติที่รองรับ:
คุณสมบัติ | คำอธิบาย |
---|---|
ข้อกำหนดด้านความปลอดภัยและความเป็นส่วนตัวระดับสูง | การดำเนินการจะใช้คำอธิบายโครงการและจะใช้ LLM เพื่อสร้างข้อกำหนดระดับสูงเกี่ยวกับความปลอดภัยและความเป็นส่วนตัว |
แบบจำลองภัยคุกคามทางสถาปัตยกรรม | การดำเนินการจะใช้คำอธิบายสถาปัตยกรรมและจะใช้ LLM เพื่อสร้างแบบจำลองภัยคุกคาม |
เกณฑ์การยอมรับความปลอดภัยสำหรับเรื่องราวของผู้ใช้ | การดำเนินการจะนำเรื่องราวของผู้ใช้โดยเฉพาะและสร้างเกณฑ์การยอมรับที่เกี่ยวข้องกับความปลอดภัย |
ตรวจสอบไฟล์อินพุต | การดำเนินการจะนำไฟล์อินพุต (เช่น คำอธิบายสถาปัตยกรรม) มาตรวจสอบโดยใช้ LLM |
ใช้เวอร์ชันด้านล่างสำหรับรุ่นเฉพาะ:
แบบอย่าง | เวอร์ชัน | บันทึก |
---|---|---|
OpenAI GPT-3.5, มานุษยวิทยา Claude 2 | เวอร์ชัน 1.2.6.1 | |
โอเพ่นเอไอ GPT-4 | ล่าสุด | |
โคลด 3 | ล่าสุด |
แบบอย่าง | ป้อนข้อมูล | เอาท์พุต |
---|---|---|
OpenAI GPT-3.5 | โครงการ.md | PROJECT_SECURITY.md หรือตามคำขอดึง |
มานุษยวิทยาคลอดด์ 2 | โครงการ.md | PROJECT_SECURITY.md หรือตามคำขอดึง |
โอเพ่นเอไอ GPT-4 | โครงการ.md | PROJECT_SECURITY.md หรือตามคำขอดึง |
มานุษยวิทยา Claude 3 Opus | โครงการ.md | PROJECT_SECURITY.md หรือตามคำขอดึง |
แบบอย่าง | ป้อนข้อมูล | เอาท์พุต |
---|---|---|
OpenAI GPT-3.5 | สถาปัตยกรรม.md | ARCHITECTURE_SECURITY.md |
มานุษยวิทยาคลอดด์ 2 | สถาปัตยกรรม.md | ARCHITECTURE_SECURITY.md |
โอเพ่นเอไอ GPT-4 | สถาปัตยกรรม.md | ARCHITECTURE_SECURITY.md |
มานุษยวิทยา Claude 3 Opus | สถาปัตยกรรม.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 หรือตามความคิดเห็นของปัญหา |
โอเพ่นเอไอ GPT-4 | 0001_STORE_DIET_INTRODUCTIONS.md หรือฉบับ | 0001_STORE_DIET_INTRODUCTIONS_SECURITY.md หรือตามความคิดเห็นของปัญหา |
มานุษยวิทยา Claude 3 Opus | 0001_STORE_DIET_INTRODUCTIONS.md หรือฉบับ | 0001_STORE_DIET_INTRODUCTIONS_SECURITY.md หรือตามความคิดเห็นของปัญหา |
แบบอย่าง | ป้อนข้อมูล | เอาท์พุต |
---|---|---|
โอเพ่นเอไอ GPT-4 | สถาปัตยกรรม.md | ARCHITECTURE_REVIEW.md |
มานุษยวิทยา Claude 3 Opus | สถาปัตยกรรม.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 '
ด้วย Add & Commit คุณสามารถรับ output_file
เข้าสู่ repository ได้อย่างง่ายดาย:
- 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 คุณสามารถสร้างคำขอ pull ใหม่ด้วย 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 '
ในโหมดนี้ คุณต้องปรับสิทธิ์สำหรับเวิร์กโฟลว์ด้วย:
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 โดยใช้การพุชโดยตรง pr หรือปัญหาต่างๆ ไม่รับประกัน การพัฒนาหรือการแก้ไขเพิ่มเติม หากคุณวางแผนที่จะใช้ในบริษัทของคุณ ควรแยกมันและปรับแต่งตามความต้องการของคุณ
ส้อมโครงการนี้ แก้ไขไฟล์และดำเนินการปล่อย:
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 อธิบายความเป็นส่วนตัวและการกรองในการตั้งค่าสำหรับแต่ละรุ่น