defectdojo について
defectdojoは、Claude CodeからMCPツールでDefectDojoの製品、テスト、検出項目を照会・管理するスキルです。スキャンのインポート、CI/CD連携、API利用方法も説明します。
主な機能
- 01MCP経由で製品と検出項目を検索
- 02テスト、エンドポイント、脆弱性統計の確認
- 03エンゲージメントの作成と検出項目の更新
- 04MarkdownまたはJSON形式の応答
- 05スキャンインポートとCI/CDの参考情報
活用シーン
- 01製品内の重大かつ有効な脆弱性の検索
- 02製品またはエンゲージメントの統計確認
- 03検出項目を誤検知として設定、または状態を更新
- 04CI/CDパイプラインでスキャン結果を取り込み
MCP 対応
DefectDojo APIと直接やり取りする12個のMCPツールを提供し、検索のほか、一部の作成・更新操作に対応します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ julianobarbosa/ claude-code-skills --skill defectdojoインストール後、Claude Code で/defectdojoを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/api-v2-reference.mdazure-ad-sso.mdcicd-integration.mdhelm-values.mdtroubleshooting.md詳細
DefectDojo スキル
概要
DefectDojo は、オープンソースの DevSecOps、アプリケーションセキュリティ態勢管理(ASPM)、脆弱性管理プラットフォームです。エンドツーエンドのセキュリティテスト、脆弱性の追跡、重複排除、修正、レポート作成を統合します。
主な機能:
- 200 以上のセキュリティツールにわたる統合脆弱性管理
- スキャンの自動インポートと重複排除
- CI/CD パイプラインとの統合
- 双方向の JIRA 統合
- ロールベースのアクセス制御
- SLA の追跡とレポート作成
- 自動化のための REST API v2
- Claude Code 統合用 MCP ツール
公式リソース:
- ドキュメント:https://docs.defectdojo.com/
- GitHub:https://github.com/DefectDojo/django-DefectDojo
- デモ:https://demo.defectdojo.org (admin / 1Defectdojo@demo#appsec)
MCP ツール(主要なインターフェース)
このスキルでは、DefectDojo API を直接操作するための 12 個の MCP ツールを提供します。手動で API を呼び出す代わりに、これらのツールを使用してください。
読み取り操作
| ツール | 説明 | 主なパラメーター |
|---|---|---|
defectdojo_list_products | プロダクトの一覧表示と検索 | name_contains、prod_type、limit |
defectdojo_get_product | プロダクトの詳細情報を取得 | product_id(必須) |
defectdojo_list_engagements | フィルターを指定してエンゲージメントを一覧表示 | product_id、status、engagement_type |
defectdojo_list_tests | エンゲージメント内のテストを一覧表示 | engagement_id、test_type |
defectdojo_list_findings | 主要ツール — 検出結果を検索 | severity、active、product_id、cwe |
defectdojo_get_finding | 検出結果の詳細を取得 | finding_id(必須) |
defectdojo_get_statistics | 脆弱性の統計情報 | product_id、engagement_id |
defectdojo_list_endpoints | プロダクトのエンドポイントを一覧表示 | product_id、host、protocol |
defectdojo_list_test_types | スキャナーの種類を一覧表示 | name_contains |
書き込み操作
| ツール | 説明 | 主なパラメーター |
|---|---|---|
defectdojo_create_engagement | 新しいエンゲージメントを作成 | product_id、name、engagement_type |
defectdojo_update_finding | 検出結果のステータスを更新 | finding_id、active、verified、false_p |
defectdojo_close_engagement | エンゲージメントを終了 | engagement_id |
使用例
重大度が Critical のアクティブな検出結果をすべて一覧表示する:
Use defectdojo_list_findings with:
- severity: "Critical"
- active: true
プロダクトの脆弱性統計を取得する:
Use defectdojo_get_statistics with:
- product_id: 1
SQL インジェクションの検出結果を検索する:
Use defectdojo_list_findings with:
- cwe: 89
- active: true
検出結果を誤検知としてマークする:
Use defectdojo_update_finding with:
- finding_id: 123
- false_p: true
- active: false
CI/CD エンゲージメントを作成する:
Use defectdojo_create_engagement with:
- product_id: 1
- name: "Pipeline Security Scan"
- engagement_type: "CI/CD"
レスポンス形式
すべてのツールは、response_format パラメーターを使って 2 種類の出力形式に対応しています。
markdown(デフォルト)— 人が読みやすい形式の出力json— プログラムによる処理用の生の JSON
MCP サーバーの設定
MCP サーバーは .mcp.json で設定します。
{
"mcpServers": {
"defectdojo": {
"command": "python",
"args": [".claude/mcp-servers/defectdojo-mcp/defectdojo_mcp.py"],
"env": {
"DEFECTDOJO_URL": "https://defectdojo.dev.example.com",
"DEFECTDOJO_API_TOKEN": "${DEFECTDOJO_API_TOKEN}"
}
}
}
}
環境変数:
DEFECTDOJO_URL— DefectDojo インスタンスの URLDEFECTDOJO_API_TOKEN—/api/key-v2から取得する API トークン
データモデル(プロダクト階層)
DefectDojo では、セキュリティ作業を整理するために、相互に関連する 5 つのデータクラスを使用します。
Product Type
└── Product
└── Engagement (CI/CD or Interactive)
└── Test
└── Finding
└── Endpoint
プロダクトタイプ
プロダクトをビジネス領域、チーム、またはセキュリティ領域ごとに分類する、組織の最上位レベルです。カテゴリーレベルでロールベースのアクセス制御を可能にします。
プロダクト
セキュリティテストの対象となる個々のアプリケーションまたはシステムです。各プロダクトは、以下を個別に管理します。
- 独自のテスト履歴
- 重複排除の範囲(検出結果の重複排除はプロダクト内で行われます)
- SLA の設定
- チームの割り当て
エンゲージメント
1 つ以上のテストを含む、予定されたテスト期間です。種類は 2 つあります。
| 種類 | 目的 | 使用例 |
|---|---|---|
| CI/CD | 自動化パイプラインとの統合 | ビルド/コミットごとの自動スキャン |
| Interactive | エンジニアによる手動テスト | ペネトレーションテスト、手動レビュー |
テスト
ツールの種類ごとにまとめられた個々のセキュリティスキャンです。テストでは以下に対応しています。
- 再インポート(既存のテストに検出結果を追加)
- 環境タグの付与
- バージョンの追跡
検出結果
テスト中に発見された具体的な脆弱性:
| 重大度 | 説明 |
|---|---|
| Critical | 直ちに対応が必要です |
| High | 優先度の高い修正が必要です |
| Medium | 標準的な優先度です |
| Low | 優先度は低いです |
| Info | 情報のみです |
検出結果の状態:
- 有効 / 無効
- 検証済み / 未検証
- 重複
- 緩和済み
- 誤検知
- リスク受容
- 対象範囲外
エンドポイント
影響を受けるホスト、URL、またはシステムへの参照です。インフラストラクチャのコンポーネントごとに脆弱性を追跡できます。
API v2 リファレンス
注: ほとんどの操作では、API を直接呼び出す代わりに、上記の MCP ツール を使用してください。API の直接呼び出しは、スキャンのインポート、または MCP ツールで対応していない操作に限って使用してください。
認証
API トークンは次の場所で生成します:<your-instance>/api/key-v2
# Header format
Authorization: Token <api_key>
環境変数:
DD_API_TOKENS_ENABLED=False- API トークンを完全に無効にしますDD_API_TOKEN_AUTH_ENDPOINT_ENABLED=False- トークン認証エンドポイントのみを無効にします
主なエンドポイント
| エンドポイント | メソッド | 用途 |
|---|---|---|
/api/v2/import-scan/ | POST | 初回のスキャンインポート |
/api/v2/reimport-scan/ | POST | 2 回目以降のインポート(重複排除) |
/api/v2/products/ | GET/POST | プロダクトを管理 |
/api/v2/engagements/ | GET/POST | エンゲージメントを管理 |
/api/v2/tests/ | GET/POST | テストを管理 |
/api/v2/findings/ | GET/POST/PATCH | 検出結果を管理 |
/api/v2/endpoints/ | GET/POST | エンドポイントを管理 |
/api/v2/users/ | GET | ユーザー一覧を取得 |
スキャンインポートのパラメーター
curl -X POST "https://defectdojo.example.com/api/v2/import-scan/" \
-H "Authorization: Token <api-token>" \
-F "scan_type=<scanner-type>" \
-F "[email protected]" \
-F "engagement=<engagement-id>" \
-F "minimum_severity=Info" \
-F "active=true" \
-F "verified=false" \
-F "scan_date=2024-01-15"
主なパラメーター:
| パラメーター | 説明 |
|---|---|
scan_type | スキャナー識別子(例:「Trivy Scan」、「Semgrep JSON Report」) |
engagement | 対象のエンゲージメント ID |
test_title | カスタムテスト名 |
minimum_severity | フィルターのしきい値(Info、Low、Medium、High、Critical) |
active | 検出結果を有効としてマークします(ブール値) |
verified | 検出結果を検証済みとしてマークします(ブール値) |
scan_date | スキャン完了日を上書きします |
do_not_reactivate | クローズ済みの検出結果が再オープンされないようにします |
auto_create_context | コンテキストが存在しない場合にプロダクト/エンゲージメントを自動作成します |
スキャンの再インポート(重複排除)
curl -X POST "https://defectdojo.example.com/api/v2/reimport-scan/" \
-H "Authorization: Token <api-token>" \
-F "scan_type=Trivy Scan" \
-F "[email protected]" \
-F "test=<test-id>" \
-F "do_not_reactivate=true"
再インポートエンドポイントは、次の処理を行います。
- 新規の検出結果と既存の検出結果を識別します
- 既存の検出結果を更新します
- 新しいスキャンに含まれない検出結果をクローズします
auto_create_context=trueの場合、コンテキストを自動作成できます
インタラクティブ API ドキュメント
Swagger UI は次の場所から利用できます:<your-instance>/api/v2/oa3/swagger-ui/
CI/CD 統合
パイプライン統合パターン
# GitLab CI Example
stages:
- security-scan
- upload-results
trivy-scan:
stage: security-scan
script:
- trivy image --format json -o trivy-results.json $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
artifacts:
paths:
- trivy-results.json
upload-to-defectdojo:
stage: upload-results
script: |
curl -X POST "${DEFECTDOJO_URL}/api/v2/reimport-scan/" \
-H "Authorization: Token ${DEFECTDOJO_API_TOKEN}" \
-F "scan_type=Trivy Scan" \
-F "[email protected]" \
-F "product_name=${CI_PROJECT_NAME}" \
-F "engagement_name=CI/CD-${CI_PIPELINE_ID}" \
-F "auto_create_context=true" \
-F "minimum_severity=Low"
Jenkins 統合
DefectDojo Jenkins プラグインを次の場所からインストールします:https://plugins.jenkins.io/defectdojo/
パイプラインの設定:
pipeline {
agent any
environment {
DEFECTDOJO_URL = 'https://defectdojo.example.com'
DEFECTDOJO_API_KEY = credentials('defectdojo-api-key')
}
stages {
stage('Security Scan') {
steps {
sh 'trivy image --format json -o trivy.json myapp:latest'
}
}
stage('Upload to DefectDojo') {
steps {
defectDojoPublisher(
artifact: 'trivy.json',
productName: 'MyApp',
scanType: 'Trivy Scan',
engagementName: "Build-${BUILD_NUMBER}"
)
}
}
}
}
GitHub Actions 統合
name: Security Scan
on: [push]
jobs:
security:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run Trivy
uses: aquasecurity/trivy-action@master
with:
scan-type: 'fs'
format: 'json'
output: 'trivy-results.json'
- name: Upload to DefectDojo
run: |
curl -X POST "${{ secrets.DEFECTDOJO_URL }}/api/v2/reimport-scan/" \
-H "Authorization: Token ${{ secrets.DEFECTDOJO_TOKEN }}" \
-F "scan_type=Trivy Scan" \
-F "[email protected]" \
-F "product_name=${{ github.repository }}" \
-F "engagement_name=GitHub-${{ github.run_id }}" \
-F "auto_create_context=true"
Python API の例
ヒント: Claude Code とのやり取りには、Python コードを記述する代わりに MCP ツール(
defectdojo_list_findingsなど)を使用してください。以下の例は、CI/CD スクリプトや外部連携向けです。
基本的な API 接続
import requests
class DefectDojoAPI:
def __init__(self, url, api_token):
self.url = url.rstrip('/')
self.headers = {
'Authorization': f'Token {api_token}',
'Accept': 'application/json'
}
def get_products(self):
response = requests.get(
f'{self.url}/api/v2/products/',
headers=self.headers
)
response.raise_for_status()
return response.json()
def import_scan(self, engagement_id, scan_type, file_path, **kwargs):
with open(file_path, 'rb') as f:
data = {
'engagement': engagement_id,
'scan_type': scan_type,
'minimum_severity': kwargs.get('minimum_severity', 'Info'),
'active': kwargs.get('active', True),
'verified': kwargs.get('verified', False),
}
files = {'file': f}
response = requests.post(
f'{self.url}/api/v2/import-scan/',
headers={'Authorization': self.headers['Authorization']},
data=data,
files=files
)
response.raise_for_status()
return response.json()
# Usage
api = DefectDojoAPI('https://defectdojo.example.com', 'your-api-token')
products = api.get_products()
プロダクトとエンゲージメントの作成
def create_product(api, name, prod_type_id, description=''):
response = requests.post(
f'{api.url}/api/v2/products/',
headers=api.headers,
json={
'name': name,
'prod_type': prod_type_id,
'description': description
}
)
response.raise_for_status()
return response.json()
def create_engagement(api, product_id, name, target_start, target_end,
engagement_type='CI/CD'):
response = requests.post(
f'{api.url}/api/v2/engagements/',
headers=api.headers,
json={
'name': name,
'product': product_id,
'target_start': target_start,
'target_end': target_end,
'engagement_type': engagement_type,
'status': 'In Progress'
}
)
response.raise_for_status()
return response.json()
検出結果のクエリ
def get_findings(api, product_id=None, severity=None, active=True):
params = {'active': active}
if product_id:
params['test__engagement__product'] = product_id
if severity:
params['severity'] = severity
response = requests.get(
f'{api.url}/api/v2/findings/',
headers=api.headers,
params=params
)
response.raise_for_status()
return response.json()
# Get all critical findings
critical = get_findings(api, severity='Critical')
サポート対象のセキュリティツール(200 以上)
SAST/コード分析
- Bandit、Checkmarx、Fortify、SonarQube、Semgrep
- CodeQL、Horusec、Brakeman、SpotBugs
依存関係/SCA
- Snyk、OWASP Dependency-Check、Dependency-Track
- npm Audit、pip-audit、Trivy、Safety
DAST/Web スキャン
- Burp Suite、OWASP ZAP、Nikto、Nessus
- Qualys、OpenVAS、Acunetix、AppScan
コンテナー/インフラストラクチャ
- Trivy、Aqua、Anchore、Wiz、NeuVector
- kube-bench、Kubescape、Prisma Cloud
シークレット検出
- Gitleaks、Trufflehog、Detect-secrets
- GitHub Secret Scanning
クラウドセキュリティ
- AWS Inspector、AWS Prowler、ScoutSuite
- Azure Security Center、Checkov
IaC スキャン
- Checkov、Terrascan、KICS、TFSec、Dockle
全リスト:https://docs.defectdojo.com/supported_tools/
JIRA 統合
設定
-
システム設定で有効にする:
Configuration > System Settings > Enable JIRA Integration -
JIRA インスタンスを追加する:
Enterprise Settings > JIRA Instances > + New JIRA Instance -
Webhook を設定する(双方向同期):
- JIRA で、次の URL を指定する Webhook を作成します:
https://<defectdojo>/jira/webhook/<webhook-secret> - DefectDojo で「Enable JIRA web hook」を有効にします
- JIRA で、次の URL を指定する Webhook を作成します:
環境変数
extraEnv:
- name: DD_JIRA_URL
value: "https://your-jira.atlassian.net"
- name: DD_JIRA_MAX_RETRIES
value: "3"
機能
- 検出結果を JIRA の課題として登録
- コメントの双方向同期
- JIRA の課題がクローズされると検出結果を自動クローズ
- SLA 通知を JIRA のコメントとして送信
プロジェクトファイルの場所
| ファイルの種類 | パス |
|---|---|
| ApplicationSet | infra-team/applicationset/defectdojo.yaml |
| Helm Values | argo-cd-helm-values/kube-addons/defectdojo/<cluster>/values.yaml |
| SecretProviderClass | argo-cd-helm-values/kube-addons/defectdojo/<cluster>/secretproviderclass.yaml |
環境設定
| クラスター | Key Vault | Azure AD テナント ID |
|---|---|---|
| example-app-dev | kv-example-dev-hlg | <TENANT_ID> |
Azure AD アプリ登録
| 設定 | 値 |
|---|---|
| アプリケーション(クライアント)ID | <AZURE_AD_APP_ID> |
| テナント ID | <TENANT_ID> |
| リダイレクト URI | https://defectdojo.dev.example.com/complete/azuread-tenant-oauth2/ |
Azure AD SSO の設定
必須の環境変数
extraEnv:
# Enable Azure AD OAuth2
- name: DD_SOCIAL_AUTH_AZUREAD_TENANT_OAUTH2_ENABLED
value: "True"
# Application (Client) ID
- name: DD_SOCIAL_AUTH_AZUREAD_TENANT_OAUTH2_KEY
value: "<client-id>"
# Directory (Tenant) ID
- name: DD_SOCIAL_AUTH_AZUREAD_TENANT_OAUTH2_TENANT_ID
value: "<tenant-id>"
# Client Secret (from Key Vault)
- name: DD_SOCIAL_AUTH_AZUREAD_TENANT_OAUTH2_SECRET
valueFrom:
secretKeyRef:
name: defectdojo
key: DD_SOCIAL_AUTH_AZUREAD_TENANT_OAUTH2_SECRET
グループ同期
extraEnv:
# Sync groups from Azure AD token
- name: DD_SOCIAL_AUTH_AZUREAD_TENANT_OAUTH2_GET_GROUPS
value: "True"
# Remove users from groups when removed in Azure AD
- name: DD_SOCIAL_AUTH_AZUREAD_TENANT_OAUTH2_CLEANUP_GROUPS
value: "True"
# Filter to only sync DefectDojo groups
- name: DD_SOCIAL_AUTH_AZUREAD_TENANT_OAUTH2_GROUPS_FILTER
value: "^G-Usuarios-DefectDojo-.*"
必要な Azure AD のアクセス許可(アプリケーションの種類、管理者の同意が必要):
Group.Read.AllGroupMember.Read.AllUser.Read.All
Azure AD SSO の詳細については、references/azure-ad-sso.md を参照してください。
DefectDojo のロール
| ロール | アクセス許可 |
|---|---|
| Superuser | システムへの完全なアクセス、ユーザーの管理、システム設定 |
| Owner | プロダクトの削除、他のユーザーのオーナーへの指定 |
| Maintainer | プロダクトの編集、メンバーの追加、検出結果の削除 |
| Writer | エンゲージメント、テスト、検出結果の追加・編集 |
| Reader | 閲覧のみ、コメントの追加 |
| API Importer | CI/CD パイプライン向けの制限付き API アクセス |
ロールマッピング用 Azure AD グループ
| Azure AD グループ | DefectDojo のロール |
|---|---|
G-Usuarios-DefectDojo-Superuser | Superuser |
G-Usuarios-DefectDojo-Owner | Owner |
G-Usuarios-DefectDojo-Maintainer | Maintainer |
G-Usuarios-DefectDojo-Writer | Writer |
G-Usuarios-DefectDojo-Reader | Reader |
Helm チャートのクイックリファレンス
主な値
# Host configuration
host: defectdojo.dev.example.com
siteUrl: https://defectdojo.dev.example.com
# Secrets (use CSI driver)
createSecret: false
disableHooks: true
# Django
django:
replicas: 1
ingress:
enabled: true
activateTLS: true
className: nginx
# Celery (keep beat at 1 replica)
celery:
beat:
enabled: true
replicas: 1
worker:
enabled: true
replicas: 1
# Database
postgresql:
enabled: true
# Cache
redis:
enabled: true
Helm の値に関する詳細については、references/helm-values.md を参照してください。
Kubernetes のデプロイ
Helm の基本インストール
git clone https://github.com/DefectDojo/django-DefectDojo
cd django-DefectDojo
helm install defectdojo ./helm/defectdojo \
-n defectdojo --create-namespace \
--set django.ingress.enabled=true \
--set django.ingress.activateTLS=false \
--set createSecret=true \
--set createRabbitMqSecret=true \
--set createPostgresqlSecret=true
DefectDojo へのアクセス
kubectl port-forward --namespace=defectdojo service/defectdojo-django 8080:80
シークレット管理
シークレットは Azure Key Vault CSI Driver で管理します:
| Key Vault のシークレット | K8s シークレットキー | 用途 |
|---|---|---|
defectdojo-admin-password | DD_ADMIN_PASSWORD | 管理者ユーザーのパスワード |
defectdojo-secret-key | DD_SECRET_KEY | Django のシークレットキー |
defectdojo-credential-aes-key | DD_CREDENTIAL_AES_256_KEY | 認証情報の暗号化 |
defectdojo-azuread-client-secret | DD_SOCIAL_AUTH_AZUREAD_TENANT_OAUTH2_SECRET | Azure AD クライアントシークレット |
よくあるトラブルシューティング
SSO ログイン後にユーザーがグループに所属していない
症状: ユーザーは Azure AD 経由でログインしましたが、「No group members found」と表示されます
解決方法:
DD_SOCIAL_AUTH_AZUREAD_TENANT_OAUTH2_GET_GROUPS=Trueが設定されていることを確認します- Azure AD API のアクセス許可を確認します(管理者の同意を得た Group.Read.All)
- Azure AD トークンにグループのクレームが含まれていることを確認します(ロールのクレームではありません)
- グループを同期するには、ユーザーはログアウトして再度ログインする必要があります
- DefectDojo UI で一致するグループを作成します
HTTPS リダイレクト URI の不一致(ADSTS50011)
エラー:「要求で指定されたリダイレクト URI が一致しません」
解決方法: 次の設定を確認します:
- name: DD_SESSION_COOKIE_SECURE
value: "True"
- name: DD_CSRF_COOKIE_SECURE
value: "True"
- name: DD_SECURE_PROXY_SSL_HEADER
value: "True"
ERR_TOO_MANY_REDIRECTS
原因: TLS 終端プロキシで DD_SECURE_SSL_REDIRECT=True が設定されています
解決方法: NGINX Ingress の背後では DD_SECURE_SSL_REDIRECT=False に設定します
緊急ログインアクセス
SSO が機能しない場合は、標準のログインフォームにアクセスしてください。
https://defectdojo.dev.example.com/login?force_login_form
トラブルシューティングの完全なガイドについては、references/troubleshooting.md をご覧ください。
便利なコマンド
Pod のステータスを確認する
KUBECONFIG=~/.kube/aks-rg-example-dev-config kubectl get pods -n defectdojo
ログを表示する
KUBECONFIG=~/.kube/aks-rg-example-dev-config kubectl logs -n defectdojo -l app.kubernetes.io/name=defectdojo -c uwsgi
デプロイメントを再起動する
KUBECONFIG=~/.kube/aks-rg-example-dev-config kubectl rollout restart deployment/defectdojo-django -n defectdojo
追加のリファレンス
MCP サーバー
- MCP サーバーの README - MCP サーバーのセットアップと使用方法
- MCP サーバーのソース - サーバーの実装
スキルのリファレンス
- Azure AD SSO の設定 - SSO の完全なセットアップガイド
- Helm Values のリファレンス - Helm チャートの設定全般
- トラブルシューティングガイド - よくある問題と解決策
- API v2 のリファレンス - API ドキュメント全般
- CI/CD 統合ガイド - パイプライン統合のパターン
外部
- 公式ドキュメント
- Swagger UI - インタラクティブな API ドキュメント
注意事項
- 重複排除は製品ごとに行われ、全体では行われません: 2 つの製品に同じ CVE がある場合、2 件としてカウントされるため、ポートフォリオのメトリクスが膨らみます。全体の件数が必要な場合は、hash_code アルゴリズムを使用して製品間の重複排除を設定してください。
reimport-scanは見つからない検出結果を通知なしにクローズします: 部分的なスキャン(全パスではなく 1 つのパス)を再インポートすると、新しいファイルに含まれないすべての検出結果が自動的にクローズされます。do_not_reactivate=trueを使用し、テストの範囲を慎重に設定してください。auto_create_context=trueは名前の揺れによって重複製品を作成します: 「MyApp」、「myapp」、「MyApp 」は 3 つの製品として登録されます。上流でproduct_nameを正規化してください。DefectDojo はあいまい一致を行いません。- API トークンはチーム単位ではなくユーザー単位です: パイプライントークンは、作成者のすべての権限を継承します。人間のユーザーのトークンを再利用するのではなく、API Importer ロールを持つ専用の CI ユーザーを作成してください。
- NGINX Ingress の背後で
DD_SECURE_SSL_REDIRECT=Trueにすると、リダイレクトループが発生します: TLS は Ingress で終端されますが、その後 Django が HTTP を HTTPS に再度リダイレクトします。これをFalseに設定し、TLS の適用は Ingress に任せてください。 - Azure AD グループの同期はログイン時にのみ実行されます: ユーザーを Azure AD グループに追加しても、同期はさかのぼって行われません。DefectDojo に新しいメンバーシップを認識させるには、ユーザーがログアウトして再度ログインする必要があります。