# Local Scannerを使用したAzure DevOpsのPRゲーティング

Aikido Local Scannerを使用すると、CIパイプラインでセキュリティゲートを適用できます。

{% hint style="info" %}
クラウド接続されたワークスペース（GitHub、BitBucketなど）でもPRゲーティングを使用できます。CIの[統合セクション](https://help.aikido.dev/section/ci-integrations/sg3q6UrIf4qE)をご覧ください。
{% endhint %}

PRゲーティングは、新しいコードがデフォルトブランチにマージされる前に、セキュリティ基準を満たしていることを保証します。スキャン対象はプルリクエストで導入された変更のみです。設定した重大度のしきい値以上の新しい問題がスキャンで検出された場合、CIパイプラインは失敗します。

これにより、既存の検出結果は別途対処しつつ、新たな脆弱性が持ち込まれるのを防ぐことができます。

{% hint style="info" %}
リリース時にチェックを適用したいチーム向けに、[リリースゲーティング](https://help.aikidogov.us/docs/docs-ja/container-image-scanning/local-image-scanning/release-gating-for-container-images-using-local-image-scanner)もサポートしています。
{% endhint %}

PRゲーティングを有効にするには、`--fail-on <severity>` オプションを追加して、希望する重大度レベルを選択します。次に、`--gating-mode pr` オプションを追加して、PRゲーティングを実行することを指定します。また、ベースコミット（`--base-commit-id <commit-id>`）とヘッドコミット（`--head-commit-id <commit-id>`）も指定する必要があります。ベースコミットIDで以前にスキャンが実行されている場合、スキャン結果はその結果と比較されます。そうでない場合は、デフォルトブランチでの最新のスキャン結果と比較されます。

Azure DevOps環境でLocal Scannerをセットアップする方法の概要については、[こちらの記事](https://help.aikidogov.us/docs/docs-ja/code-scanning/local-code-scanning/github-action-setup-for-local-code-scanning)をご覧ください。\
PRゲーティングスキャンのセットアップ例：

```yaml
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 . \
        --apikey $(AIKIDO_API_KEY) \
        --repositoryname $BUILD_REPOSITORY_NAME \
        --branchname $(System.PullRequest.SourceBranch) \
        --gating-mode pr \
        --fail-on critical \
        --git-based-pr-gating \
        --base-commit-id $(baseCommitId) \
        --head-commit-id $(System.PullRequest.SourceCommitId)
    displayName: 'Run Aikido PR Scan'
    workingDirectory: $(Build.SourcesDirectory)
```

このパイプラインを、mainブランチのBuild Validationとして必ず追加してください：

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