؟ يمكنك استخدام إجراء GitHub هذا لإنشاء محتوى مميز بالذكاء الاصطناعي لنمذجة التهديدات ومراجعة الأمان. ويستخدم xvnpw/ai-threat-modeling تحته.
️ هذا مشروع تجريبي
الميزات المدعومة:
ميزة | وصف |
---|---|
متطلبات الأمان والخصوصية عالية المستوى | سيتخذ الإجراء وصف المشروع وسيستخدم LLM لإنشاء متطلبات عالية المستوى فيما يتعلق بالأمان والخصوصية |
نموذج التهديد للهندسة المعمارية | سيتخذ الإجراء وصفًا للهندسة المعمارية وسيستخدم LLM لإنشاء نموذج تهديد له |
معايير قبول الأمان لقصة المستخدم | سيتخذ الإجراء قصة مستخدم معينة وينشئ معايير قبول متعلقة بالأمان |
مراجعة ملف الإدخال | سيتم اتخاذ الإجراء بشأن ملف الإدخال (مثل وصف الهندسة المعمارية) ومراجعته باستخدام LLM |
استخدم الإصدارات أدناه لنماذج محددة:
نموذج | إصدار | ملحوظة |
---|---|---|
OpenAI GPT-3.5، أنثروبي كلود 2 | v1.2.6.1 | |
أوبن إيه آي جي بي تي-4 | أحدث | |
كلود 3 | أحدث |
نموذج | مدخل | الإخراج |
---|---|---|
أوبن إيه آي جي بي تي-3.5 | PROJECT.md | PROJECT_SECURITY.md أو كطلب سحب |
الأنثروبي كلود 2 | PROJECT.md | PROJECT_SECURITY.md أو كطلب سحب |
أوبن إيه آي جي بي تي-4 | PROJECT.md | PROJECT_SECURITY.md أو كطلب سحب |
أنثروبي كلود 3 أوبوس | PROJECT.md | PROJECT_SECURITY.md أو كطلب سحب |
نموذج | مدخل | الإخراج |
---|---|---|
أوبن إيه آي جي بي تي-3.5 | الهندسة المعمارية.md | ARCHITECTURE_SECURITY.md |
الأنثروبي كلود 2 | الهندسة المعمارية.md | ARCHITECTURE_SECURITY.md |
أوبن إيه آي جي بي تي-4 | الهندسة المعمارية.md | ARCHITECTURE_SECURITY.md |
أنثروبي كلود 3 أوبوس | الهندسة المعمارية.md | ARCHITECTURE_SECURITY.md |
نموذج | مدخل | الإخراج |
---|---|---|
أوبن إيه آي جي بي تي-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 أو كتعليق على المشكلة |
أوبن إيه آي جي بي تي-4 | 0001_STORE_DIET_INTRODUCTIONS.md أو الإصدار | 0001_STORE_DIET_INTRODUCTIONS_SECURITY.md أو كتعليق على المشكلة |
أنثروبي كلود 3 أوبوس | 0001_STORE_DIET_INTRODUCTIONS.md أو الإصدار | 0001_STORE_DIET_INTRODUCTIONS_SECURITY.md أو كتعليق على المشكلة |
نموذج | مدخل | الإخراج |
---|---|---|
أوبن إيه آي جي بي تي-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 '
الاستخدام الأكثر فائدة هو مع مشكلات جيثب. ولكن يمكنك أيضًا إنشاء مخرجات بناءً على التغييرات في دليل معين (لقد فعلت ذلك في البحث).
تتطلب ميزة قصص المستخدم معلمتين جديدتين:
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 '
باستخدام إنشاء طلب سحب، يمكنك إنشاء طلب سحب جديد باستخدام 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، يمكن استخدامه لمراجعة المستندات في جيثب باستخدام الدفع المباشر أو العلاقات العامة أو المشكلات. لا يتم ضمان المزيد من التطوير أو الإصلاحات. إذا كنت تخطط لاستخدامه في شركتك، فمن الأفضل أن تقوم بتقسيمه وملاءمته لاحتياجاتك.
شوكة هذا المشروع. تحرير الملفات وإجراءات الإصدار:
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. افتراضيًا، لن يتم استخدام بياناتك للتعلم، وفقًا لسياسات استخدام بيانات واجهة برمجة التطبيقات:
لن تستخدم OpenAI البيانات المقدمة من العملاء عبر واجهة برمجة التطبيقات الخاصة بنا لتدريب نماذجنا أو تحسينها، ما لم تقرر صراحةً مشاركة بياناتك معنا لهذا الغرض. يمكنك الاشتراك في مشاركة البيانات.
يصف OpenRouter الخصوصية والتصفية في الإعدادات لكل طراز.