# ローカルイメージスキャナーを使用したコンテナイメージのPRゲーティング

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

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

これにより、既存の検出結果は別途対処しながら、新しい脆弱性の混入を防ぐことができます。

{% hint style="info" %}
リリース時にチェックを適用したいチーム向けに、[リリースゲーティング](https://help.aikido.dev/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に対して以前にスキャンが実行されている場合、スキャン結果はその結果と比較されます。実行されていない場合は、イメージに対する最新のスキャン結果と比較されます。

PRゲーティングコマンドの例：

```
./aikido-local-scanner image-scan your-image-name --apikey AIK_CI_xxx --fail-on critical --gating-mode pr --base-commit-id abc123 --head-commit-id def456 
```

### 例 <a href="#examples" id="examples"></a>

#### GitHub <a href="#github" id="github"></a>

GitHub環境でLocal Scannerをセットアップする方法に関する一般的な情報については、[こちらの記事](https://help.aikido.dev/code-scanning/local-code-scanning/github-action-setup-for-local-code-scanning)を参照してください。&#x20;

PRゲーティング用の `.github/workflows/aikido-scan.yml` の例：

```yaml
name: Aikido Docker build and scan

on:
  pull_request:
    branches:
      - main

jobs:
  build-and-scan:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3

      - name: Build Docker image
        run: docker build -t your-local-image-name .

      - name: Run Aikido image scan
        run: |
          docker run --rm \
            -v /var/run/docker.sock:/var/run/docker.sock \
            aikidosecurity/local-scanner \
            image-scan your-local-image-name \
            --apikey ${{ secrets.AIKIDO_API_KEY }} \
            --fail-on critical \
            --gating-mode pr \
            --base-commit-id ${{ github.event.pull_request.base.sha }} \
            --head-commit-id ${{ github.event.pull_request.head.sha }} 
```

#### Azure DevOps Server <a href="#azure-devops-server" id="azure-devops-server"></a>

Azure DevOps環境でLocal Scannerをセットアップする方法に関する一般的な情報については、[こちらの記事](https://help.aikido.dev/container-image-scanning/local-image-scanning/azure-devops-server-setup-for-local-image-scanning)を参照してください。

PRゲーティングの例：

```yaml
trigger: none

pr:
  branches:
    include:
      - 'main'

pool:
  vmImage: ubuntu-latest

steps:
- script: docker build -t my-image .
  displayName: 'Build docker image'  
- script: | 
    docker run --rm -v /var/run/docker.sock:/var/run/docker.sock aikidosecurity/local-scanner image-scan my-image \
        --apikey $(AIKIDO_API_KEY) \
        --fail-on critical \
        --gating-mode pr \
        --base-commit-id abc123 \
        --head-commit-id def456
  displayName: 'Run Aikido scan'
```

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

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