Skip to main content

設定するContrast AI SmartFix

法的免責事項

Contrast AI SmartFixをご利用になる場合、お客様のコードおよびその他のデータは、お客様が選択するLLMに送信されることに同意するものとします。LLMへのデータ送信およびLLMによって生成された出力は、いずれも当該Contrast AI SmartFixLLMの利用規約が適用されます。Contrast AI SmartFixの利用は、完全に自己責任となります。

Contrast AI SmartFixを使用するには、GitHubリポジトリにワークフローファイル(例、.github/workflows/smartfix.yml)を追加します。

開始する前に

  • Contrast Assess:アプリケーションでContrast Assessが有効になっていることを確認して下さい。

  • Contrast Scan (SAST): To remediate static findings, ensure that Contrast Scan is enabled and that your applications have been scanned. SAST finding remediation is available in NorthstarNorthstar only since findings are sourced from Contrast Code.

  • サポートされる脆弱性:重大および高

  • サポートされている言語: Java、.NET Core、.NET Framework、Node.js、Python。

  • GitHub:プロジェクトがGitHubでホストされ、GitHub Actionsを使用していることを確認して下さい。

  • API専用ユーザ:Contrastで、「組織の閲覧」アクションと「アプリケーションの編集」アクションがあるロールを持つAPI専用サービスユーザを作成して下さい。

  • Contrastの認証情報:Contrastのホスト名、組織ID、アプリケーションID、認証キー、APIキーが必要です。

    Contrastウェブインターフェースのユーザー設定で、組織ID、認証キー、およびAPIキーを見つけることができます。アプリケーションIDを確認するには、Contrastウェブインターフェースの「アプリケーション」ページでアプリケーションを選択します。URL内のapplications/の後の数字がIDです。

    The contrast_app_id is required for Contrast Assess IAST deployments, but can be omitted for SAST-only NorthstarNorthstar deployments.

  • ビルド コマンド:アプリケーションをビルドしてテストを実行するための信頼できるコマンドがあることを確認します。例えば、mvn clean verifygradle clean build test などのコマンドを使用できます。

    このコマンドは、SmartFixのワークフローに含める必要があります。

  • 大規模言語モデル(LLM)のアカウントとAPIキー:例えば、Bedrockの場合はAWSアカウント、直接Anthropic APIを使用する場合はAnthropicアカウントなど。

  • 推奨されるLLM:Anthropic Claude Sonnet(例、AWS Bedrockや直接Anthropic APIを使用するClaude 3.7 Sonnet)。

    LiteLLMのドキュメントに、agent_modelに対する文字列の情報が記載されています。

  • 除外:クロスサイト リクエスト フォージェリ (CSRF) は、修正が複雑で API の変更が必要になることが多いため、現在除外されています。Contrastによる継続的なテストに基づいて、その他の特定の脆弱性の種類は除外される場合があります。

SmartFixベストプラクティス

  • まずは1つのアプリケーションからSmartFixのワークフローを知り、最適な設定を理解するために、最初は1つのアプリケーションで試してみましょう。

  • PRのレビューとテストSmartFixでは正確な修正を目指していますが、生成されたPRをコードベースにマージする前に、必ずレビューとテストを行って下さい。

  • max_open_prsの微調整max_open_prs設定(プルリクエスト数)は、PRのレビューとマージを行う担当の許容範囲に応じて調整して下さい。

  • 特定 LLMバージョンの使用:一貫した結果を得るには、使用するLLMを特定のバージョンに固定して下さい。

手順

  1. ワークフローファイルを作成:GitHubのリポジトリに、新しいワークフローファイルを作成します。

    SmartFixワークフロー例を参考として使用するか、https://github.com/Contrast-Security-OSS/contrast-ai-smartfix-action/blob/main/docs/contrast-ai-smartfix.yml.templateの完全な例を参照して下さい。

  2. Contrastの認証情報を設定:ワークフローファイルに、以下のContrastの認証情報を含めます。

    • contrast_host : プロトコルを含む Contrast インスタンスのホスト名。例:https://yourcompany.contrastsecurity.com

    • contrast_org_id:Contrastの組織のUUID

    • contrast_app_id:リポジトリにあるアプリケーションの固有のUUID

    • contrast_authorization_key:(推奨)サービスユーザを作成して、そのユーザの認証キー(エージェントキー)を使うことをお勧めします。

    • contrast_api_key: 組織のAPI キー

    推奨:APIキーや認証キーなど、機密性の高い情報は全てGitHubシークレットとして保存することをお勧めします。

  3. GitHubの設定:プルリクエストを行うためのgithub_tokenbase_branchなど、GitHubの設定を行います。

  4. ビルド コマンドを設定します。SmartFix変更がプロジェクトで正しく機能することを確認するには、 build_commandが必要です。プロジェクトに適したコマンド(例えば、mvn clean installなど)を使用してください。

  5. LLMを設定:LLM プロバイダーを選択し、ワークフローファイルに必要な認証情報を設定して下さい。

    推奨:Anthropic Claude Sonnet

SmartFixワークフロー例

この例は、SmartFix ワークフローファイルでを設定する方法を示しています。LLMとしてAnthropic Claude Sonnetを使用しています。

#-
# #%L
# Contrast AI SmartFix
# %%
# Copyright (C) 2025 Contrast Security, Inc.
# %%
# Contact: support@contrastsecurity.com
# License: Commercial
# NOTICE: This Software and the patented inventions embodied within may only be
# used as part of Contrast Security’s commercial offerings. Even though it is
# made available through public repositories, use of this Software is subject to
# the applicable End User Licensing Agreement found at
# https://www.contrastsecurity.com/enduser-terms-0317a or as otherwise agreed
# between Contrast Security and the End User. The Software may not be reverse
# engineered, modified, repackaged, sold, redistributed or otherwise used in a
# way not consistent with the End User License Agreement.
# #L%
#

name: Contrast AI SmartFix

on:
  pull_request:
    types:
      - closed
  schedule:
     - cron: '0 0 * * *' # <-- Customer configured schedule
  workflow_dispatch: # Allows manual triggering

permissions:
  contents: write
  pull-requests: write

jobs:
  generate_fixes:
    name: Generate Fixes
    runs-on: ubuntu-latest
    if: github.event_name == 'workflow_dispatch' || github.event_name == 'schedule'
    steps:
      - name: Configure AWS Credentials
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-session-token: ${{ secrets.AWS_SESSION_TOKEN }}
          aws-region: ${{ vars.AWS_REGION }}

      - name: Checkout repository
        uses: actions/checkout@v4
        with:
          fetch-depth: 0
          
      - name: Run Contrast AI SmartFix - Generate Fixes Action
        uses: Contrast-Security-OSS/contrast-ai-smartfix-action@v1
        with:
          # --- Max Open PRs ---
          max_open_prs: 5
          # --- Base Branch ---
          base_branch: '${{ github.event.repository.default_branch }}'
          # --- Build Command ---
          build_command: 'mvn clean test'
          # --- Formatting Command ---
          formatting_command: 'mvn spotless:apply'
          # --- Max QA Intervention loop attempts ---
          max_qa_attempts: 6
          # --- GitHub Token ---
          github_token: ${{ secrets.GITHUB_TOKEN }}
          # --- Contrast API Credentials ---
          contrast_host: ${{ vars.CONTRAST_HOST }}
          contrast_org_id: ${{ vars.CONTRAST_ORG_ID }}
          contrast_app_id: ${{ vars.CONTRAST_APP_ID }}
          contrast_authorization_key: ${{ secrets.CONTRAST_AUTHORIZATION_KEY }}
          contrast_api_key: ${{ secrets.CONTRAST_API_KEY }}
          # --- Google Gemini API Credentials ---
          gemini_api_key: ${{ secrets.GEMINI_API_KEY }}
          # --- Anthropic API Credentials ---
          anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
          # --- Azure Open API Credentials ---
          # azure_api_key: ${{ secrets.AZURE_API_KEY }}
          # azure_api_base: ${{ secrets.AZURE_API_BASE }}
          # azure_api_version: ${{ secrets.AZURE_API_VERSION }}
          # --- Agent Configuration ---
          agent_model: ${{ vars.AGENT_MODEL || 'bedrock/us.anthropic.claude-3-7-sonnet-20250219-v1:0' }}
          # Other Optional Inputs (see action.yml for defaults and more options)
          # formatting_command: 'mvn spotless:apply' # Or the command appropriate for your project to correct the formatting of SmartFix\'s changes.  This ensures that SmartFix follows your coding standards.
          # max_open_prs: 5 # This is the maximum limit for the number of PRs that SmartFix will have open at single time
          # enable_full_telemetry: 'false' # Set to false to disable full telemetry

  handle_pr_merge:
    name: Handle PR Merge
    runs-on: ubuntu-latest
    if: github.event.pull_request.merged == true && contains(github.event.pull_request.head.ref, 'smartfix/remediation-')
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Notify Contrast on PR Merge
        uses: Contrast-Security-OSS/contrast-ai-smartfix-action@v1
        with:
          run_task: merge 
          # --- GitHub Token ---
          github_token: ${{ secrets.GITHUB_TOKEN }}
          # --- Contrast API Credentials ---
          contrast_host: ${{ vars.CONTRAST_HOST }}
          contrast_org_id: ${{ vars.CONTRAST_ORG_ID }}
          contrast_app_id: ${{ vars.CONTRAST_APP_ID }}
          contrast_authorization_key: ${{ secrets.CONTRAST_AUTHORIZATION_KEY }}
          contrast_api_key: ${{ secrets.CONTRAST_API_KEY }}
        env: 
          GITHUB_EVENT_PATH: ${{ github.event_path }}
  
  handle_pr_closed:
    name: Handle PR Close
    runs-on: ubuntu-latest
    if: github.event.pull_request.merged == false && contains(github.event.pull_request.head.ref, 'smartfix/remediation-')
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Notify Contrast on PR Closed
        uses: Contrast-Security-OSS/contrast-ai-smartfix-action@v1
        with:
          run_task: closed
          # --- GitHub Token ---
          github_token: ${{ secrets.GITHUB_TOKEN }}
          # --- Contrast API Credentials ---
          contrast_host: ${{ vars.CONTRAST_HOST }}
          contrast_org_id: ${{ vars.CONTRAST_ORG_ID }}
          contrast_app_id: ${{ vars.CONTRAST_APP_ID }}
          contrast_authorization_key: ${{ secrets.CONTRAST_AUTHORIZATION_KEY }}
          contrast_api_key: ${{ secrets.CONTRAST_API_KEY }}
        env: 
          GITHUB_EVENT_PATH: ${{ github.event_path }}

SmartFix設定入力

最新の入力項目とデフォルト値は、SmartFix GitHub Actionリポジトリのaction.ymlファイルに記載されています。

入力項目

説明

必須項目?

デフォルト

agent_model

使用するLLMモデル

いいえ

bedrock/us.anthropic.claude-3-7-sonnet-20250219-v1:0

build_command

アプリケーションをビルドするコマンド(例、mvn clean verifygradle clean build test

はい

contrast_api_key

Contrast APIキー

はい

enable_full_telemetry

Contrastに送信されるテレメトリーデータの量を制御します。

true に設定すると、完全なログファイルとビルドコマンドが送信されます。false に設定すると、機密性の高いビルドコマンドと完全なログは省略されます。

いいえ

true

formatting_command

コードをフォーマットするコマンド

いいえ

github_token

PRを行うためのGitHubトークン

この値はGitHubシークレットとして保存する必要があります。

はい

max_events_per_agent

脆弱性を処理する内部エージェントあたりの最大イベント数

いいえ

128

max_open_prs

SmartFixで同時に開くことができるプルリクエストの最大数。

いいえ

5

max_qa_attempts

修正の実装後にビルドが失敗した場合のQA介入の最大試行回数

いいえ

6

skip_qa_review

QAレビューステップ(ビルド検証)をスキップ

いいえ

false

skip_writing_security_test

修正プログラムのセキュリティ テストの作成をスキップ

いいえ

false

コントラストアプリID

リポジトリのContrastアプリケーションID

Omit for SAST-only NorthstarNorthstar deployments

はい

コントラストホスト

Contrast Security APIホスト(例、https://app.contrastsecurity.com)

はい

コントラスト組織ID

Contrastの組織ID

はい

デバッグモード

詳細ログを有効にします。

いいえ

false

ベースブランチ

リポジトリのデフォルトブランチ

いいえ

main

秘密.対比_認証_キー

Contrast認証キー

この値はGitHubシークレットとして保存する必要があります。

はい

LLM設定

  • 推奨:Anthropic API直接利用の設定:

    • agent_modelにAnthropicの適切なモデルの文字列を設定します(例、anthropic/claude-3-7-sonnet-20250219)

    • anthropic_api_key を指定します。

  • 推奨: AWS Bedrock利用の設定

    • agent_modelに適切なモデルの文字列を設定します(例、bedrock/us.anthropic.claude-3-7-sonnet-20250219-v1:0)。

    • AWSの認証情報(aws_access_key_idaws_secret_access_keyaws_region)を指定します。

  • 試験段階:Google Gemini Pro利用の設定(例、Gemini 2.5 Pro)

    • agent_modelに適切なモデルの文字列を(例、gemini/gemini-1.5-pro-latest)を設定します。

    • gemini_api_key を指定します。

Contrast AI SmartFixAIコーディングエージェントとの統合

SmartFix GitHub Action リポジトリには、特定のAIコーディングエージェントとの統合に関する詳細な手順が含まれています

関連項目

トラブルシューティング

Contrast SmartFixのREADME