Guardrail Ledger ドキュメント

パイプラインを接続する

スキャナーは、お客様のエージェントまたはランナー上で動作します。タスクまたは Action がその SARIF を収集してワークスペースに送信し、ゲートの結果を読み取ります。

1. 取り込みトークンを発行する

オーナーまたは管理者がパイプラインページを開き、トークン名を入力して「取り込みトークンを発行」を選びます。トークンは一度だけ表示されます。Azure Pipelines ではシークレット変数 GUARDRAIL_TOKEN として、GitHub ではリポジトリのシークレット GUARDRAIL_INGEST_TOKEN として保存してください。

2. 4 つのスキャナーをインストールする

Trivy、Gitleaks、Checkov、Opengrep が、エージェントまたはランナーの PATH 上にある必要があります。タスクはこれらをインストールしません。

3a. Azure DevOps

  1. パイプラインページで、Azure DevOps の組織名 (dev.azure.com/<organisation> の名前部分) を入力し、「この組織と拡張機能を共有」を選びます。
  2. そこに表示される Marketplace のリンクを開き、「無料で入手」を選んで組織を選びます。インストールには、その組織で拡張機能を管理する権限が必要です。拡張機能が共有されるまでは、リンクは表示されません。
  3. azure-pipelines.yml にステップを追加し、プルリクエストでパイプラインを実行します。
- task: GuardrailLedgerScan@0
  inputs:
    guardrailUrl: 'https://<workspace>.guardrail-ledger.com'
    ingestToken: '$(GUARDRAIL_TOKEN)'
  env:
    SYSTEM_ACCESSTOKEN: $(System.AccessToken)

env の行により、タスクはゲートの結果をプルリクエストにコメントできます。プロジェクトのビルドサービス ID には、リポジトリに対する「プルリクエストへの投稿」権限も必要です。

3b. GitHub Actions

  1. パイプラインページで、action.yml と index.js をダウンロードします。これらを .github/actions/guardrail-ledger/action.yml と .github/actions/guardrail-ledger/dist/index.js としてコミットします。
  2. パイプラインページに表示されるワークフローを追加します。このワークフローはスキャナーをインストールし、ワークスペースのアドレスとシークレット GUARDRAIL_INGEST_TOKEN を指定して Action を実行します。
  3. リポジトリ内のブランチからのプルリクエストでスキャンを実行します。フォークでは、GitHub はジョブにシークレットを渡しません。

Action がコードを読み取り、プルリクエストにコメントできるように、ジョブには次の権限が必要です。

permissions:
  contents: read
  pull-requests: write

その他の CI

SARIF を出力できる CI であれば、ワークスペースに送信できます。本文は repo と sarif を含む JSON で、トークンは Bearer ヘッダーに入れます。

curl -sS -X POST 'https://<workspace>.guardrail-ledger.com/api/v1/ingest/sarif' \
  -H "Authorization: Bearer $GUARDRAIL_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"repo":"example-repo","sarif":{"version":"2.1.0","runs":[...]}}'

スキャナーが失敗した場合

スキャナーが見つからない、クラッシュする、エラーで終了する、または使用可能な SARIF を出力しない場合、ステップは失敗し、そのスキャナーの名前を示します。この場合、何も送信されません。ほかのスキャナーで続行するには、Azure DevOps タスクで allowMissingScanners: true を、Action で allow-missing-scanners: true を設定します。この場合、実行は不完全なものとして送信されるため、その実行では検出結果は解決されず、不足している分についてゲートは通過しません。

送信される内容

タスクは、スキャナーの SARIF 結果、リポジトリ名、コミット、プルリクエスト番号、ビルドを実行した人のログイン名、および AGENTS.md や mcp.json などの AI ツール用ファイルのパスを送信します。送信前に、SARIF からコードスニペットとコンテキスト行を削除します。リポジトリはアップロードしません。スキャナーの出力は、ソースの外にあるエージェントの一時ディレクトリに書き込まれ、読み取り後に削除されます。