Cycode

公式

開発ライフサイクルにおけるセキュリティを、CycodeによるSAST、SCA、シークレット、IaCスキャンで強化します。

Cycode MCPで何ができますか?

  • リポジトリパスをスキャンしてハードコードされたシークレットを検出 — アシスタントにローカルディレクトリでcycode_secret_scanを実行させ、露出した認証情報を検出します。
  • 既知の脆弱性がないか依存関係をチェック — プロジェクトパスに対してcycode_sca_scanをトリガーし、脆弱性または非準拠のオープンソースパッケージを特定します。
  • 設定ミスがないかInfrastructure as Codeファイルを監査 — TerraformまたはCloudFormationディレクトリでcycode_iac_scanを使用して、リスクのある設定を表面化します。
  • セキュリティ上の欠陥がないかソースコードをレビュー — コードベースでcycode_sast_scanを実行し、コードレベルの弱点と品質問題を見つけます。
  • CLI認証とバージョンステータスを検証cycode_statusを呼び出して、Cycodeへの接続とアクティブなバージョンを確認します。

ドキュメント

Cycode CLI ユーザーガイド

MCP Toplist

Cycode コマンドラインインターフェース(CLI)は、ローカルにインストールして、リポジトリ内のシークレット、インフラストラクチャ・アズ・コード(IaC)の設定ミス、ソフトウェア構成分析(SCA)の脆弱性、静的アプリケーションセキュリティテスト(SAST)の問題をスキャンできるアプリケーションです。

このガイドでは、インストール方法と使用方法の両方を説明します。

目次

  1. 前提条件
  2. インストール
    1. Cycode CLI のインストール
      1. Auth コマンドの使用
      2. Configure コマンドの使用
      3. 環境変数への追加
        1. Unix/Linux の場合
        2. Windows の場合
    2. Pre-Commit フックのインストール
  3. Cycode CLI コマンド
  4. MCP コマンド
    1. MCP サーバーの起動
    2. 利用可能なオプション
    3. MCP ツール
    4. 使用例
    5. 高度な設定
  5. Platform コマンド
    1. コマンドの検出
    2. 注意事項と制限
  6. AI ガードレール
    1. AI ガードレールが収集するデータ
  7. Scan コマンド
    1. スキャンの実行
      1. オプション
        1. 重大度しきい値
        2. モニター
        3. Cycode レポート
        4. パッケージの脆弱性
        5. ライセンス準拠
        6. ロックの復元
        7. エラー時に停止
      2. リポジトリのスキャン
        1. ブランチオプション
      3. パスのスキャン
        1. Terraform プランスキャン
      4. コミット履歴のスキャン
        1. コミット範囲オプション(差分スキャン)
      5. Pre-Commit スキャン
      6. Pre-Push スキャン
    2. スキャン結果
      1. シークレットの表示/非表示
      2. ソフトフェイル
      3. スキャン結果の例
        1. シークレット結果の例
        2. IaC 結果の例
        3. SCA 結果の例
        4. SAST 結果の例
      4. 会社のカスタム修復ガイドライン
    3. スキャン結果の無視
      1. シークレット値の無視
      2. シークレット SHA 値の無視
      3. パスの無視
      4. シークレット、IaC、または SCA ルールの無視
      5. パッケージの無視
      6. 設定ファイルによる無視
  8. Report コマンド
    1. SBOM レポートの生成
  9. Import コマンド
  10. スキャンログ
  11. 構文ヘルプ

前提条件

  • Cycode CLI アプリケーションには Python バージョン 3.9 以降が必要です。MCP コマンドは Python 3.10 以上でのみ利用可能です。それ以前の Python バージョンを使用している場合、このコマンドは利用できません。
  • cycode auth コマンド を使用して CLI で Cycode に認証します。
    • または、サービスアカウントトークン および 個人アクセストークン のページで説明されている手順に従って、Cycode クライアント ID とクライアントシークレットキーを取得できます。これらのページには、これらの値を取得するための詳細が含まれています。

インストール

以下のインストール手順は、Windows および UNIX / Linux オペレーティングシステムの両方に適用されます。

[!NOTE] 以下の手順では、Python 関連のコマンドに python3pip3 を使用することを前提としています。ただし、Python 環境の構成によっては、pythonpip コマンドを使用するシステムもあります。

Cycode CLI のインストール

Cycode CLI アプリケーションをローカルマシンにインストールするには、次の手順を実行します。

  1. コマンドラインまたはターミナルアプリケーションを開きます。

  2. 次のいずれかのコマンドを実行します。

    • PyPI からインストールする場合:

      pip3 install cycode
      
    • Homebrew からインストールする場合:

      brew install cycode
      
    • GitHub Releases からインストールする場合、オペレーティングシステムとアーキテクチャに合った実行可能ファイルをダウンロードして移動し、次のコマンドを実行します:

    cd /path/to/downloaded/cycode-cli
    chmod +x cycode
    ./cycode
    
  3. 最後に CLI を認証します。Cycode クライアント ID と認証情報(クライアントシークレットまたは OIDC ID トークン)を設定する方法は 3 つあります:

Auth コマンドの使用

[!NOTE] これは、Cycode CLI で認証するためにローカルマシンを設定するための推奨方法です。

  1. ターミナル/コマンドラインウィンドウに次のコマンドを入力します:

    cycode auth

  2. ブラウザウィンドウが開き、Cycode へのログインを求められます(下記参照):

    Cycode login
  3. このページにログイン資格情報を入力してログインします。

  4. 最終的に下記のページに移動し、Cycode を認証するビジネスグループを選択するよう求められます(該当する場合):

    authorize CLI

    [!NOTE] これが Cycode CLI での認証のデフォルト方法になります。

  5. 許可 ボタンをクリックして、選択したビジネスグループで Cycode CLI を認証します。

    allow CLI
  6. 完了すると、正常に選択された場合、次の画面が表示されます:

    successfully auth
  7. ターミナル/コマンドライン画面では、ブラウザウィンドウを終了すると次のように表示されます:

    Successfully logged into cycode

Configure コマンドの使用

[!NOTE] Linux または Windows の環境変数を通じて Cycode クライアント ID とクライアントシークレットをすでに設定している場合、それらの資格情報がこの方法よりも優先されます。

  1. ターミナル/コマンドラインウィンドウに次のコマンドを入力します:

    cycode configure
    
  2. Cycode API URL の値を入力します(デフォルト値を使用する場合は空白のままにできます)。

    Cycode API URL [https://api.cycode.com]: https://api.onpremise.com

  3. Cycode APP URL の値を入力します(デフォルト値を使用する場合は空白のままにできます)。

    Cycode APP URL [https://app.cycode.com]: https://app.onpremise.com

  4. Cycode クライアント ID の値を入力します。

    Cycode Client ID []: 7fe5346b-xxxx-xxxx-xxxx-55157625c72d

  5. Cycode クライアントシークレットの値を入力します(OIDC ID トークンを使用する予定の場合はスキップします)。

    Cycode Client Secret []: c1e24929-xxxx-xxxx-xxxx-8b08c1839a2e

  6. Cycode OIDC ID トークンの値を入力します(オプション)。

    Cycode ID Token []: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...

  7. 値が正常に入力された場合、次のメッセージが表示されます:

    Successfully configured CLI credentials!

    または/および

    Successfully configured Cycode URLs!

ユーザーフォルダーの下の .cycode フォルダーに移動すると、これらの資格情報が作成され、そのフォルダーの credentials.yaml ファイルに配置されていることがわかります。 URL はそのフォルダーの config.yaml ファイルに配置されています。

環境変数への追加

Unix/Linux の場合:

export CYCODE_CLIENT_ID={your Cycode ID}

および

export CYCODE_CLIENT_SECRET={your Cycode Secret Key}

組織が OIDC 認証を使用している場合は、代わりに(または追加で)ID トークンを提供できます:

export CYCODE_ID_TOKEN={your Cycode OIDC ID token}

Windows の場合

  1. コントロールパネルから、システムメニューに移動します:

    system menu
  2. 次に、システムの詳細設定 をクリックします:

    advanced system setting
  3. 開いたシステムのプロパティウィンドウで、環境変数 ボタンをクリックします:

    environments variables button
  4. ID とシークレットキーにそれぞれ一致する値を持つ CYCODE_CLIENT_IDCYCODE_CLIENT_SECRET 変数を作成します。OIDC で認証する場合は、CYCODE_ID_TOKEN に OIDC ID トークンの値も追加します:

    environment variables window
  5. インストールを完了するには、cycode.exe をパスに挿入します。

Pre-Commit フックのインストール

Cycode の pre-commit および pre-push フックは、ローカルリポジトリ内に設定できるため、コードをコードベースにコミットまたはプッシュする前に、Cycode CLI アプリケーションがコードの問題を自動的に特定します。

[!NOTE] pre-commit および pre-push フックは IaC スキャンでは利用できません。

pre-commit フックをインストールするには、次の手順を実行します:

Pre-Commit フックのインストール

  1. pre-commit フレームワークをインストールします(Python 3.9 以上がインストールされている必要があります):

    pip3 install pre-commit
    
  2. 設定するローカル Git リポジトリの最上位ディレクトリに移動します。

  3. リポジトリの最上位ディレクトリに、次の内容を含む .pre-commit-config.yaml という名前の新しい YAML ファイルを作成します(先頭の . を含めます):

    repos:
      - repo: https://github.com/cycodehq/cycode-cli
        rev: v3.5.0
        hooks:
          - id: cycode
            stages: [pre-commit]
    
  4. 作成したファイルを特定のニーズに合わせて変更します。フック ID cycode を使用してシークレットのスキャンを有効にします。フック ID cycode-sca を使用して SCA スキャンを有効にします。フック ID cycode-sast を使用して SAST スキャンを有効にします。すべてのスキャンタイプを有効にする場合は、次の構成を使用します:

    repos:
      - repo: https://github.com/cycodehq/cycode-cli
        rev: v3.5.0
        hooks:
          - id: cycode
            stages: [pre-commit]
          - id: cycode-sca
            stages: [pre-commit]
          - id: cycode-sast
            stages: [pre-commit]
    
  5. Cycode のフックをインストールします:

    pre-commit install
    

    フックのインストールが成功すると、次のメッセージが表示されます: Pre-commit installed at .git/hooks/pre-commit

  6. pre-commit フックを最新の状態に保ちます:

    pre-commit autoupdate
    

    これにより、.pre-commit-config.yaml 内の rev が Cycode CLI の最新の利用可能なバージョンに自動的に更新されます。

[!NOTE] トリガーは git commit コマンドで発生します。 フックは、コミット用にステージングされたファイルのみでトリガーされます。

Pre-Push フックのインストール

pre-commit フックに加えて、またはその代わりに pre-push フックをインストールするには:

  1. pre-push フックを .pre-commit-config.yaml ファイルに追加します:

    repos:
      - repo: https://github.com/cycodehq/cycode-cli
        rev: v3.5.0
        hooks:
          - id: cycode-pre-push
            stages: [pre-push]
    
  2. pre-push フックをインストールします:

    pre-commit install --hook-type pre-push
    
  3. pre-commit フックと pre-push フックの両方に使用します:

    pre-commit install
    pre-commit install --hook-type pre-push
    

[!NOTE] Pre-push フックは git push コマンドでトリガーされ、プッシュされようとしているコミットのみをスキャンします。

Cycode CLI コマンド

以下は、Cycode CLI アプリケーションで利用可能なオプションとコマンドです:

オプション説明
-v--verbose詳細なログを表示します。
--no-progress-meter進行状況メーターを表示しません。
--no-update-notifierCLI の更新を確認しません。
-o--output [rich|text|json|table]出力タイプを指定します。デフォルトは rich です。
--client-id TEXTこの特定のスキャン実行用の Cycode クライアント ID を指定します。
--client-secret TEXTこの特定のスキャン実行用の Cycode クライアントシークレットを指定します。
--id-token TEXTこの特定のスキャン実行用の Cycode OIDC ID トークンを指定します。
--install-completion現在のシェルの補完をインストールします。
--show-completion [bash|zsh|fish|powershell|pwsh]指定されたシェルの補完を表示して、コピーまたはインストールをカスタマイズします。
-h--help指定されたコマンドのオプションを表示します。
コマンド説明
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
authマシンを認証して、CLI を Cycode アカウントに関連付けます。
configureCLI クライアント認証を設定するための初期コマンドです。
ignore特定の値、パス、またはルール ID を無視します。
mcpModel Context Protocol (MCP) サーバーを起動して、Cycode のスキャン機能と AI を統合できるようにします。
scanSecrets/IaC/SCA/SAST 違反のコンテンツをスキャンします。実行するスキャンタイプ(commit-history/path/repository など)を指定する必要があります。
reportレポートを生成します。SBOM など、実行するレポートタイプを指定する必要があります。
statusCLI のステータスを表示して終了します。

MCP コマンド [EXPERIMENT]

[!WARNING] MCP コマンドは Python 3.10 以降でのみ利用可能です。それより前の Python バージョンを使用している場合、このコマンドは利用できません。

Model Context Protocol (MCP) コマンドを使用すると、Cycode のスキャン機能を AI システムやアプリケーションに公開する MCP サーバーを起動できます。これにより、AI モデルは標準化されたプロトコルを介して Cycode CLI ツールと対話できるようになります。

[!TIP] 最適なエクスペリエンスを得るには、pip install cycode または brew install cycode を使用して Cycode CLI をシステムにグローバルインストールし、cycode auth で一度認証してください。グローバルインストールと認証後は、MCP 設定ファイルで CYCODE_CLIENT_ID および CYCODE_CLIENT_SECRET 環境変数を設定する必要はありません。

Add MCP Server to Cursor using UV

MCP サーバーの起動

MCP サーバーを起動するには、次のコマンドを使用します:

cycode mcp

デフォルトでは、このコマンドは stdio トランスポートを使用してサーバーを起動します。これはローカル統合やサブプロセスを生成できる AI アプリケーションに適しています。

利用可能なオプション

オプション説明
-t, --transportMCP サーバーのトランスポートタイプ:stdiosse、または streamable-http(デフォルト:stdio
-H, --hostサーバーをバインドするホストアドレス(stdio 以外のトランスポートでのみ使用)(デフォルト:127.0.0.1
-p, --portサーバーをバインドするポート番号(stdio 以外のトランスポートでのみ使用)(デフォルト:8000
--helpヘルプメッセージと利用可能なオプションを表示します。

MCP ツール

MCP サーバーは、AI システムが使用できる次のツールを提供します:

ツール名説明
cycode_secret_scanハードコードされたシークレットをスキャンします。
cycode_sca_scanSoftware Composition Analysis (SCA) をスキャンします - 脆弱性とライセンスの問題。
cycode_iac_scanInfrastructure as Code (IaC) の設定ミスをスキャンします。
cycode_sast_scanStatic Application Security Testing (SAST) をスキャンします - コード品質とセキュリティ上の欠陥。
cycode_statusCycode CLI のバージョン、認証ステータス、設定情報を取得します。

各スキャンツールは、相互に排他的な 2 つの入力モードを受け入れます:

  • paths (推奨) — ディスク上に存在する 1 つ以上のファイルまたはディレクトリパス。ディレクトリは再帰的にスキャンされます。Cycode エンジンがファイルの発見とフィルタリングを処理します。これは CLI からの cycode scan -t <type> path ./src と同様です。
  • files (フォールバック) — ファイルパスをその完全なコンテンツ(文字列)にマッピングする辞書。これは、ファイルがディスク上で利用できない場合(例:まだ保存されていないメモリ内の編集)にのみ使用します。

[!TIP] 可能な限り paths を使用してください。大きなファイル(package-lock.json など)をインラインコンテンツとして渡すと、トークン制限を超えたり、AI クライアントが遅くなったりする可能性があります。paths を使用すると、Cycode エンジンがファイルをディスクから直接読み取ります。

すべてのスキャンツールは、完全な "detections" 配列に加えて、人間が読める違反数(例:"Cycode found 3 violations: 1 CRITICAL, 2 HIGH.")を含む "summary" フィールドを持つ JSON オブジェクトを返します。

使用例

基本的なコマンド例

デフォルト設定(stdio トランスポート)で MCP サーバーを起動します:

cycode mcp

明示的な stdio トランスポートで MCP サーバーを起動します:

cycode mcp -t stdio

Server-Sent Events (SSE) トランスポートで MCP サーバーを起動します:

cycode mcp -t sse -p 8080

カスタムホストとポートでストリーミング可能な HTTP トランスポートを使用して MCP サーバーを起動します:

cycode mcp -t streamable-http -H 0.0.0.0 -p 9000

MCP トランスポートタイプの詳細については、MCP Protocol Specification – Transports を参照してください。

設定例

Cursor/VS Code/Claude Desktop などで MCP を使用する(mcp.json)

[!NOTE] EU の Cycode 環境では、環境変数に適切な CYCODE_API_URL および CYCODE_APP_URL 値を設定してください(例:https://api.eu.cycode.com および https://app.eu.cycode.com)。

このガイド に従って、VS Code/GitHub Copilot で MCP サーバーを設定します。settings.json には、スタンドアロンの mcpServers オブジェクトではなく、ネストされた servers サブオブジェクトを含む mcp オブジェクトがあることに注意してください。

stdio トランスポート(直接実行)の場合:

{
  "mcpServers": {
    "cycode": {
      "command": "cycode",
      "args": ["mcp"],
      "env": {
        "CYCODE_CLIENT_ID": "your-cycode-id",
        "CYCODE_CLIENT_SECRET": "your-cycode-secret-key",
        "CYCODE_API_URL": "https://api.cycode.com",
        "CYCODE_APP_URL": "https://app.cycode.com"
      }
    }
  }
}

stdio トランスポートpipx インストールの場合:

{
  "mcpServers": {
    "cycode": {
      "command": "pipx",
      "args": ["run", "cycode", "mcp"],
      "env": {
        "CYCODE_CLIENT_ID": "your-cycode-id",
        "CYCODE_CLIENT_SECRET": "your-cycode-secret-key",
        "CYCODE_API_URL": "https://api.cycode.com",
        "CYCODE_APP_URL": "https://app.cycode.com"
      }
    }
  }
}

stdio トランスポートuvx インストールの場合:

{
  "mcpServers": {
    "cycode": {
      "command": "uvx",
      "args": ["cycode", "mcp"],
      "env": {
        "CYCODE_CLIENT_ID": "your-cycode-id",
        "CYCODE_CLIENT_SECRET": "your-cycode-secret-key",
        "CYCODE_API_URL": "https://api.cycode.com",
        "CYCODE_APP_URL": "https://app.cycode.com"
      }
    }
  }
}

SSE トランスポート(Server-Sent Events)の場合:

{
  "mcpServers": {
    "cycode": {
      "url": "http://127.0.0.1:8000/sse"
    }
  }
}

SSE トランスポートをカスタムポートで使用する場合:

{
  "mcpServers": {
    "cycode": {
      "url": "http://127.0.0.1:8080/sse"
    }
  }
}

ストリーミング可能な HTTP トランスポートの場合:

{
  "mcpServers": {
    "cycode": {
      "url": "http://127.0.0.1:8000/mcp"
    }
  }
}
バックグラウンドで MCP サーバーを実行する

SSE トランスポートの場合(最初にサーバーを起動し、その後クライアントを設定):

# Start the MCP server in the background
cycode mcp -t sse -p 8000 &

# Configure in mcp.json
{
  "mcpServers": {
    "cycode": {
      "url": "http://127.0.0.1:8000/sse"
    }
  }
}

ストリーミング可能な HTTP トランスポートの場合:

# Start the MCP server in the background
cycode mcp -t streamable-http -H 127.0.0.2 -p 9000 &

# Configure in mcp.json
{
  "mcpServers": {
    "cycode": {
      "url": "http://127.0.0.2:9000/mcp"
    }
  }
}

高度な設定

カスタム証明書とタイムアウト(プロキシ環境)

組織が企業プロキシまたは HTTPS 検査用のカスタム CA バンドルを使用している場合、Cycode CLI(および基盤となる Python TLS スタック)に信頼された証明書バンドルの場所を指定する必要があります。また、スキャンが途中で終了する場合は、MCP ツール呼び出しのタイムアウトを増やすこともできます。

環境変数説明
REQUESTS_CA_BUNDLEカスタム CA バンドルファイルへのパス(.pem または .crt)。Cycode CLI によるすべての HTTPS 呼び出しに requests ライブラリによって使用されます。
SSL_CERT_FILEカスタム CA バンドルファイルへのパス。Python の低レベル ssl モジュールによって使用されます。完全なカバレッジのために REQUESTS_CA_BUNDLE と一緒に設定します。
MCP_TOOL_TIMEOUTClaude や GitHub Copilot などの MCP クライアントがツール呼び出しの完了を待機するタイムアウト(秒)。長時間実行されるスキャンが完了前に中断される場合は、これを増やします。

[!TIP] REQUESTS_CA_BUNDLESSL_CERT_FILE の両方を同じ CA バンドルパスに設定します。REQUESTS_CA_BUNDLE は HTTP レイヤーをカバーし、SSL_CERT_FILE は低レベルの TLS レイヤーをカバーします。片方だけを設定すると、一部の環境で証明書エラーが発生する可能性があります。

カスタム証明書とより長いタイムアウトを使用した mcp.json 設定の例:

{
  "mcpServers": {
    "cycode": {
      "command": "cycode",
      "args": ["mcp"],
      "env": {
        "REQUESTS_CA_BUNDLE": "/path/to/your/corporate-ca-bundle.pem",
        "SSL_CERT_FILE": "/path/to/your/corporate-ca-bundle.pem",
        "MCP_TOOL_TIMEOUT": "1800"
      }
    }
  }
}

[!NOTE] MCP サーバーが機能するには、適切な Cycode CLI 認証が必要です。MCP サーバーを起動する前に、cycode auth を使用して認証したか、資格情報を設定していることを確認してください。

サブエージェント用ツールの事前承認(Claude Code)

Claude Code がバックグラウンドのサブエージェントに作業を委任する場合(例:スキャンを並列実行するため)、それらのサブエージェントは対話型の権限プロンプトを表示できません。Cycode ツールが事前承認されていない場合、サブエージェントコンテキストではスキャンが静かに失敗します。

Cycode MCP ツールを事前承認して、サブエージェントを含むすべてのコンテキストで機能するようにするには、Claude Code 設定(~/.claude/settings.json)の allowedTools リストに追加します:

{
  "allowedTools": [
    "mcp__cycode__cycode_secret_scan",
    "mcp__cycode__cycode_sca_scan",
    "mcp__cycode__cycode_iac_scan",
    "mcp__cycode__cycode_sast_scan",
    "mcp__cycode__cycode_status"
  ]
}

追加すると、Claude Code はこれらのツールが呼び出されたときに承認を求めず、サブエージェント内でも正しく機能します。

MCP のトラブルシューティング

MCP サーバーで問題が発生した場合は、デバッグログを有効にして、何が起こっているかについてより詳細な情報を取得できます。デバッグログを有効にする方法は 2 つあります:

  1. -v または --verbose フラグを使用する:
cycode -v mcp
  1. CYCODE_CLI_VERBOSE 環境変数を使用する:
CYCODE_CLI_VERBOSE=1 cycode mcp

デバッグログには、次の詳細情報が表示されます:

  • サーバーの起動と設定
  • 接続試行とステータス
  • ツールの実行と結果
  • 発生したエラーや警告

この情報は、次の場合に役立ちます:

  • 接続の問題の診断
  • 特定のツールが機能しない理由の理解
  • 認証の問題の特定
  • トランスポート固有の問題のデバッグ

MCP 設定

プラットフォームコマンド [BETA]

[!WARNING] platform コマンドはベータ版です。コマンド、引数、出力形式は Cycode API 仕様から動的に生成され、リリース間で予告なく変更される場合があります。本番環境の自動化ではまだ依存しないでください。

cycode platform コマンドは、Cycode プラットフォームの読み取り API を CLI コマンドとして公開します。エンドポイントをリソースごとにグループ化し(例:projectsviolationsworkflows)、各エンドポイントのパラメータを型付き CLI 引数と --option フラグに変換します。

cycode platform projects list --page-size 50
cycode platform violations count
cycode platform workflows view <workflow-id>

OpenAPI 仕様は、最初の使用時に Cycode API から取得され、~/.cycode/openapi-spec.json に 24 時間キャッシュされます。無関係なコマンド(cycode scancycode status など)はフェッチをトリガーしません。

[!NOTE] cycode platform がコマンドを検出して実行するには、認証されている必要があります(cycode auth または CYCODE_CLIENT_ID / CYCODE_CLIENT_SECRET 環境変数)。他の Cycode CLI コマンドは認証なしで機能します。

コマンドの検出

コマンドは仕様から生成されるため、利用可能なものの真実の情報源は --help です:

cycode platform --help                  # list all resource groups
cycode platform projects --help         # list actions on a resource
cycode platform projects list --help    # list options/arguments for an action

プラットフォームの例

# List projects with pagination
cycode platform projects list --page-size 25

# View a single project by ID
cycode platform projects view <project-id>

# Count violations across the tenant
cycode platform violations count

# Filter using query parameters (see `--help` for what each endpoint supports)
cycode platform violations list --severity CRITICAL

すべての出力はデフォルトで JSON です。アドホックなフィルタリングのために jq にパイプします:

cycode platform projects list --page-size 100 | jq '.items[].name'

プラットフォームの注意事項と制限事項

  • 現時点では読み取り専用です。 このベータ版では、GET エンドポイントのみが公開されています。
  • 仕様駆動型。 API に新しいエンドポイントを追加すると、キャッシュが次回更新されたときに自動的に表示されます。
  • バンドルされた仕様はありません。 インストール後(または 24 時間のキャッシュ期限切れ後)の最初の cycode platform 呼び出しは、ネットワークフェッチを実行します。低速な接続では、この最初の呼び出しに数秒かかる場合があります。キャッシュが期限切れになるまでの後続の呼び出しはほぼ瞬時です。
  • キャッシュ TTL を上書きするには、CYCODE_SPEC_CACHE_TTL=<seconds> を使用します。

AI ガードレール [BETA]

AI Guardrailsは、対応するAIコーディングエージェント(Claude Code、Cursor、Copilot、Codex)にフックをインストールし、プロンプト、エージェントが読み取るファイル、MCPツールの引数がモデルに到達する前にシークレットがスキャンされるようにします。

AI Guardrailsによって収集されるデータ

スキャンはサーバー側で行われるため、スキャンされたコンテンツはマシンから送信されます。プロンプトテキスト、エージェントが読み取るファイルの内容、MCPツールの引数は、シークレットをチェックするためにCycodeテナントに送信されます。

各イベントは、開発者とマシンに関するコンテキストとともに報告されるため、検出結果をデバイスとユーザーに帰属させることができます。この一部は個人データです:

  • デバイス識別子 — マシンのホスト名とハードウェアのシリアル番号。
  • ユーザー識別子 — AIコーディングエージェントにサインインしているユーザーのメールアドレス、およびローカルのオペレーティングシステムのユーザー名。
  • 環境の詳細 — オペレーティングシステムとバージョン、AIエージェント、そのバージョンと使用中のモデル、エージェントのMCP設定ファイルの内容、および有効なプラグイン。

ハードウェアのシリアル番号はローカルの一時ファイルにキャッシュされ、コマンドを実行したユーザーのみが読み取れるため、フックの呼び出しが繰り返されてもハードウェアに再クエリされることはありません。

このデータの収集がお使いの環境で許容されない場合は、ガードレールフックをインストールしないでください(cycode ai-guardrails uninstallは既にインストールされているフックを削除します)。

スキャンコマンド

スキャンの実行

Cycode CLIアプリケーションは、お客様のケースに最適なオプションを選択できるように、いくつかのタイプのスキャンを提供しています。以下は、現在利用可能なオプションとコマンドです:

オプション説明
-t, --scan-type [secret|iac|sca|sast]実行するスキャンを指定します(secret/iac/sca/sast)。デフォルトはsecretです。
--show-secret BOOLEANシークレットを平文で表示します。詳細はシークレットの表示/非表示セクションを参照してください。
--soft-fail BOOLEAN失敗せずにスキャンを実行し、常に非エラーのステータスコードを返します。詳細はソフトフェイルセクションを参照してください。
--severity-threshold [INFO|LOW|MEDIUM|HIGH|CRITICAL]指定したレベル以上の違反のみを表示します。
--sca-scan実行するSCAスキャンを指定します(package-vulnerabilities/license-compliance)。デフォルトは両方です。
--monitor指定すると、スキャン結果がCycodeに記録されます。
--cycode-reportコンソール出力にCycodeプラットフォームのスキャンレポートへのリンクを表示します。
--no-restore指定すると、Cycodeはリストアコマンドを実行しません。これにより、直接の依存関係のみがスキャンされます!
--stop-on-errorファイル収集または依存関係のリストアに失敗した場合、失敗したファイルをスキップして続行する代わりに、スキャンを中止します。
--gradle-all-sub-projectsすべてのサブプロジェクトに対してgradleリストアコマンドを実行します。これは、以下から実行する必要があります。
--maven-settings-fileMavenのみ、依存関係のスキャン時にカスタムのsettings.xmlファイルを使用できます。
--help指定されたコマンドのオプションを表示します。
コマンド説明
commit-historyコミット履歴をスキャンするか、特定のコミット間の差分スキャンを実行します
pathコマンドで指定されたパス内のファイルをスキャンします
pre-commitまだコミットされていないコンテンツをスキャンするためにこのコマンドを使用します
repository履歴を含むgitリポジトリをスキャンします

オプション

重大度オプション

スキャン結果を特定の重大度しきい値に制限するには、引数--severity-thresholdをスキャンコマンドに追加できます。

例えば、次のコマンドは、重大度が中以上のポリシー違反をリポジトリでスキャンします:

cycode scan --severity-threshold MEDIUM repository ~/home/git/codebase

モニターオプション

[!NOTE] このオプションはSCAスキャンでのみ利用可能です。

SCAタイプのスキャンで見つかったSCAポリシーに関連するスキャン結果をCycodeにプッシュするには、引数--monitorをスキャンコマンドに追加します。

例えば、次のコマンドは、SCAポリシー違反をリポジトリでスキャンし、Cycodeプラットフォームにプッシュします:

cycode scan -t sca --monitor repository ~/home/git/codebase

Cycodeレポートオプション

Cycode CLIを使用して実行されるすべてのスキャンについて、レポートが自動的に生成され、その結果がCycodeに送信されます。これらの結果は、Cycodeプラットフォーム内の関連ポリシー(例:リポジトリースキャンのSCAポリシー)に関連付けられます。

スキャン完了後にこのCycodeレポートへの直接URLをCLI出力に表示するには、引数--cycode-reportをスキャンコマンドに追加します。

cycode scan --cycode-report repository ~/home/git/codebase

CLIからのすべてのスキャン結果は、CycodeのCLIログセクションに表示されます。コマンドに--cycode-reportフラグを含めた場合、スキャン結果の後に、特定のレポートへの直接リンクがターミナルに表示されます。

[!WARNING] このページを表示するには、Cycodeでownerまたはadminロールが必要です。

cli-report

レポートページは以下のようになります:

パッケージの脆弱性オプション

[!NOTE] このオプションはSCAスキャンでのみ利用可能です。

ローカルリポジトリの特定のパッケージの脆弱性をスキャンするには、-t scaまたは--scan-type scaオプションに続けて引数--sca-scan package-vulnerabilitiesを追加します。

前の例で、パッケージの脆弱性についてのみSCAスキャンを実行したい場合は、次のコマンドを実行できます:

cycode scan -t sca --sca-scan package-vulnerabilities repository ~/home/git/codebase

ライセンスコンプライアンスオプション

[!NOTE] このオプションはSCAスキャンでのみ利用可能です。

ローカルリポジトリの特定のブランチをスキャンするには、引数--sca-scan license-complianceに続けて、スキャンしたいブランチの名前を追加します。

前の例で、devという名前のブランチのみをスキャンしたい場合は、次のコマンドを実行できます:

cycode scan -t sca --sca-scan license-compliance repository ~/home/git/codebase -b dev

ロックリストアオプション

[!NOTE] このオプションはSCAスキャンでのみ利用可能です。

SCAスキャンを実行すると、Cycode CLIは、見つかったサポートされている各マニフェストファイルに対して依存関係ロックファイルのリストア(生成)を自動的に試みます。これにより、マニフェストに直接リストされている依存関係だけでなく、推移的な依存関係もスキャンできます。このステップをスキップして直接の依存関係のみをスキャンするには、--no-restoreフラグを使用します。

以下のエコシステムが自動ロックファイルリストアをサポートしています:

エコシステムマニフェストファイル生成されるロックファイル呼び出されるツール(ロックファイルがない場合)
npmpackage.jsonpackage-lock.jsonnpm install --package-lock-only --ignore-scripts --no-audit
Yarnpackage.jsonyarn.lockyarn install --ignore-scripts
pnpmpackage.jsonpnpm-lock.yamlpnpm install --ignore-scripts
Denodeno.json / deno.jsoncdeno.lock(既存のロックファイルのみ読み取り)
Gogo.modgo.mod.graphgo list -m -json all + go mod graph
Mavenpom.xmlbcde.mvndepsmvn dependency:tree
Gradlebuild.gradle / build.gradle.ktsgradle-dependencies-generated.txtgradle dependencies -q --console plain
SBTbuild.sbtbuild.sbt.locksbt dependencyLockWrite
NuGet*.csprojpackages.lock.jsondotnet restore --use-lock-file
RubyGemfileGemfile.lockbundle --quiet
Poetrypyproject.tomlpoetry.lockpoetry lock
pippyproject.toml / requirements.txtpylock.tomlpip lock . / pip lock -r requirements.txt -o pylock.toml
PipenvPipfilePipfile.lockpipenv lock
PHP Composercomposer.jsoncomposer.lockcomposer update --no-cache --no-install --no-scripts --ignore-platform-reqs

マニフェストと一緒にロックファイルが既に存在する場合、Cycodeはインストールコマンドを実行せずに直接読み取ります。

SBTの前提条件: sbt-dependency-lockプラグインがインストールされている必要があります。project/plugins.sbtに次の行を追加します:

addSbtPlugin("software.purpledragon" % "sbt-dependency-lock" % "1.5.1")

エラー時停止オプション

デフォルトでは、Cycodeは、ファイルを読み取れない場合(例:権限エラー)や、SCAスキャン中に依存関係ロックファイルを生成できない場合でも、スキャンを続行します。失敗した項目は警告とともにスキップされ、スキャンは残りのファイルで続行されます。

--stop-on-errorを使用してこの動作を変更します:スキャンは最初のそのような失敗で直ちに中止され、エラーを報告します。

cycode scan -t sca --stop-on-error path ~/home/git/codebase

これは、サイレントな失敗が不完全なスキャン結果を生成するCIパイプラインで役立ちます。--stop-on-errorがトリガーされた場合、根本的な問題を修正するか、SCAリストアの失敗に特化して、--no-restoreを追加してロックファイルの生成をスキップし、直接の依存関係のみをスキャンできます。

--stop-on-errorが使用されると、CLIは終了コードを介してスキャンエラーとポリシー違反を区別します:

終了コード意味
0違反なしでスキャンが完了しました
1スキャンが完了し、違反が見つかりました
2エラーのためスキャンが中止されました(--stop-on-errorが設定されている場合のみ)

リポジトリースキャン

リポジトリースキャンは、ローカルリポジトリ全体を、公開されたシークレットや安全でない設定ミスがないか調べます。このより包括的なスキャンタイプは、すべてを調べます:リポジトリの現在の状態とそのコミット履歴。リポジトリ内で現在公開されているシークレットだけでなく、以前に削除されたシークレットも探します。

完全なリポジトリースキャンを実行するには、次のコマンドを実行します:

cycode scan repository {{path}}

例えば、~/home/git/codebaseに保存されているリポジトリをスキャンしたい場合は、次のコマンドを実行できます:

cycode scan repository ~/home/git/codebase

このコマンドで使用できるオプションは次のとおりです:

オプション説明
-b, --branch TEXTスキャンするブランチ。設定されていない場合はデフォルトブランチをスキャンします

ブランチオプション

ローカルリポジトリの特定のブランチをスキャンするには、引数-b(または--branch)に続けて、スキャンしたいブランチの名前を追加します。

前の例で、devという名前のブランチのみをスキャンしたい場合は、次のコマンドを実行できます:

cycode scan repository ~/home/git/codebase -b dev

パススキャン

パススキャンは、GITリポジトリのみに焦点を当てるのではなく、特定のローカルディレクトリとその中のすべての内容を調べます。

ディレクトリスキャンを実行するには、次のコマンドを実行します:

cycode scan path {{path}}

例えば、~/home/git/codebaseにあるディレクトリをスキャンしたいシナリオを考えてみましょう。次のコマンドを実行できます:

cycode scan path ~/home/git/codebase

Terraformプランスキャン

Cycode CLIはTerraformプランスキャンをサポートしています(Terraform 0.12以降をサポート)

TerraformプランファイルはJSON形式である必要があります(.json拡張子を持つ)

設定ファイルしかない場合は、以下の手順でプランを生成できます:

  1. Terraform設定ファイルを含む作業ディレクトリを初期化します:

    terraform init

  2. Terraform実行プランを作成し、バイナリ出力を保存します:

    terraform plan -out={tfplan_output}

  3. バイナリ出力ファイルを読み取り可能なJSONに変換します:

    terraform show -json {tfplan_output} > {tfplan}.json

  4. Cycode CLIで{tfplan}.jsonをスキャンします:

    cycode scan -t iac path ~/PATH/TO/YOUR/{tfplan}.json

コミット履歴スキャン

[!NOTE] コミット履歴スキャンはIaCスキャンでは利用できません。

コミット履歴スキャンコマンドには、主に2つの機能があります:

  1. 全履歴スキャン:リポジトリ履歴内のすべてのコミットを分析します
  2. 差分スキャン:特定のコミット間の変更のみをスキャンします

シークレットスキャンは、リポジトリ履歴内のすべてのコミットを分析できます。これは、導入後に削除されたシークレットでも漏洩または露出する可能性があるためです。SCAおよびSASTスキャンの場合、コミット履歴コマンドはコミット間の差分/変更のスキャンに焦点を当てており、プルリクエストのレビューや増分スキャンに最適です。

コミット履歴スキャンは、Gitリポジトリのコミット履歴を調査し、包括的な履歴分析と特定の変更のターゲットを絞った差分スキャンの両方に使用できます。

コミット履歴スキャンを実行するには、次のコマンドを実行します:

cycode scan commit-history {{path}}

例えば、~/home/git/codebaseに保存されているリポジトリのコミット履歴をスキャンしたいシナリオを考えてみましょう。その場合は、次のコマンドを実行できます:

cycode scan commit-history ~/home/git/codebase

このコマンドで使用できるオプションは次のとおりです:

オプション説明
-r, --commit-range TEXTこのgitリポジトリのコミット範囲をスキャンします。デフォルトではcycodeはすべてのコミット履歴をスキャンします(例:HEAD~1)

コミット範囲オプション(差分スキャン)

コミット範囲オプションは差分スキャンを有効にします – リポジトリ全体の履歴ではなく、特定のコミット間の変更のみをスキャンします。 これは特に以下の場合に役立ちます:

  • プルリクエストの検証:PRで導入された変更のみをスキャンします
  • 増分CI/CDスキャン:コードベース全体ではなく最近の変更に焦点を当てます
  • フィーチャーブランチのレビュー:main/masterブランチとの変更を比較します
  • パフォーマンスの最適化:関連する変更にスコープを限定することでスキャンを高速化します

コミット範囲の構文

--commit-range-r)オプションは、標準のGitリビジョン構文をサポートしています:

構文説明
commit1..commit2commit1からcommit2への変更abc123..def456
commit1...commit2commit2にありcommit1にない変更main...feature-branch
commitcommitからHEADへの変更HEAD~1
branch1..branch2branch1からbranch2への変更main..feature-branch

差分スキャンの例

最後のコミットの変更をスキャン:

cycode scan commit-history -r HEAD~1 ~/home/git/codebase

2つの特定のコミット間の変更をスキャン:

cycode scan commit-history -r abc123..def456 ~/home/git/codebase

mainと比較したフィーチャーブランチの変更をスキャン:

cycode scan commit-history -r main..HEAD ~/home/git/codebase

mainとフィーチャーブランチ間の変更をスキャン:

cycode scan commit-history -r main..feature-branch ~/home/git/codebase

最後の3つのコミットのすべての変更をスキャン:

cycode scan commit-history -r HEAD~3..HEAD ~/home/git/codebase

[!TIP] CI/CDパイプラインでは、${{ github.event.pull_request.base.sha }}..${{ github.sha }}(GitHub Actions)や$CI_MERGE_REQUEST_TARGET_BRANCH_SHA..$CI_COMMIT_SHA(GitLab CI)などの環境変数を使用して、PR/MRの変更のみをスキャンできます。

プリコミットスキャン

プリコミットスキャンは、変更をリポジトリにコミットする前に問題を自動的に特定します。このスキャンを手動で実行する必要はありません。このガイドのインストールセクションで詳しく説明されているように、プリコミットフックを設定してください。

プリコミットフックをインストールした後、特定のコミット中にスキャンをスキップしたい場合があります。これを行うには、単一のコミットのスキャンをスキップするためにgitコマンドに以下を追加します:

SKIP=cycode git commit -m <your commit message>`

プリプッシュスキャン

プリプッシュスキャンは、変更をリモートリポジトリにプッシュする前に問題を自動的に特定します。このフックはクライアント側で実行され、プッシュされようとしているコミットのみをスキャンするため、問題がリモートリポジトリに到達する前に捕捉するのに効率的です。

[!NOTE] プリプッシュフックはIaCスキャンでは利用できません。

プリプッシュフックはpre-commitフレームワークと統合され、任意のgit push操作の前に実行するように設定できます。

プリプッシュフックのインストール

pre-commitフレームワークを使用してプリプッシュフックを設定するには:

  1. pre-commitフレームワークをインストールします(まだインストールされていない場合):

    pip3 install pre-commit
    
  2. プリプッシュフックを含めるように.pre-commit-config.yamlファイルを作成または更新します:

    repos:
      - repo: https://github.com/cycodehq/cycode-cli
        rev: v3.5.0
        hooks:
          - id: cycode-pre-push
            stages: [pre-push]
    
  3. 複数のスキャンタイプの場合は、次の設定を使用します:

    repos:
      - repo: https://github.com/cycodehq/cycode-cli
        rev: v3.5.0
        hooks:
          - id: cycode-pre-push          # Secrets scan
            stages: [pre-push]
          - id: cycode-sca-pre-push      # SCA scan
            stages: [pre-push]
          - id: cycode-sast-pre-push     # SAST scan
            stages: [pre-push]
    
  4. プリプッシュフックをインストールします:

    pre-commit install --hook-type pre-push
    

    インストールが成功すると、Pre-push installed at .git/hooks/pre-pushというメッセージが表示されます。

  5. プリプッシュフックを最新の状態に保ちます:

    pre-commit autoupdate
    

プリプッシュスキャンの仕組み

プリプッシュフックは:

  • プッシュされるコミットに関する情報を受け取ります
  • スキャンする適切なコミット範囲を計算します
  • 新しいブランチの場合:デフォルトブランチとのマージベースからすべてのコミットをスキャンします
  • 既存のブランチの場合:最後のプッシュ以降の新しいコミットのみをスキャンします
  • 他のCycodeスキャンモードと同じ包括的なスキャンを実行します

スマートデフォルトブランチ検出

プリプッシュフックは、次の優先順位でマージベース計算用のデフォルトブランチをインテリジェントに検出します:

  1. 環境変数CYCODE_DEFAULT_BRANCH – 手動での上書きを許可します
  2. GitリモートHEADgit symbolic-ref refs/remotes/origin/HEADを使用して実際のリモートデフォルトブランチを検出します
  3. Gitリモート情報:symbolic-refが失敗した場合にgit remote show originにフォールバックします
  4. ハードコードされたフォールバック:一般的なデフォルトブランチ名(origin/main、origin/master、main、master)を使用します

カスタムデフォルトブランチの設定:

export CYCODE_DEFAULT_BRANCH=origin/develop

このスマート検出により、リポジトリがmainmasterdevelop、またはその他のデフォルトブランチ名を使用しているかどうかに関係なく、プリプッシュフックが正しく動作します。

プリプッシュスキャンのスキップ

特定のプッシュ操作でプリプッシュスキャンをスキップするには、次を使用します:

SKIP=cycode-pre-push git push

または、すべてのプリプッシュフックをスキップするには:

git push --no-verify

[!TIP] プリプッシュフックはgit pushコマンドでトリガーされ、プッシュされようとしているコミットのみをスキャンするため、リポジトリ全体をスキャンするよりも効率的です。

スキャンからパスを除外する

.cycodeignoreファイルを使用して、Cycode CLIがスキャンから除外するファイルとディレクトリを指定できます。 これは.gitignoreファイルと同様に機能します。これにより、関連するコードにスキャンを集中させ、特定のパスがローカルで違反をトリガーするのを防ぐことができます。

仕組み

  1. 作業フォルダーに.cycodeignoreという名前のファイルを作成します。
  2. .gitignoreと同じパターンを使用して、除外するファイルとディレクトリをリストします。
  3. cycodeスキャンコマンドを実行する予定のディレクトリにこのファイルを配置します。

[!WARNING]

  • 無効なファイル.cycodeignoreファイルに構文エラーが含まれている場合、CLIスキャンは失敗し、エラーを返します。
  • パスの無視と違反の無視:このファイルはパスを除外するためのものです。これは、CLIが特定の違反を無視する機能(たとえば、--ignore-violationフラグの使用)とは異なります。

サポートされているスキャナー

  • SAST
  • IaC(近日公開)
  • SCA(近日公開)

スキャン結果

各スキャンは、問題が見つかったかどうかを示すメッセージで完了します。

問題が見つからない場合、スキャンは次の成功メッセージで終了します:

Good job! No issues were found!!! 👏👏👏

問題が見つかった場合、代わりに完了時に違反カードが表示されます。この場合は、結果メッセージで強調表示された特定の行について、問題のファイルを確認する必要があります。問題を解決するために必要な変更を実装し、スキャンを再度実行します。

シークレットの表示/非表示

以下の例では、cliサブフォルダーにあるファイルsecret_testでシークレットが見つかりました。メッセージの2番目の部分は、シークレットが表示される特定の行を示しています。この場合、googleApiKeyに割り当てられた値です。

この例では、実際のシークレット値がどのように難読化され、シークレットの大部分がアスタリスクに置き換えられているかに注目してください。スキャンはデフォルトでシークレットを難読化しますが、この機能を無効にして完全なシークレットを表示することもできます(スキャン結果を表示しているマシンが覗き見から十分に安全であると仮定します)。

シークレットの難読化を無効にするには、任意のタイプのスキャンに--show-secret引数を追加します。

次の例では、cliサブディレクトリに対してパススキャンが実行され、見つかったシークレットを完全に表示するオプションが有効になっています:

cycode scan --show-secret path ./cli

結果は難読化されません。

ソフトフェイル

通常の操作では、スキャン結果に問題が見つかった場合、CLIは終了コード1を返します。CI/CD設定によっては、これは通常、全体的な失敗になります。これが発生しないようにするには、ソフトフェイル機能を使用できます。

任意のタイプのスキャンに--soft-failオプションを追加すると、結果が見つかったかどうかに関係なく、終了コードは0に強制されます。

スキャン結果の例

シークレット結果の例

╭─────────────────────────────────────────────────────────────── Hardcoded generic-password is used ───────────────────────────────────────────────────────────────╮
│                                                                                                                                               Violation 12 of 12 │
│ ╭─ 🔍 Details ───────────────────────────────────────╮ ╭─ 💻 Code Snippet ─────────────────────────────────────────────────────────────────────────────────────╮ │
│ │  Severity    🟠 MEDIUM                             │ │   34 };                                                                                               │ │
│ │  In file     /Users/cycodemacuser/NodeGoat/test/s  │ │   35                                                                                                  │ │
│ │              ecurity/profile-test.js               │ │   36 var sutUserName = "user1";                                                                       │ │
│ │  Secret SHA  b4ea3116d868b7c982ee6812cce61727856b  │ │ ❱ 37 var sutUserPassword = "Us*****23";                                                               │ │
│ │              802b3063cd5aebe7d796988552e0          │ │   38                                                                                                  │ │
│ │  Rule ID     68b6a876-4890-4e62-9531-0e687223579f  │ │   39 chrome.setDefaultService(service);                                                               │ │
│ ╰────────────────────────────────────────────────────╯ │   40                                                                                                  │ │
│                                                        ╰───────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
│ ╭─ 📝 Summary ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │
│ │ A generic secret or password is an authentication token used to access a computer or application and is assigned to a password variable.                     │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

IaC結果の例

╭──────────── Enable Content Encoding through the attribute 'MinimumCompressionSize'. This value should be greater than -1 and smaller than 10485760. ─────────────╮
│                                                                                                                                              Violation 45 of 110 │
│ ╭─ 🔍 Details ───────────────────────────────────────╮ ╭─ 💻 Code Snippet ─────────────────────────────────────────────────────────────────────────────────────╮ │
│ │  Severity      🟠 MEDIUM                           │ │   20 BinaryMediaTypes:                                                                                │ │
│ │  In file       ...ads-copy/iac/cft/api-gateway/ap  │ │   21   - !Ref binaryMediaType1                                                                        │ │
│ │                i-gateway-rest-api/deploy.yml       │ │   22   - !Ref binaryMediaType2                                                                        │ │
│ │  IaC Provider  CloudFormation                      │ │ ❱ 23 MinimumCompressionSize: -1                                                                       │ │
│ │  Rule ID       33c4b90c-3270-4337-a075-d3109c141b  │ │   24 EndpointConfiguration:                                                                           │ │
│ │                53                                  │ │   25   Types:                                                                                         │ │
│ ╰────────────────────────────────────────────────────╯ │   26     - EDGE                                                                                       │ │
│                                                        ╰───────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
│ ╭─ 📝 Summary ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │
│ │ This policy validates the proper configuration of content encoding in AWS API Gateway. Specifically, the policy checks for the attribute                     │ │
│ │ 'minimum_compression_size' in API Gateway REST APIs. Correct configuration of this attribute is important for enabling content encoding of API responses for │ │
│ │ improved API performance and reduced payload sizes.                                                                                                          │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

SCA結果の例

╭─────────────────────────────────────────────────────── [CVE-2019-10795] Prototype Pollution in undefsafe ────────────────────────────────────────────────────────╮
│                                                                                                                                             Violation 172 of 195 │
│ ╭─ 🔍 Details ───────────────────────────────────────╮ ╭─ 💻 Code Snippet ─────────────────────────────────────────────────────────────────────────────────────╮ │
│ │  Severity               🟠 MEDIUM                  │ │   26758   "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=",                                           │ │
│ │  In file                /Users/cycodemacuser/Node  │ │   26759   "dev": true                                                                                 │ │
│ │                         Goat/package-lock.json     │ │   26760 },                                                                                            │ │
│ │  CVEs                   CVE-2019-10795             │ │ ❱ 26761 "undefsafe": {                                                                                │ │
│ │  Package                undefsafe                  │ │   26762   "version": "2.0.2",                                                                         │ │
│ │  Version                2.0.2                      │ │   26763   "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.2.tgz",                   │ │
│ │  First patched version  Not fixed                  │ │   26764   "integrity": "sha1-Il9rngM3Zj4Njnz9aG/Cg2zKznY=",                                           │ │
│ │  Dependency path        nodemon 1.19.1 ->          │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
│ │                         undefsafe 2.0.2            │                                                                                                           │
│ │  Rule ID                9c6a8911-e071-4616-86db-4  │                                                                                                           │
│ │                         943f2e1df81                │                                                                                                           │
│ ╰────────────────────────────────────────────────────╯                                                                                                           │
│ ╭─ 📝 Summary ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │
│ │ undefsafe before 2.0.3 is vulnerable to Prototype Pollution. The 'a' function could be tricked into adding or modifying properties of Object.prototype using │ │
│ │ a __proto__ payload.                                                                                                                                         │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

SAST結果の例

╭───────────────────────────────────────────── [CWE-208: Observable Timing Discrepancy] Observable Timing Discrepancy ─────────────────────────────────────────────╮
│                                                                                                                                               Violation 24 of 49 │
│ ╭─ 🔍 Details ───────────────────────────────────────╮ ╭─ 💻 Code Snippet ─────────────────────────────────────────────────────────────────────────────────────╮ │
│ │  Severity       🟠 MEDIUM                          │ │   173         " including numbers, lowercase and uppercase letters.";                                 │ │
│ │  In file        /Users/cycodemacuser/NodeGoat/app  │ │   174     return false;                                                                               │ │
│ │                 /routes/session.js                 │ │   175 }                                                                                               │ │
│ │  CWE            CWE-208                            │ │ ❱ 176 if (password !== verify) {                                                                      │ │
│ │  Subcategory    Security                           │ │   177     errors.verifyError = "Password must match";                                                 │ │
│ │  Language       js                                 │ │   178     return false;                                                                               │ │
│ │  Security Tool  Bearer (Powered by Cycode)         │ │   179 }                                                                                               │ │
│ │  Rule ID        19fbca07-a8e7-4fa6-92ac-a36d15509  │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
│ │                 fa9                                │                                                                                                           │
│ ╰────────────────────────────────────────────────────╯                                                                                                           │
│ ╭─ 📝 Summary ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │
│ │ Observable Timing Discrepancy occurs when the time it takes for certain operations to complete can be measured and observed by attackers. This vulnerability │ │
│ │ is particularly concerning when operations involve sensitive information, such as password checks or secret comparisons. If attackers can analyze how long   │ │
│ │ these operations take, they might be able to deduce confidential details, putting your data at risk.                                                         │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

会社のカスタム修復ガイドライン

会社がCycodeポータルの関連ポリシーでカスタム修復ガイドラインを設定している場合、追加した修復ガイドラインを含む「会社のガイドライン」フィールドが表示されます。会社のガイドラインを追加していない場合、このフィールドはCLIツールに表示されないことに注意してください。

スキャン結果の無視

無視ルールを追加して、特定のシークレット値、特定のSHA512値、特定のパス、および特定のCycodeシークレットおよびIaCルールIDを無視できます。これにより、スキャンはこれらの値に対してアラートを出さなくなります。無視ルールは./.cycode/config.yamlファイルにローカルに書き込まれ、保存されます。

[!WARNING] 無視する値を追加する場合は、スキャンが真陽性を検出し続けるように、値、パス、およびポリシーを慎重に検討する必要があります。

cycode ignoreコマンドで使用できるオプションは次のとおりです:

オプション説明
--by-value TEXTシークレットのスキャン中に特定の値を無視します。詳細はシークレット値の無視を参照してください。
--by-sha TEXTシークレットのスキャン中に文字列の特定のSHA512表現を無視します。詳細はシークレットSHA値の無視を参照してください。
--by-path TEXT特定のパスをスキャン対象から除外します。スキャンタイプを指定する必要があります。詳細はパスの無視を参照してください。
--by-rule TEXT特定のシークレットルールID/IaCルールID/SCAルールIDのスキャンを無視します。詳細はシークレットまたはIaCルールの無視を参照してください。
--by-package TEXTSCAスキャン実行中に特定のパッケージバージョンのスキャンを無視します。期待されるパターン - name@version。詳細はパッケージの無視を参照してください。
--by-cve TEXTSCAスキャン実行中に特定のCVEのスキャンを無視します。期待されるパターン: CVE-YYYY-NNN。
-t, --scan-type [secret|iac|sca|sast]実行するスキャンを指定します(secret/iac/sca/sast)。デフォルト値はsecretです。
-g, --global無視ルールを追加し、グローバルの.cycode設定ファイルに更新します。

シークレット値の無視

特定のシークレット値を無視するには、--by-valueフラグを使用する必要があります。これにより、指定したシークレット値が今後のすべてのスキャンから無視されます。無視するシークレット値を追加するには、次のコマンドを使用します:

cycode ignore --by-value {{secret-value}}

このセクションの冒頭の例では、特定のシークレット値を無視するコマンドは次のとおりです:

cycode ignore --by-value h3110w0r1d!@#$350

上記の例では、h3110w0r1d!@#$350値をマスクされていないシークレット値に置き換えます。スキャン結果でシークレット値を確認する方法の詳細については、Cycodeスキャンオプションを参照してください。

シークレットSHA値の無視

特定のシークレットSHA値を無視するには、--by-shaフラグを使用する必要があります。これにより、指定したシークレットSHA値が今後のすべてのスキャンから無視されます。無視するシークレットSHA値を追加するには、次のコマンドを使用します:

cycode ignore --by-sha {{secret-sha-value}}

このセクションの冒頭の例では、特定のシークレットSHA値を無視するコマンドは次のとおりです:

cycode ignore --by-sha a44081db3296c84b82d12a35c446a3cba19411dddfa0380134c75f7b3973bff0

上記の例では、a44081db3296c84b82d12a35c446a3cba19411dddfa0380134c75f7b3973bff0値をシークレットSHA値に置き換えます。

パスの無視

シークレット、IaC、またはSCAスキャンの特定のパスを無視するには、--by-pathフラグを-t, --scan-typeフラグと組み合わせて使用する必要があります(スキャンタイプを指定する必要があります)。これにより、指定したパスが指定したスキャンタイプの今後のすべてのスキャンから無視されます。無視するパスを追加するには、次のコマンドを使用します:

cycode ignore -t {{scan-type}} --by-path {{path}}

このセクションの冒頭の例では、シークレットの特定のパスを無視するコマンドは次のとおりです:

cycode ignore -t secret --by-path ~/home/my-repo/config

上記の例では、~/home/my-repo/config値をパス値に置き換えます。

このセクションの冒頭の例では、IaCスキャンから特定のパスを無視するコマンドは次のとおりです:

cycode ignore -t iac --by-path ~/home/my-repo/config

上記の例では、~/home/my-repo/config値をパス値に置き換えます。

このセクションの冒頭の例では、SCAスキャンから特定のパスを無視するコマンドは次のとおりです:

cycode ignore -t sca --by-path ~/home/my-repo/config

上記の例では、~/home/my-repo/config値をパス値に置き換えます。

シークレット、IaC、SCA、またはSASTルールの無視

特定のシークレット、IaC、SCA、またはSASTルールを無視するには、--by-ruleフラグを-t, --scan-typeフラグと組み合わせて使用する必要があります(スキャンタイプを指定する必要があります)。これにより、指定したルールID値が今後のすべてのスキャンから無視されます。無視するルールID値を追加するには、次のコマンドを使用します:

cycode ignore -t {{scan-type}} --by-rule {{rule-ID}}

このセクションの冒頭の例では、特定のシークレットルールIDを無視するコマンドは次のとおりです:

cycode ignore -t secret --by-rule ce3a4de0-9dfc-448b-a004-c538cf8b4710

上記の例では、ce3a4de0-9dfc-448b-a004-c538cf8b4710値を無視したいルールIDに置き換えます。

このセクションの冒頭の例では、特定のIaCルールIDを無視するコマンドは次のとおりです:

cycode ignore -t iac --by-rule bdaa88e2-5e7c-46ff-ac2a-29721418c59c

上記の例では、bdaa88e2-5e7c-46ff-ac2a-29721418c59c値を無視したいルールIDに置き換えます。

このセクションの冒頭の例では、特定のSCAルールIDを無視するコマンドは次のとおりです:

cycode ignore -t sca --by-rule dc21bc6b-9f4f-46fb-9f92-e4327ea03f6b

上記の例では、dc21bc6b-9f4f-46fb-9f92-e4327ea03f6b値を無視したいルールIDに置き換えます。

パッケージの無視

[!NOTE] このオプションはSCAスキャンでのみ利用可能です。

SCAスキャンで特定のパッケージを無視するには、--by-packageフラグを-t, --scan-typeフラグと組み合わせて使用する必要があります(scaスキャンタイプを指定する必要があります)。これにより、{{package_name}}@{{package_version}}形式を使用して、指定したパッケージが今後のすべてのスキャンから無視されます。無視するパッケージとバージョンを追加するには、次のコマンドを使用します:

cycode ignore --scan-type sca --by-package {{package_name}}@{{package_version}}

または

cycode ignore -t sca --by-package {{package_name}}@{{package_version}}

以下の例では、特定のSCAパッケージを無視するコマンドは次のとおりです:

cycode ignore --scan-type sca --by-package pyyaml@5.3.1

上記の例では、pyyamlをパッケージ名に、5.3.1を無視したいパッケージバージョンに置き換えます。

設定ファイルによる無視

適用された無視ルールは、config.yamlという設定ファイルに保存されます。 このファイルは開発者間で簡単に共有したり、リモートのGitにコミットしたりすることもできます。 これらのファイルは常に.cycodeフォルダに配置されます。 フォルダはドット(.)で始まるため、表示するには隠しファイルの表示を有効にする必要があります。

設定ファイルのパス

デフォルトでは、すべてのcycode ignoreコマンドは、CLIが実行された現在のディレクトリに無視ルールを保存します。

例:/Users/name/projects/backendから無視CLIコマンドを実行すると、config.yaml/Users/name/projects/backend/.cycodeに作成されます。

➜  backend  pwd
/Users/name/projects/backend
➜  backend  cycode ignore --by-value test-value
➜  backend  tree -a
.
└── .cycode
    └── config.yaml

2 directories, 1 file

2つ目のオプションは、無視ルールをグローバル設定ファイルに保存することです。 グローバル設定のパスは~/.cycode/config.yamlです。 ここで、~はmacOSではusers home directory, for example, /Users/name`を意味します。

グローバルスペースへの保存は、cycode ignoreコマンドの-gフラグを使用して実行できます。 例:cycode ignore -g --by-value test-value

適切な作業ディレクトリ

.cycodeフォルダを配置し、CLIを同じ場所から実行することが非常に重要です。 CI/CD(GitHub Actions、Jenkinsなど)などの異なる環境で作業する場合は、これを再確認する必要があります。

.cycodeフォルダをリポジトリのルートにコミットできます。このシナリオでは、リポジトリのルートからCLIスキャンを実行する必要があります。それが要件に合わない場合は、.cycodeフォルダを任意の場所に一時的にコピーし、そのフォルダからCLIスキャンを実行できます。

設定内の無視ルールの構造

CLIが無視ルールをどのように保存するかを理解することは、CLIなしでこれらの設定ファイルを読み取ったり、変更したりするために重要です。

抽象的なYAML構造:

exclusions:
  {scanTypeName}:
    {ignoringType}:
    - someIgnoringValue1
    - someIgnoringValue2

scanTypeNameの可能な値:iacscasastsecret

ignoringTypeの可能な値:pathsvaluesrulespackagesshascves

[!WARNING] 「値による無視」の値はプレーンテキストとして保存されません! CLIは値のsha256ハッシュを代わりに保存します。 設定ファイルを手動で変更する場合は、文字列のハッシュを配置する必要があります。

実際のconfig.yamlの例:

exclusions:
  iac:
    rules:
    - bdaa88e2-5e7c-46ff-ac2a-29721418c59c
  sca:
    packages:
    - pyyaml@5.3.1
  secret:
    paths:
    - /Users/name/projects/build
    rules:
    - ce3a4de0-9dfc-448b-a004-c538cf8b4710
    shas:
    - a44081db3296c84b82d12a35c446a3cba19411dddfa0380134c75f7b3973bff0
    values:
    - a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3
    - 60303ae22b998861bce3b28f33eec1be758a213c86c93c076dbe9f558c11c752

レポートコマンド

SBOMレポートの生成

ソフトウェア部品表(SBOM)は、アプリケーションの開発と配信に関与するすべての構成コンポーネントとソフトウェア依存関係のインベントリです。 このコマンドを使用すると、ローカルプロジェクトまたはリポジトリURIのSBOMレポートを作成できます。

このコマンドで使用できるオプションは次のとおりです:

オプション説明必須デフォルト
-f, --format [spdx-2.2|spdx-2.3|cyclonedx-1.4]SBOM形式はい
-o, --output-format [JSON]出力ファイル形式を指定しますいいえjson
--output-file PATH出力ファイルいいえ現在のディレクトリに保存される自動生成ファイル名
--include-vulnerabilities脆弱性を含めるいいえFalse
--include-dev-dependencies開発依存関係を含めるいいえFalse

このコマンドで使用できるサブコマンドは次のとおりです:

コマンド説明
pathコマンドで指定されたパスのSBOMレポートを生成します
repository-urlコマンドで指定されたリポジトリURIのSBOMレポートを生成します

リポジトリ

リポジトリURIのSBOMレポートを作成するには:
cycode report sbom --format <sbom format> --include-vulnerabilities --include-dev-dependencies --output-file </path/to/file> repository_url <repository url>

例:
cycode report sbom --format spdx-2.3 --include-vulnerabilities --include-dev-dependencies repository_url https://github.com/cycodehq/cycode-cli.git

ローカルプロジェクト

パスのSBOMレポートを作成するには:
cycode report sbom --format <sbom format> --include-vulnerabilities --include-dev-dependencies --output-file </path/to/file> path </path/to/project>

例:
cycode report sbom --format spdx-2.3 --include-vulnerabilities --include-dev-dependencies path /path/to/local/project

pathサブコマンドは、次の追加オプションをサポートしています:

オプション説明
--no-restoreロックファイルの復元をスキップし、直接依存関係のみをスキャンします。詳細はロック復元オプションを参照してください。
--gradle-all-sub-projectsすべてのサブプロジェクトでGradle復元コマンドを実行します(マルチプロジェクトのGradleビルドのルートから使用します)。
--maven-settings-fileMavenのみ、依存関係ツリーの構築時にカスタムのsettings.xmlファイルを使用できます。

インポートコマンド

SBOMのインポート

ソフトウェア部品表(SBOM)は、アプリケーションの開発と配信に関与するすべての構成コンポーネントとソフトウェア依存関係のインベントリです。 このコマンドを使用すると、ファイルシステムからSBOMファイルをCycodeにインポートできます。

このコマンドで使用できるオプションは次のとおりです:

オプション説明必須デフォルト
-n, --name TEXTSBOMの表示名はい
-v, --vendor TEXTSBOMを提供したエンティティの名前はい
-l, --label TEXTSBOMにラベルを添付するいいえ
-o, --owner TEXTこのSBOMの連絡先となるCycodeユーザーのメールアドレスいいえ
-b, --business-impact [High | Medium | Low]ビジネスへの影響いいえMedium

例:
cycode import sbom --name example-sbom --vendor cycode -label tag1 -label tag2 --owner example@cycode.com /path/to/local/project

スキャンログ

すべてのCLIスキャンはCycodeに記録されます。ログは、設定 > CLIログの下にあります。

構文ヘルプ

任意のコマンドにいつでも--help引数を追加すると、利用可能なオプションとその構文を表示するヘルプメッセージが表示されます。

一般的なヘルプを表示するには、次のコマンドを入力するだけです:

cycode --help

スキャンオプションを表示するには、次のように入力します:

cycode scan --help

特定のタイプのスキャンで利用可能なオプションを表示するには、次のように入力します:

cycode scan {{option}} --help

たとえば、パススキャンで利用可能なオプションを表示するには、次のように入力します:

cycode scan path --help

ignoreスキャン機能で利用可能なオプションを表示するには、次のコマンドを使用します:

cycode ignore --help

レポートで利用可能なオプションを表示するには、次のコマンドを使用します:

cycode report --help

特定のタイプのレポートで利用可能なオプションを表示するには、次のように入力します:

cycode scan {{option}} --help