Local ScannerによるAzure DevOpsのPR gating
Aikido Local Scannerを使うと、CIパイプラインにセキュリティゲートを設定できます。
PR gatingは、新しいコードがデフォルトブランチにマージされる前に、セキュリティ基準を満たしていることを保証します。プルリクエストで導入された変更のみをスキャンします。スキャンによって、設定した重要度のしきい値以上の新しい問題が検出された場合、CIパイプラインは失敗します。
これにより、既存の検出結果は別途対応しつつ、新しい脆弱性の混入を防ぐことができます。
PR gatingを有効にするには、--fail-on <severity> オプションを追加して希望の重要度レベルを選択します。次に、PR gatingを実行することを示す --gating-mode pr オプションを追加します。また、base(--base-commit-id <commit-id>)とhead commit(--head-commit-id <commit-id>)も指定する必要があります。base commit idに対して以前スキャンが実行されていた場合は、その結果と比較されます。実行されていない場合は、デフォルトブランチの最新スキャンと比較されます。
Azure DevOps環境でのLocal Scannerの設定に関する一般的な情報は、こちらの記事をご参照ください。
PR gatedスキャンの設定例:
trigger: none
pr: branches: include: - main
pool: vmImage: 'ubuntu-latest'
container: image: aikidosecurity/local-scanner:latest options: --entrypoint=""
steps: - checkout: self clean: true fetchDepth: 0
- bash: | echo "PR Target Branch (full ref): $SYSTEM_PULLREQUEST_TARGETBRANCH" echo "PR Source Branch (full ref): $SYSTEM_PULLREQUEST_SOURCEBRANCH"
# strip prefix TARGET_BRANCH=${SYSTEM_PULLREQUEST_TARGETBRANCH#refs/heads/} echo "Target branch stripped: $TARGET_BRANCH"
# fetch target branch to compute merge base git fetch origin "$TARGET_BRANCH"
BASE_COMMIT=$(git merge-base HEAD "origin/$TARGET_BRANCH") echo "Base commit SHA: $BASE_COMMIT"
echo "##vso[task.setvariable variable=baseCommitId]$BASE_COMMIT" displayName: 'Get base commit SHA'
- script: | aikido-local-scanner scan $BUILD_SOURCESDIRECTORY \ --apikey $(AIKIDO_API_KEY) \ --repositoryname $BUILD_REPOSITORY_NAME \ --branchname $(System.PullRequest.SourceBranch) \ --gating-mode pr \ --fail-on critical \ --base-commit-id $(baseCommitId) \ --head-commit-id $(System.PullRequest.SourceCommitId) displayName: 'Run Aikido PR Scan'このパイプラインを、mainブランチのBuild Validationとして必ず追加してください。
- Project Settings → Repositories → Policies → Branch Policies に移動します
- mainブランチを選択します
- Build Validationを追加します
- このパイプラインを選択します
- 以下を設定します:
- Trigger: Automatic