コンテンツにスキップ

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として必ず追加してください。

  1. Project Settings → Repositories → Policies → Branch Policies に移動します
  2. mainブランチを選択します
  3. Build Validationを追加します
  4. このパイプラインを選択します
  5. 以下を設定します:
    • Trigger: Automatic