
مُجمِّع OpenGraph لـ BloodHound الذي يرسم خريطة مسارات الهجوم من البنية التحتية لـ DevOps إلى MLOps، ويجمع موارد خط أنابيب CI/CD، ومدير الخدمة، ومنصة ML لتحليل الحركة الجانبية.
مجموعة أدوات إثبات المفهوم لجمع OpenGraph لـ BloodHound والتي ترسم مسارات الهجوم من DevOps إلى بنية MLOps.
استنادًا إلى Pipelines of Privilege: Attack Paths from DevOps to MLOps Infrastructure بقلم Brett Hawkins (@h4wkst3r).
Dop2Mop يجمع البيانات من منصات DevOps وMLOps لتحديد مسارات الهجوم التي تتيح الحركة الجانبية من خطوط أنابيب CI/CD إلى بنية التدريب على التعلم الآلي. ينتج JSON بتنسيق OpenGraph المتوافق مع BloodHound للتصور والتحليل.
| منصات DevOps | منصات MLOps | مزودو الهوية |
|---|---|---|
| GitHub (الإجراءات، المستودعات، الأسرار) | Azure Machine Learning | خدمة Azure AD الأساسية |
| Azure DevOps (خطوط الأنابيب، اتصالات الخدمة) | Amazon SageMaker | أدوار AWS IAM هوية OIDC/متحدة |
Dop2Mop يصمم حدود الثقة الخمسة الحرجة التي تم تحديدها في البحث:
git clone https://github.com/h4wkst3r/dop2mop.git cd dop2mop pip install -r requirements.txt pip install -e .
## ما يتم جمعه
يقوم كل جامع بجمع الموارد الخاصة بالمنصة ورسم خرائط لحدود الثقة بينها:
| جامع | الموارد التي تم جمعها |
|-----------|-------------------|
| **GitHub** | Organizations, repositories, workflows, secrets, branch protection rules, OIDC configurations, container image references, S3 bucket references |
| **Azure DevOps** | Organizations, projects, pipelines (YAML), service connections (with scope details), variable groups, agent pools, repositories |
| **Azure ML** | Workspaces, compute clusters/instances, datastores, ML environments, registered models, jobs/experiments, online & batch endpoints |
| **SageMaker** | Training jobs, models, endpoints, domains, notebook instances, IAM execution roles (with policy analysis), ECR repositories/images, S3 buckets (filtered to ML-relevant) |
## بداية سريعة
### إنشاء بيانات تجريبية
أسرع طريقة لرؤية Dop2Mop وهي تعمل هي إنشاء بيانات تجريبية تعرض سيناريوهات الهجوم من البحث:```bash
dop2mop demo -o demo.json
// Container Image Poisoning (Supply Chain Attack) MATCH p=(workflow)-[:CanPoisonImage]->(image)<-[:PullsImage]-(job) RETURN p
// OIDC/Federated Identity Abuse (confirmed edges) MATCH p=(workflow)-[:OIDCTrust]->(oidc)-[:CanAssumeRole]->(role)-[:SubmitsJob]->(job) RETURN p
// OIDC abuse including inferred paths MATCH p=(workflow)-[:OIDCTrust]->(oidc)-[:InferredCanAssumeRole]->(role) RETURN p
// Dataset Poisoning via Pickle Deserialization MATCH p=(workflow)-[:CanPoisonDataset]->(dataset)<-[:LoadsDataset]-(job) RETURN p
// Find repos with weak/no branch protection (TB1 exploitable) MATCH (repo)-[:BypassesProtection]->(repo) RETURN repo.name, repo.default_branch
// Find overprivileged SageMaker IAM roles MATCH (role:IAMRole) WHERE role.is_admin = true OR role.has_s3_full_access = true RETURN role.name, role.attached_policies
// Find SageMaker notebooks with root + internet access MATCH (nb:SMNotebook) WHERE nb.root_access = 'Enabled' AND nb.direct_internet_access = 'Enabled' RETURN nb.name, nb.status
// Find self-hosted ADO agent pools MATCH (agent:ADOAgent) WHERE agent.is_hosted = false RETURN agent.name, agent.pool_type
---
## التهيئة
### ملف التهيئة
بدلاً من تمرير بيانات الاعتماد في كل تشغيل، يمكنك حفظها في ملف تهيئة. انسخ المثال المرفق واملأ القيم الخاصة بك:```bash
cp dop2mop.yaml.example dop2mop.yaml
# Edit dop2mop.yaml with your credentials
يتحقق Dop2Mop من هذه المواقع بالترتيب:
--configdop2mop.yaml / dop2mop.yml / .dop2mop.yaml في الدليل الحالي~/.dop2mop.yamlملاحظة:
dop2mop.yamlموجود في.gitignoreلمنع إضافة بيانات الاعتماد عن طريق الخطأ. الملف النموذجي (dop2mop.yaml.example) آمن للإضافة.
انظر dop2mop.yaml.example لجميع الخيارات المتاحة مع التعليقات.
ترتيب الأولوية: وسيطات سطر الأوامر > ملف الإعداد > متغيرات البيئة.
اختبر بيانات الاعتماد قبل تشغيل مجموعة كاملة:```bash
dop2mop collect --validate -v
dop2mop collect --validate --collectors github,sagemaker -v
يؤدي ذلك إلى إجراء استدعاء API خفيف لكل منصة للتحقق من صحة الرموز قبل بدء الجمع.
### أسماء مستعارة للمجمعين
يمكنك استخدام أسماء قصيرة بدلاً من أسماء الفئات الكاملة باستخدام `--collectors`:
| الاسم المستعار | المجمع |
|-------|-----------|
| `github`, `gh` | GitHubCollector |
| `ado`, `azuredevops`, `azure-devops` | AzureDevOpsCollector |
| `azureml`, `azure-ml` | AzureMLCollector |
| `sagemaker`, `sm` | SageMakerCollector |```bash
# These are equivalent:
dop2mop collect --collectors GitHubCollector,SageMakerCollector
dop2mop collect --collectors github,sagemaker
dop2mop collect --collectors gh,sm
dop2mop [options]
Commands: collect Collect data from DevOps/MLOps platforms demo Generate demo data with attack scenarios
### الخيارات العامة
| الخيار | الوصف |
|--------|-------------|
| `-v, --verbose` | تمكين الإخراج المفصل (تسجيل مستوى INFO) |
| `--debug` | تمكين إخراج التصحيح (تسجيل مستوى DEBUG) |
---
### `dop2mop collect`
جمع البيانات من منصات DevOps وMLOps المُهيأة.```bash
dop2mop collect [OPTIONS]
| الخيار | الوصف |
|---|---|
--github-token TOKEN | رمز الوصول الشخصي لـ GitHub |
--github-org ORG | اسم المؤسسة على GitHub |
--github-enterprise-url URL | رابط خادم GitHub Enterprise |
| الخيار | الوصف |
|---|---|
--azure-devops-token TOKEN | رمز الوصول الشخصي لـ Azure DevOps (PAT) |
--azure-devops-access-token TOKEN | رمز الوصول لـ Azure DevOps (مصادقة Bearer، اختياري) |
--azure-devops-org ORG | اسم المؤسسة على Azure DevOps |
| الخيار | الوصف |
|---|---|
dop2mop demoتوليد بيانات تجريبية توضح سيناريوهات الهجوم الأربعة من البحث.```bash dop2mop demo [OPTIONS]
| الخيار | الوصف |
|--------|-------------|
| `-o, --output FILE` | مسار ملف الإخراج (الافتراضي: `dop2mop_demo.json`) |
---
### `dop2mop icons`
إنشاء تكوين أيقونة مخصصة لأنواع عقد BloodHound.```bash
dop2mop icons [OPTIONS]
| الخيار | الوصف |
|---|---|
-o, --output FILE | مسار ملف الإخراج (الافتراضي: dop2mop_icons.json) |
dop2mop collect -o output.json
dop2mop collect --config dop2mop.yaml -o output.json -v
dop2mop collect --validate -o output.json -v
dop2mop collect -o output.json -v
dop2mop collect -o output.json --debug
dop2mop collect -o output.json --zip
dop2mop collect --max-items 100 -o output.json
dop2mop collect --no-secrets -o output.json
### مجموعة منصة واحدة```bash
# GitHub only (aliases: github, gh)
dop2mop collect --collectors github -o github.json -v
# Azure DevOps only (aliases: ado, azuredevops)
dop2mop collect --collectors ado -o ado.json -v
# Azure ML only (aliases: azureml, azure-ml)
dop2mop collect --collectors azureml -o azureml.json -v
# SageMaker only (aliases: sagemaker, sm)
dop2mop collect --collectors sm -o sagemaker.json -v
dop2mop collect --collectors github,sagemaker -o output.json -v
dop2mop collect --collectors github,ado -o output.json -v
dop2mop collect --collectors ado,azureml -o azure.json -v
dop2mop collect --collectors github,ado,azureml,sagemaker -o full.json -v
### أمثلة مجموعة GitHub```bash
# Using environment variables
export GITHUB_TOKEN="ghp_xxxxxxxxxxxx"
export GITHUB_ORG="your-org"
dop2mop collect --collectors GitHubCollector -o github.json -v
# Using command-line arguments
dop2mop collect --collectors GitHubCollector \
--github-token ghp_xxxxxxxxxxxx \
--github-org your-org \
-o github.json -v
# GitHub Enterprise Server
dop2mop collect --collectors GitHubCollector \
--github-token ghp_xxxxxxxxxxxx \
--github-org your-org \
--github-enterprise-url https://github.yourcompany.com/api/v3 \
-o github.json -v
# Skip secret enumeration
dop2mop collect --collectors GitHubCollector \
--github-token ghp_xxxxxxxxxxxx \
--github-org your-org \
--no-secrets \
-o github.json -v
# Limit to 50 repositories
dop2mop collect --collectors GitHubCollector \
--github-token ghp_xxxxxxxxxxxx \
--github-org your-org \
--max-items 50 \
-o github.json -v
export AZURE_DEVOPS_TOKEN="your-pat" export AZURE_DEVOPS_ORG="your-org" dop2mop collect --collectors AzureDevOpsCollector -o ado.json -v
dop2mop collect --collectors AzureDevOpsCollector
--azure-devops-token your-pat
--azure-devops-org your-org
-o ado.json -v
dop2mop collect --collectors AzureDevOpsCollector
--azure-devops-access-token eyJ0...
--azure-devops-org your-org
-o ado.json -v
> **ملاحظة:** أولوية التوثيق في Azure DevOps: رمز الوصول (Bearer) > PAT (Basic).
> يمكن الحصول على رموز الوصول عبر `az account get-access-token --resource 499b84ac-1321-427f-aa17-267ca6975798`.
### أمثلة مجموعة Azure ML```bash
# Using environment variables
export AZURE_SUBSCRIPTION_ID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
export AZURE_TENANT_ID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
dop2mop collect --collectors AzureMLCollector -o azureml.json -v
# Using DefaultAzureCredential (az login)
dop2mop collect --collectors AzureMLCollector \
--azure-subscription-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
--azure-tenant-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
-o azureml.json -v
# Using Service Principal
dop2mop collect --collectors AzureMLCollector \
--azure-subscription-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
--azure-tenant-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
--azure-client-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
--azure-client-secret your-secret \
-o azureml.json -v
# Using Access Token
dop2mop collect --collectors AzureMLCollector \
--azure-subscription-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
--azure-tenant-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
--azure-access-token eyJ0... \
-o azureml.json -v
ملاحظة: أولوية مصادقة Azure ML: رمز الوصول > مدير الخدمة > DefaultAzureCredential (az login). يمكن الحصول على رموز الوصول عبر
az account get-access-token --resource https://management.azure.com/.
export AWS_PROFILE="your-profile" dop2mop collect --collectors SageMakerCollector -o sagemaker.json -v
dop2mop collect --collectors SageMakerCollector
--aws-profile your-profile
-o sagemaker.json -v
dop2mop collect --collectors SageMakerCollector
--aws-access-key-id AKIAXXXXXXXXXXXXXXXX
--aws-secret-access-key xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
--aws-region us-east-1
-o sagemaker.json -v
dop2mop collect --collectors SageMakerCollector
--aws-profile your-profile
--aws-region us-west-2
-o sagemaker.json -v
### مجموعة البيئة الكاملة```bash
# Set all environment variables
export GITHUB_TOKEN="ghp_xxxxxxxxxxxx"
export GITHUB_ORG="your-org"
export AZURE_DEVOPS_TOKEN="your-pat"
export AZURE_DEVOPS_ORG="your-org"
export AZURE_SUBSCRIPTION_ID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
export AZURE_TENANT_ID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
export AWS_PROFILE="your-profile"
# Collect from all platforms (auto-detects configured collectors)
dop2mop collect -o full_collection.json -v
# Or with explicit collectors
dop2mop collect \
--collectors GitHubCollector,AzureDevOpsCollector,AzureMLCollector,SageMakerCollector \
-o full_collection.json -v
يمكن تعيين جميع خيارات سطر الأوامر عبر متغيرات البيئة:
الأولوية: وسائط CLI > ملف التكوين > متغيرات البيئة.
| النوع | الوصف |
|---|---|
ServicePrincipal | عميل الخدمة الأساسي لـ Azure AD |
IAMRole | دور IAM في AWS |
OIDCIdentity |
| النوع | الوصف |
|---|---|
ContainerRegistry | سجل الحاويات (ECR، ACR) |
ContainerImage | صورة الحاوية |
S3Bucket |
يتم إنشاء هذه الحواف بواسطة التحليل الاستدلالي عندما لا تتوفر بيانات API صريحة (مثل ARNs الأدوار المخزنة في الأسرار). تستخدم أنواع حواف مميزة حتى تتمكن من تصفيتها في استعلامات BloodHound.
| النوع | الوصف |
|---|---|
InferredCanAssumeRole | هوية OIDC قد تكون قادرة على افتراض دور (مستنتج) |
راجع queries/dop2mop_queries.cypher للحصول على أمثلة شاملة للاستعلامات.
يتضمن Dop2Mop ملف رموز مسبق التكوين لأنواع العقد المخصصة لـ BloodHound في data/custom_icons.json.
custom_icons.jsonأولاً، قم بإنشاء رمز API في BloodHound:
ثم استخدم هذا البرنامج النصي Python للتحميل:```python #!/usr/bin/env python3 """Upload custom icons to BloodHound CE using HMAC authentication."""
import base64 import hashlib import hmac import json from datetime import datetime, timezone import requests
BLOODHOUND_URL = "http://localhost:8080" TOKEN_ID = "your-token-id" TOKEN_KEY = "your-token-key" ICONS_FILE = "custom_icons.json"
def hmac_auth(method: str, uri: str, body: bytes = b"") -> dict: """Generate HMAC authentication headers.""" digester = hmac.new( base64.b64decode(TOKEN_KEY), msg=None, digestmod=hashlib.sha256 )
now = datetime.now(timezone.utc)
timestamp = now.strftime("%Y-%m-%dT%H:%M:%SZ")
digester.update(f"{method}".encode())
digester.update(f"{uri}".encode())
digester.update(timestamp.encode())
if body:
digester.update(body)
signature = base64.b64encode(digester.digest()).decode()
return {
"Authorization": f"bhesignature {TOKEN_ID}",
"RequestDate": timestamp,
"Signature": signature,
"Content-Type": "application/json",
}
def upload_icons(): """Upload custom icons to BloodHound.""" uri = "/api/v2/custom-nodes" url = f"{BLOODHOUND_URL}{uri}"
with open(ICONS_FILE, "rb") as f:
body = f.read()
headers = hmac_auth("POST", uri, body)
response = requests.post(url, headers=headers, data=body)
print(f"Status: {response.status_code}")
print(f"Response: {response.text}")
return response.status_code == 200
if name == "main": upload_icons()
#### الخيار 3: رمز الحامل (اختبار سريع)
احصل على JWT من علامة تبويب الشبكة في أدوات المطورين بالمتصفح أثناء تسجيل الدخول إلى BloodHound:```bash
curl -X POST http://localhost:8080/api/v2/custom-nodes \
-H "Authorization: Bearer eyJ..." \
-H "Content-Type: application/json" \
-d @custom_icons.json
from dop2mop import Dop2MopCollector, CollectorConfig
config = CollectorConfig( github_token="ghp_xxx", github_org="myorg", aws_profile="default", )
collector = Dop2MopCollector(config) results = collector.validate_all() print(results) # {'GitHubCollector': True, 'SageMakerCollector': True, ...}
collector.run(collectors=["github", "sm"])
collector.save("output.json")
print(collector.get_stats())
print(collector.get_collection_summary())
### استخدام المُجمِّعات الفردية```python
from dop2mop import CollectorConfig, GitHubCollector, SageMakerCollector
from dop2mop.graph import OpenGraphBuilder
# Create shared builder
builder = OpenGraphBuilder(source_kind="MLOpsBase")
# Configure
config = CollectorConfig(
github_token="ghp_xxx",
github_org="myorg",
aws_profile="default",
)
# Run individual collectors
github = GitHubCollector(config, builder)
github.collect()
sagemaker = SageMakerCollector(config, builder)
sagemaker.collect()
# Save combined output
builder.save("combined.json")
from dop2mop.graph import OpenGraphBuilder from dop2mop.models import NodeKind, EdgeType
builder = OpenGraphBuilder(source_kind="CustomSource")
builder.create_node( id="my-pipeline", kinds=[NodeKind.AZURE_DEVOPS_PIPELINE.value], name="My Pipeline", displayname="Production Pipeline", )
builder.create_node( id="my-ml-workspace", kinds=[NodeKind.AZURE_ML_WORKSPACE.value], name="ML Workspace", displayname="Training Workspace", )
builder.create_edge( start_id="my-pipeline", end_id="my-ml-workspace", kind=EdgeType.SUBMITS_JOB, properties={"trust_boundary": "TB4"} )
builder.save("custom_graph.json")
---
## استكشاف الأخطاء وإصلاحها
### التحقق أولاً
ابدأ دائمًا بالتحقق من صحة بيانات الاعتماد لاكتشاف مشكلات المصادقة مبكرًا:```bash
dop2mop collect --validate --collectors github,sm -v
سيظهر الإخراج OK/FAILED لكل جامع قبل بدء أي تجميع.
Total Nodes: 142 DevOps: 45 MLOps: 38 Identity: 12 Artifact: 47
Total Edges: 201 Contains: 62 TriggersPipeline: 15 ...
──────────────────────────────────────────────────────── Collection Issues: GitHubCollector: 45 collected, 3 failed, 1 skipped FAIL: branch_protection:org/repo - 404 Not Found SKIP: branch_protection:org/private - Insufficient permissions
### المشكلات الشائعة
**"GitHub collector not configured, skipping"**
- تأكد من تعيين متغيرات البيئة `GITHUB_TOKEN` و `GITHUB_ORG`، أو مرر `--github-token` و `--github-org`
**"Azure ML collector not configured, skipping"**
- تأكد من تعيين `AZURE_SUBSCRIPTION_ID` و `AZURE_TENANT_ID`
- قم بتشغيل `az login` إذا كنت تستخدم `DefaultAzureCredential`
- بدلاً من ذلك، مرر `--azure-access-token` مع رمز صالح من `az account get-access-token`
**"SageMaker collector not configured, skipping"**
- عيّن `AWS_PROFILE` أو كلاً من `AWS_ACCESS_KEY_ID` و `AWS_SECRET_ACCESS_KEY`
- تأكد من أن بيانات الاعتماد لديها صلاحيات قراءة SageMaker
**حماية الفرع ترجع 403**
- تتطلب واجهة GitHub API صلاحيات مسؤول لقراءة قواعد حماية الفرع
- الرموز غير المسؤولة ستتخطى جمع حماية الفرع (يتم الإبلاغ عنه في الملخص)
**تحديد معدل الطلبات (أخطاء 429)**
- يقوم Dop2Mop تلقائيًا بإعادة المحاولة مع التراجع الأسي (exponential backoff) عند استجابات حد المعدل
- للمؤسسات الكبيرة، استخدم `--max-items` لتقليل استدعاءات API
- حدود GitHub للمعدل: 5,000 طلب/ساعة للمستخدمين الموثقين
**لا توجد نتائج في وحدة تحكم BloodHound Cypher**
- تأكد من أن الاستعلامات تُرجع العقد الكاملة (`RETURN a, b`) وليس الخصائص (`RETURN a.name, b.name`)
- وحدة تحكم Cypher في BloodHound مخصصة لتصور الرسم البياني، وليس للبيانات الجدولية
- استخدم متصفح Neo4j (localhost:7474) للاستعلامات القائمة على الخصائص
**تصفية الحواف المستنتجة مقابل المجمعة**
- الحواف المستنتجة تستخدم أنواعًا مميزة (مثل `InferredCanAssumeRole` بدلاً من `CanAssumeRole`)
- استعلم فقط عن الحواف المؤكدة: `MATCH p=()-[:CanAssumeRole]->() RETURN p`
- استعلم عن الحواف المستنتجة: `MATCH p=()-[:InferredCanAssumeRole]->() RETURN p`
---
## الترخيص
رخصة MIT - انظر [LICENSE](https://github.com/h4wkst3r/dop2mop/blob/HEAD/LICENSE) للتفاصيل.
| الخيار | الوصف |
|---|
-o, --output FILE | مسار ملف الإخراج (الافتراضي: dop2mop_output.json) |
--zip | ضغط الإخراج إلى ملف ZIP |
--config FILE | مسار ملف الإعدادات YAML/JSON |
--validate | التحقق من صحة الاعتمادات قبل الجمع |
--collectors LIST | قائمة مفصولة بفواصل من المجمعين أو الأسماء المستعارة (مثل github,sm) |
--max-items N | الحد الأقصى للعناصر التي يتم جمعها لكل نوع |
--no-secrets | تخطي تعداد الأسرار/الاعتمادات |
| الخيار | الوصف |
|---|
--azure-subscription-id ID | معرف اشتراك Azure |
--azure-tenant-id ID | معرف المستأجر لـ Azure AD |
--azure-client-id ID | معرف عميل الخدمة الرئيسية (اختياري) |
--azure-client-secret SECRET | سر عميل الخدمة الرئيسية (اختياري) |
--azure-access-token TOKEN | رمز الوصول لـ Azure لمصادقة Azure ML (اختياري) |
--aws-access-key-id KEY| معرف مفتاح الوصول لـ AWS |
--aws-secret-access-key SECRET | مفتاح الوصول السري لـ AWS |
--aws-region REGION | منطقة AWS (الافتراضي: us-east-1) |
--aws-profile PROFILE | اسم ملف تعريف AWS CLI |
| اسم المجمع | المنصة | الاعتمادات المطلوبة |
|---|
GitHubCollector | GitHub | --github-token، --github-org |
AzureDevOpsCollector | Azure DevOps | --azure-devops-token أو --azure-devops-access-token، --azure-devops-org |
AzureMLCollector | Azure ML | --azure-subscription-id، --azure-tenant-id |
SageMakerCollector | AWS SageMaker | --aws-profile أو --aws-access-key-id |
| متغير البيئة | مقابل CLI | الوصف |
|---|
GITHUB_TOKEN | --github-token | رمز الوصول الشخصي لـ GitHub |
GITHUB_ORG | --github-org | اسم مؤسسة GitHub |
GITHUB_ENTERPRISE_URL | --github-enterprise-url | رابط خادم GitHub Enterprise |
AZURE_DEVOPS_TOKEN | --azure-devops-token | رمز PAT لـ Azure DevOps |
AZURE_DEVOPS_ACCESS_TOKEN | --azure-devops-access-token | رمز الوصول لـ Azure DevOps (Bearer) |
AZURE_DEVOPS_ORG | --azure-devops-org | مؤسسة Azure DevOps |
AZURE_SUBSCRIPTION_ID | --azure-subscription-id | معرف اشتراك Azure |
AZURE_TENANT_ID | --azure-tenant-id | معرف مستأجر Azure AD |
AZURE_CLIENT_ID | --azure-client-id | معرف عميل الخدمة الأساسي لـ Azure |
AZURE_CLIENT_SECRET | --azure-client-secret | سر عميل الخدمة الأساسي لـ Azure |
AZURE_ACCESS_TOKEN | --azure-access-token | رمز الوصول لـ Azure لـ Azure ML |
AWS_ACCESS_KEY_ID | --aws-access-key-id | معرف مفتاح الوصول لـ AWS |
AWS_SECRET_ACCESS_KEY | --aws-secret-access-key | مفتاح الوصول السري لـ AWS |
AWS_REGION | --aws-region | منطقة AWS (الافتراضي: us-east-1) |
AWS_PROFILE | --aws-profile | اسم ملف تعريف AWS CLI |
| النوع | الوصف |
|---|
GHOrganization | مؤسسة GitHub |
GHRepository | مستودع GitHub |
GHWorkflow | سير عمل GitHub Actions |
GHSecret | سر GitHub Actions |
ADOOrganization | مؤسسة Azure DevOps |
ADOProject | مشروع Azure DevOps |
ADOPipeline | مسار Azure DevOps |
ADOServiceConnection | اتصال خدمة Azure DevOps (NHI) مع تفاصيل النطاق |
ADOAgent | مجموعة وكلاء Azure DevOps (مستضافة أو ذاتية الاستضافة) |
ADOVariableGroup | مجموعة متغيرات Azure DevOps |
| النوع | الوصف |
|---|
AzMLWorkspace | مساحة عمل Azure ML |
AzMLCompute | مجموعة/مثيل حوسبة Azure ML |
AzMLExperiment | وظيفة/تجربة Azure ML |
AzMLDatastore | مخزن بيانات Azure ML |
AzMLEnvironment | بيئة Azure ML (تعريف الحاوية) |
AzMLModel | نموذج مسجل في Azure ML |
SMDomain | نطاق SageMaker Studio |
SMTrainingJob | وظيفة تدريب SageMaker |
SMModel | نموذج SageMaker |
SMEndpoint | نقطة نهاية SageMaker (تُستخدم أيضًا لنقاط نهاية Azure ML) |
SMNotebook | مثيل دفتر ملاحظات SageMaker |
| هوية موحدة OIDC |
ManagedIdentity | هوية مدارة من Azure |
| حاوية S3 من AWS |
Dataset | مجموعة بيانات ML |
| النوع | حدود الثقة | الوصف |
|---|
TriggersPipeline | TB1 | التزام الكود يؤدي إلى تشغيل CI/CD |
HasBranchProtection | TB1 | المستودع يحتوي على قواعد حماية الفرع |
BypassesProtection | TB1 | حماية فرع ضعيفة/مفقودة (قابلة للاستغلال) |
AuthenticatesAs | TB2 | المسار يستخدم عميل الخدمة الأساسي |
CanAssumeRole | TB2 | هوية OIDC يمكنها افتراض دور IAM |
OIDCTrust | TB2 | سير العمل يستخدم اتحاد OIDC |
UsesServiceConnection | TB2 | المسار يستخدم اتصال خدمة ADO |
PullsImage | TB3 | وظيفة التدريب تسحب صورة الحاوية |
CanPoisonImage | TB3 | المسار يمكنه تعديل صورة الحاوية |
SubmitsJob | TB4 | عميل الخدمة الأساسي يقدم وظيفة ML |
CodeExecution | TB4 | الوظيفة تنفذ كود على الحوسبة |
LoadsDataset | TB5 | وظيفة التدريب تحمل مجموعة البيانات |
CanPoisonDataset | TB5 | المسار يمكنه تعديل مجموعة البيانات |
Deserializes | TB5 | إلغاء تسلسل غير آمن |
InferredSubmitsJob |
| سير العمل قد يقدم وظيفة تدريب عبر OIDC (مستنتج) |
InferredPullsImage | وظيفة التدريب قد تسحب صورة حاوية مسمومة (مستنتج) |
InferredLoadsDataset | وظيفة التدريب قد تحمل مجموعة بيانات مسمومة (مستنتج) |
| النوع | الوصف |
|---|
Contains | علاقة أب-ابن |
MemberOf | عضوية مجموعة |
HasAccessTo | إذن الوصول إلى المورد |
HasExecutionRole | المورد يستخدم دور تنفيذ IAM |
Owns | علاقة ملكية |