Cycode
公式開発ライフサイクルにおけるセキュリティを、CycodeによるSAST、SCA、シークレット、IaCスキャンで強化します。
Cycode MCPで何ができますか?
- シークレットをスキャン —
cycode_secret_scanを使用して、ハードコードされたシークレットがないかファイルやディレクトリをスキャンするようアシスタントに依頼します。 - SCA の問題をスキャン —
cycode_sca_scanを使用して、脆弱性やライセンスの問題を対象としたソフトウェア構成分析(SCA)スキャンを依頼します。 - IaC の設定ミスをスキャン —
cycode_iac_scanを使用して、Infrastructure as Code の設定ミスをアシスタントにチェックさせます。 - SAST の問題をスキャン —
cycode_sast_scanを使用して、コード品質の問題やセキュリティ上の欠陥を対象とした静的アプリケーションセキュリティテスト(SAST)スキャンを実行します。 - CLI のステータスを確認 —
cycode_statusを使用して、Cycode CLI のバージョン、認証ステータス、設定の詳細を確認します。
ドキュメント
Cycode CLI ユーザーガイド
Cycode Command Line Interface(CLI)は、リポジトリをスキャンして、シークレット、Infrastructure as Code の設定ミス、ソフトウェア構成分析の脆弱性、静的アプリケーションセキュリティテストの問題を検出するために、ローカルにインストールできるアプリケーションです。
このガイドでは、インストールと使用方法の両方について説明します。
目次
- 前提条件
- インストール
- Cycode CLI コマンド
- 証明書とプロキシ
- MCP コマンド
- Platform コマンド
- AI ガードレール
- Scan コマンド
- Report コマンド
- Import コマンド
- スキャンログ
- 構文ヘルプ
前提条件
- Cycode CLI アプリケーションには、Python バージョン 3.10 以降が必要です。
- CLI で Cycode に認証するには、
cycode authコマンドを使用します。- または、Service Account TokenおよびPersonal Access Tokenのページに記載された手順に従って Cycode Client ID と Client Secret Key を取得できます。これらのページでは、値の取得方法について詳しく説明しています。
インストール
以下のインストール手順は、Windows と UNIX / Linux の両方のオペレーティングシステムで使用できます。
[!NOTE] 以下の手順では、Python 関連のコマンドに
python3とpip3を使用することを前提としています。ただし、Python 環境の設定によっては、pythonとpipコマンドを使用するシステムもあります。
Cycode CLI のインストール
Cycode CLI アプリケーションをローカルマシンにインストールするには、次の手順を実行します。
-
コマンドラインまたはターミナルアプリケーションを開きます。
-
次のいずれかのコマンドを実行します。
-
PyPIからインストールする場合:
pip3 install cycode -
Homebrewからインストールする場合:
brew install cycode -
GitHub Releasesからインストールする場合は、該当するオペレーティングシステムとアーキテクチャの実行ファイルをダウンロードし、次のコマンドを実行します。
cd /path/to/downloaded/cycode-cli chmod +x cycode ./cycode -
-
最後に、CLI を認証します。Cycode のクライアント ID と認証情報(クライアントシークレットまたは OIDC ID トークン)を設定する方法は 3 つあります。
- cycode auth(推奨)
- cycode configure
- 環境変数に追加する
Auth コマンドを使用する
[!NOTE] Cycode CLI で認証するためのローカルマシンの設定には、この方法を推奨します。
-
ターミナルまたはコマンドラインウィンドウで、次のコマンドを入力します。
cycode auth -
ブラウザーウィンドウが表示され、Cycode へのログインを求められます(以下を参照)。
-
このページでログイン認証情報を入力してログインします。
-
最終的に以下のページに移動し、Cycode の認証に使用するビジネスグループを選択するよう求められます(該当する場合)。
[!NOTE] これが Cycode CLI のデフォルトの認証方法になります。
-
Allow ボタンをクリックして、選択したビジネスグループで Cycode CLI を認証します。
-
正常に選択されると、完了後に次の画面が表示されます。
-
ブラウザーウィンドウを閉じると、ターミナルまたはコマンドライン画面に次の内容が表示されます。
Successfully logged into cycode
Configure コマンドを使用する
[!NOTE] Linux または Windows の環境変数を使用して Cycode Client ID と Client Secret をすでに設定している場合、それらの認証情報がこの方法より優先されます。
-
ターミナルまたはコマンドラインウィンドウで、次のコマンドを入力します。
cycode configure -
Cycode API URL の値を入力します(空欄のままにするとデフォルト値が使用されます)。
Cycode API URL [https://api.cycode.com]: https://api.onpremise.com -
Cycode APP URL の値を入力します(空欄のままにするとデフォルト値が使用されます)。
Cycode APP URL [https://app.cycode.com]: https://app.onpremise.com -
Cycode Client ID の値を入力します。
Cycode Client ID []: 7fe5346b-xxxx-xxxx-xxxx-55157625c72d -
Cycode Client Secret の値を入力します(OIDC ID トークンを使用する場合は省略します)。
Cycode Client Secret []: c1e24929-xxxx-xxxx-xxxx-8b08c1839a2e -
Cycode OIDC ID Token の値を入力します(任意)。
Cycode ID Token []: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9... -
値が正常に入力されると、次のメッセージが表示されます。
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 の場合
-
コントロールパネルから、システムメニューに移動します。
-
次に、システムの詳細設定をクリックします。
-
表示されたシステムのプロパティウィンドウで、環境変数ボタンをクリックします。
-
CYCODE_CLIENT_IDとCYCODE_CLIENT_SECRETの変数を作成し、それぞれ ID と Secret Key に対応する値を設定します。OIDC で認証する場合は、OIDC ID トークンの値を指定したCYCODE_ID_TOKENも追加します。
-
インストールを完了するには、パスに
cycode.exeを追加します。
Pre-Commit Hook のインストール
Cycode の pre-commit および pre-push hook はローカルリポジトリに設定できます。これにより、Cycode CLI アプリケーションがコードの問題を自動的に検出し、コードベースへのコミットまたはプッシュ前に通知します。
[!NOTE] pre-commit および pre-push hook は IaC スキャンでは使用できません。
pre-commit hook をインストールするには、次の手順を実行します。
Pre-Commit Hook のインストール
-
pre-commit フレームワークをインストールします(Python 3.10 以降がインストールされている必要があります)。
pip3 install pre-commit -
設定するローカル Git リポジトリの最上位ディレクトリに移動します。
-
リポジトリの最上位ディレクトリに
.pre-commit-config.yamlという名前の新しい YAML ファイルを作成し(先頭に.を含めます)、次の内容を記述します。repos: - repo: https://github.com/cycodehq/cycode-cli rev: v3.25.0 hooks: - id: cycode stages: [pre-commit] -
作成したファイルを用途に合わせて変更します。Secrets のスキャンを有効にするには、hook ID
cycodeを使用します。SCA スキャンを有効にするには、hook IDcycode-scaを使用します。SAST スキャンを有効にするには、hook IDcycode-sastを使用します。すべての種類のスキャンを有効にする場合は、次の設定を使用します。repos: - repo: https://github.com/cycodehq/cycode-cli rev: v3.25.0 hooks: - id: cycode stages: [pre-commit] - id: cycode-sca stages: [pre-commit] - id: cycode-sast stages: [pre-commit] -
Cycode の hook をインストールします。
pre-commit installhook のインストールが成功すると、次のメッセージが表示されます:
Pre-commit installed at .git/hooks/pre-commit。 -
pre-commit hook を最新の状態に保ちます。
pre-commit autoupdateこれにより、
.pre-commit-config.yaml内のrevが、利用可能な最新バージョンの Cycode CLI に自動的に更新されます。
[!NOTE]
git commitコマンドの実行時にトリガーされます。 hook はコミット対象としてステージされたファイルのみを対象にします。
Pre-Push Hook のインストール
pre-commit hook に加えて、またはその代わりに pre-push hook をインストールするには、次の手順を実行します。
-
.pre-commit-config.yamlファイルに pre-push hook を追加します。repos: - repo: https://github.com/cycodehq/cycode-cli rev: v3.25.0 hooks: - id: cycode-pre-push stages: [pre-push] -
pre-push hook をインストールします。
pre-commit install --hook-type pre-push -
pre-commit hook と pre-push hook の両方を使用する場合は、次を実行します。
pre-commit install pre-commit install --hook-type pre-push
[!NOTE] pre-push hook は
git pushコマンドの実行時にトリガーされ、プッシュ予定のコミットのみをスキャンします。
Cycode CLI コマンド
Cycode CLI アプリケーションで使用できるオプションとコマンドは次のとおりです。
| オプション | 説明 |
|---|---|
-v, --verbose | 詳細なログを表示します。 |
--no-progress-meter | 進行状況メーターを表示しません。 |
--no-update-notifier | CLI の更新を確認しません。 |
-o, --output [rich|text|json|table] | 出力形式を指定します。デフォルトは rich です。 |
--client-id TEXT | このスキャン実行に限り、Cycode client ID を指定します。 |
--client-secret TEXT | このスキャン実行に限り、Cycode client secret を指定します。 |
--id-token TEXT | このスキャン実行に限り、Cycode OIDC ID token を指定します。 |
--install-completion | 現在のシェルに補完機能をインストールします。 |
--show-completion [bash|zsh|fish|powershell|pwsh] | 指定したシェルの補完機能を表示します。コピーしたり、インストールをカスタマイズしたりできます。 |
-h, --help | 指定したコマンドのオプションを表示します。 |
| コマンド | 説明 |
| ------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| auth | CLIをCycodeアカウントに関連付けるため、マシンを認証します。 |
| configure | CLIクライアントの認証を設定するための初期コマンドです。 |
| ignore | 特定の値、パス、またはルールIDを無視します。 |
| mcp | Model Context Protocol(MCP)サーバーを起動し、Cycodeのスキャン機能とのAI連携を有効にします。 |
| scan | コンテンツをスキャンして、Secrets/IaC/SCA/SASTの違反を検出します。実行するスキャンの種類(commit-history/path/repositoryなど)を指定する必要があります。 |
| report | レポートを生成します。SBOMなど、実行するレポートの種類を指定する必要があります。 |
| status | CLIのステータスを表示して終了します。 |
証明書とプロキシ
デフォルトでは、Cycode CLIはCLIに同梱されているCAバンドルを使用してHTTPS接続を検証します。
組織でHTTPSトラフィックを検査するプロキシを使用している場合、または独自のCAを使用するオンプレミス環境の場合は、 次の2つの方法があります。
方法1 — マシンにすでにインストールされている証明書を使用する。 CAがマシンの 証明書ストアにある場合(管理対象デバイスでは通常これに該当します)、次の設定を有効にします。
export CYCODE_CLI_ENABLE_TRUSTSTORE=1
CLIはWindowsの証明書ストア、macOSのKeychain、またはLinuxのシステムCAディレクトリを使用して検証するため、証明書パスを設定する必要はありません。
[!IMPORTANT] この設定は意図的にオプトイン方式になっています。マシンのストアを信頼することは、そのマシンに存在するすべてのルート証明書を信頼することを意味します。これには、管理者や悪意のあるソフトウェアによってインストールされた証明書も含まれます。マシンの証明書ストアが信頼できると確認できている場合に有効にしてください。
方法2 — CAバンドルファイルをCLIに指定する。 オプトインせずに使用できます。
| 環境変数 | 説明 |
|---|---|
REQUESTS_CA_BUNDLE | 信頼するCAバンドルファイル(.pemまたは.crt)へのパス。 |
CURL_CA_BUNDLE | REQUESTS_CA_BUNDLEのエイリアスです。後者が設定されていない場合に使用されます。 |
2つの方法は併用できます。CYCODE_CLI_ENABLE_TRUSTSTORE=1を設定すると、REQUESTS_CA_BUNDLEの証明書はマシンのストアに追加して信頼され、マシンのストアの代わりにはなりません。
[!TIP]
-vを付けて任意のコマンドを実行すると、使用中の信頼元を確認できます。例:cycode -v status。
注意事項:
- Windowsでは、
REQUESTS_CA_BUNDLEもCURL_CA_BUNDLEも設定されていない場合、CLIは従来からシステムの証明書ストアにフォールバックします。この動作に変更はありません。 - プロキシ自体は、標準の
HTTP_PROXY、HTTPS_PROXY、NO_PROXY環境変数で設定します。
MCPコマンド [EXPERIMENT]
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環境変数を設定する必要はありません。
MCPサーバーの起動
MCPサーバーを起動するには、次のコマンドを使用します。
cycode mcp
デフォルトでは、ローカル連携やサブプロセスを起動できるAIアプリケーションに適したstdioトランスポートを使用してサーバーが起動します。
使用可能なオプション
| オプション | 説明 |
|---|---|
-t, --transport | MCPサーバーのトランスポートタイプ:stdio、sse、またはstreamable-http(デフォルト:stdio) |
-H, --host | サーバーをバインドするホストアドレス(stdio以外のトランスポートでのみ使用)(デフォルト:127.0.0.1) |
-p, --port | サーバーをバインドするポート番号(stdio以外のトランスポートでのみ使用)(デフォルト:8000) |
--help | ヘルプメッセージと使用可能なオプションを表示 |
MCPツール
MCPサーバーは、AIシステムが使用できる次のツールを提供します。
| ツール名 | 説明 |
|---|---|
cycode_secret_scan | ハードコードされたシークレットをスキャンします |
cycode_sca_scan | Software Composition Analysis(SCA)を実行し、脆弱性とライセンスの問題をスキャンします |
cycode_iac_scan | Infrastructure as Code(IaC)の設定ミスをスキャンします |
cycode_sast_scan | Static Application Security Testing(SAST)を実行し、コード品質とセキュリティ上の欠陥をスキャンします |
cycode_status | Cycode 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
カスタムホストとポートでstreamable 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"
}
}
}
}
pipxインストールでのstdioトランスポートの場合:
{
"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"
}
}
}
}
uvxインストールでのstdioトランスポートの場合:
{
"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"
}
}
}
streamable 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"
}
}
}
streamable 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"
}
}
}
詳細設定
タイムアウトとカスタム証明書(プロキシ環境)
MCPクライアントによって長時間実行されるスキャンが途中で終了する場合は、ツール呼び出しのタイムアウトを延長してください。
| 環境変数 | 説明 |
|---|---|
MCP_TOOL_TIMEOUT | ClaudeやGitHub CopilotなどのMCPクライアントが、ツール呼び出しの完了を待つタイムアウト(秒)。長時間実行されるスキャンが完了前に打ち切られる場合は、この値を増やしてください。 |
企業プロキシの背後で使用する場合は、MCPサーバーのenvブロックで証明書変数を設定します。設定方法については
証明書とプロキシを参照してください。マシンにすでにある証明書を使用するには
CYCODE_CLI_ENABLE_TRUSTSTORE=1を設定するか、CAバンドルファイルを指定するには
REQUESTS_CA_BUNDLEを設定します。
カスタムCAバンドルと長めのタイムアウトを指定したmcp.json設定の例:
{
"mcpServers": {
"cycode": {
"command": "cycode",
"args": ["mcp"],
"env": {
"REQUESTS_CA_BUNDLE": "/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つあります。
-vまたは--verboseフラグを使用する:
cycode -v mcp
CYCODE_CLI_VERBOSE環境変数を使用する:
CYCODE_CLI_VERBOSE=1 cycode mcp
デバッグログには、次の詳細情報が表示されます。
- サーバーの起動と設定
- 接続の試行とステータス
- ツールの実行と結果
- 発生したエラーや警告
この情報は、次のような場合に役立ちます。
- 接続の問題を診断する
- 特定のツールが動作しない理由を把握する
- 認証の問題を特定する
- トランスポート固有の問題をデバッグする
MCPの設定
Platformコマンド [BETA]
[!WARNING]
platformコマンドはベータ版です。コマンド、引数、出力形式はCycode API仕様から動的に生成されるため、予告なくリリース間で変更される場合があります。現時点では、本番環境の自動化でこれらに依存しないでください。
cycode platformコマンドは、Cycodeプラットフォームの読み取りAPIをCLIコマンドとして公開します。エンドポイントをリソース(例:projects、violations、workflows)ごとにグループ化し、各エンドポイントのパラメーターを型付き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 scan、cycode 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呼び出しでは、ネットワークからデータを取得します。接続が遅い場合、初回の呼び出しには数秒かかることがあります。以降の呼び出しは、キャッシュの有効期限が切れるまでほぼ瞬時に完了します。 CYCODE_SPEC_CACHE_TTL=<seconds>でキャッシュの TTL を上書きできます。
AI ガードレール [BETA]
AI Guardrails は、対応する AI コーディングエージェント(Claude Code、Cursor、Copilot、Codex)にフックをインストールし、プロンプト、エージェントが読み取るファイル、MCP ツールの引数に含まれるシークレットを、モデルに送信される前にスキャンします。
AI Guardrails が収集するデータ
スキャンはサーバー側で行われるため、スキャン対象のコンテンツはマシンの外部に送信されます。プロンプトのテキスト、エージェントが読み取るファイルの内容、MCP ツールの引数は、シークレットの有無を確認するために Cycode テナントへ送信されます。
各イベントには、開発者とマシンに関するコンテキストも含めて報告されるため、検出結果の発生元となったデバイスとユーザーを特定できます。この情報の一部は個人データです。
- デバイス識別子 — マシンのホスト名とハードウェアのシリアル番号。
- ユーザー識別子 — AI コーディングエージェントにサインインしているユーザーのメールアドレスと、ローカルのオペレーティングシステムのユーザー名。
- 環境の詳細 — オペレーティングシステムとバージョン、AI エージェント、そのバージョンと使用中のモデル、エージェントの MCP 設定ファイルの内容、および有効になっているプラグイン。
ハードウェアのシリアル番号は、コマンドを実行したユーザーのみが読み取れるローカルの一時ファイルにキャッシュされるため、フックを繰り返し呼び出してもハードウェア情報を再取得しません。
このデータの収集が環境で許容されない場合は、ガードレールのフックをインストールしないでください(cycode ai-guardrails uninstall を実行すると、インストール済みのフックが削除されます)。
Scan コマンド
スキャンの実行
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/unmaintained-packages/malicious-packages)を指定します。デフォルトはすべてです。 |
--monitor | 指定すると、スキャン結果が Cycode に記録されます。 |
--cycode-report | Cycode プラットフォーム上のスキャンレポートへのリンクをコンソール出力に表示します。 |
--no-restore | 指定すると、Cycode は restore コマンドを実行しません。直接依存関係のみをスキャンします。 |
--stop-on-error | ファイルの収集または依存関係の復元に失敗した場合、失敗したファイルをスキップして続行するのではなく、スキャンを中止します。 |
--gradle-all-sub-projects | すべてのサブプロジェクトに対して gradle restore コマンドを実行します。これは次の場所から実行してください。 |
--maven-settings-file | Maven のみ。依存関係のスキャン時にカスタム settings.xml ファイルを使用できます。 |
--help | 指定したコマンドのオプションを表示します。 |
| コマンド | 説明 |
|---|---|
| commit-history | コミット履歴をスキャンするか、特定のコミット間の差分スキャンを実行します。 |
| path | コマンドで指定したパス内のファイルをスキャンします。 |
| pre-commit | まだコミットされていないコンテンツをスキャンします。フラグを使ったローカル差分スキャンにも対応しています(IDE に適しています)。 |
| repository | 履歴を含めて Git リポジトリをスキャンします。 |
オプション
重大度オプション
スキャン結果を特定の重大度しきい値に制限するには、引数 --severity-threshold をスキャンコマンドに追加します。
たとえば、次のコマンドはリポジトリをスキャンし、重大度が Medium 以上のポリシー違反を検出します。
cycode scan --severity-threshold MEDIUM repository ~/home/git/codebase
Monitor オプション
[!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 Logs セクションに表示されます。コマンドに --cycode-report フラグを含めた場合、スキャン結果の後に特定のレポートへの直接リンクがターミナルに表示されます。
[!WARNING] このページを表示するには、Cycode で
ownerまたはadminのロールが必要です。

レポートページは次のような表示になります。

パッケージの脆弱性オプション
[!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 スキャンでのみ使用できます。
メンテナンスされていないパッケージ(OpenSSF Scorecard の Maintained チェックのスコアが低く、最近のコミットや Issue の活動がほとんどない、またはまったくないパッケージ)のみをスキャンするには、-t sca または --scan-type sca オプションの後に引数 --sca-scan unmaintained-packages を追加します。
[!NOTE] メンテナンスされていないパッケージを報告するかどうかは、組織のポリシーによって制御されます。このオプションはスキャン結果を絞り込むものであり、テナントで無効になっているポリシーを有効にすることはできません。
前の例で、メンテナンスされていないパッケージのみを対象に SCA スキャンを実行する場合は、次のコマンドを実行します。
cycode scan -t sca --sca-scan unmaintained-packages repository ~/home/git/codebase
悪意のあるパッケージのオプション
[!NOTE] このオプションは SCA スキャンでのみ使用できます。
悪意のあるパッケージ(単に脆弱性があるのではなく、セキュリティアドバイザリでマルウェアとして特定された依存関係)のみをスキャンするには、-t sca または --scan-type sca オプションの後に引数 --sca-scan malicious-packages を追加します。
悪意のあるパッケージの違反は常に Critical として報告され、CVSS スコアも修正バージョンもありません。唯一の修復方法は依存関係を削除することです。
[!NOTE] 悪意のあるパッケージを報告するかどうかは、組織のポリシーによって制御されます。このオプションはスキャン結果を絞り込むものであり、テナントで無効になっているポリシーを有効にすることはできません。
前の例で、悪意のあるパッケージのみを対象に SCA スキャンを実行する場合は、次のコマンドを実行します。
cycode scan -t sca --sca-scan malicious-packages repository ~/home/git/codebase
ロックファイルの復元オプション
[!NOTE] このオプションは SCA スキャンでのみ使用できます。
SCA スキャンを実行すると、Cycode CLI は検出した各対応マニフェストファイルについて、依存関係のロックファイルの復元(生成)を自動的に試みます。これにより、マニフェストに直接記載された依存関係だけでなく、推移的依存関係もスキャンできます。この手順を省略して直接依存関係のみをスキャンするには、--no-restore フラグを使用します。
次のエコシステムでは、ロックファイルの自動復元に対応しています。
| エコシステム | マニフェストファイル | 生成されるロックファイル | 呼び出されるツール(ロックファイルがない場合) |
|---|---|---|---|
| npm | package.json | package-lock.json | npm install --package-lock-only --ignore-scripts --no-audit |
| Yarn | package.json | yarn.lock | yarn install --ignore-scripts |
| pnpm | package.json | pnpm-lock.yaml | pnpm install --ignore-scripts |
| Deno | deno.json / deno.jsonc | deno.lock | (既存のロックファイルのみを読み取り) |
| Go | go.mod | go.mod.graph | go list -m -json all + go mod graph |
| Maven | pom.xml | bcde.mvndeps | mvn dependency:tree |
| Gradle | build.gradle / build.gradle.kts | gradle-dependencies-generated.txt | gradle dependencies -q --console plain |
| SBT | build.sbt | build.sbt.lock | sbt dependencyLockWrite |
| NuGet | *.csproj | packages.lock.json | dotnet restore --use-lock-file |
| Ruby | Gemfile | Gemfile.lock | bundle --quiet |
| Poetry | pyproject.toml | poetry.lock | poetry lock |
| pip | pyproject.toml / requirements.txt | pylock.toml | pip lock . / pip lock -r requirements.txt -o pylock.toml |
| Pipenv | Pipfile | Pipfile.lock | pipenv lock |
| PHP Composer | composer.json | composer.lock | composer 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")
エラー時に停止するオプション
デフォルトでは、ファイルを読み取れない場合(権限エラーなど)や、SCA スキャン中に依存関係のロックファイルを生成できない場合でも、Cycode はスキャンを続行します。失敗した項目は警告とともにスキップされ、残りのファイルのスキャンが続行されます。
この動作を変更するには --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)である必要があります。
設定ファイルしかない場合は、次の手順でプランを生成できます。
-
Terraform 設定ファイルを含む作業ディレクトリを初期化します。
terraform init -
Terraform の実行プランを作成し、バイナリ出力を保存します。
terraform plan -out={tfplan_output} -
バイナリ出力ファイルを読み取り可能な JSON に変換します。
terraform show -json {tfplan_output} > {tfplan}.json -
Cycode CLI で
{tfplan}.jsonをスキャンします。cycode scan -t iac path ~/PATH/TO/YOUR/{tfplan}.json
コミット履歴スキャン
[!NOTE] IaC スキャンではコミット履歴スキャンを利用できません。
コミット履歴スキャンコマンドには、主に次の 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..commit2 | commit1 から commit2 までの変更 | abc123..def456 |
commit1...commit2 | commit1 にはなく commit2 にある変更 | main...feature-branch |
commit | コミットから HEAD までの変更 | HEAD~1 |
branch1..branch2 | branch1 から 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 の変更のみをスキャンできます。
Pre-Commit スキャン
Pre-commit スキャンは、リポジトリに変更をコミットする前に問題を自動的に検出します。このスキャンを手動で実行する必要はありません。このガイドのインストールセクションの説明に従って、pre-commit フックを設定してください。
pre-commit フックをインストールした後、特定のコミットでスキャンをスキップしたい場合があります。その場合は、1 回のコミットでスキャンをスキップするために、git コマンドに次の内容を追加します。
SKIP=cycode git commit -m <your commit message>`
このコマンドでは、次のオプションを使用できます。
| オプション | 説明 |
|---|---|
-b, --base-ref TEXT | 差分の比較対象となる Git ref(コミット、ブランチ、タグ)。デフォルトは HEAD で、pre-commit フックの動作と一致します |
--include-unstaged | ステージ済みの変更だけでなく、追跡対象ファイルの未ステージ変更もスキャンします。デフォルトでは無効です |
--path PATH | 差分スキャンの対象を絞る任意のパス。複数指定可能。デフォルトでは作業ディレクトリ全体 |
ローカル差分スキャン(IDE 統合)
--base-ref と --include-unstaged を指定すると、pre-commit を汎用的なローカル差分スキャンとして使用できます。任意のコミット(デフォルトは HEAD)と現在の作業ディレクトリを比較し、まだステージされていない編集内容も含めてスキャンします。これは、Git フックのフローではなく、作業中に継続的かつリアルタイムのフィードバックを必要とする IDE プラグインやその他のツールを対象としています。--include-unstaged と組み合わせると、--path により、IDE で現在エディターに開いているファイルだけにスキャン対象を絞ることができます。
[!NOTE] IaC スキャンでは、ローカル差分スキャン(これらのフラグを使用)は利用できません。
直近のコミットと比較して、現在変更されているすべての内容(ステージ済み + 未ステージ)をスキャンする:
cycode scan pre-commit --include-unstaged
特定のコミットまたはブランチと比較して変更をスキャンする:
cycode scan pre-commit --include-unstaged --base-ref main
特定のファイルのみをスキャンする(例: IDE で現在開いているファイル):
cycode scan pre-commit --include-unstaged --path src/app.py
Pre-Push スキャン
Pre-push スキャンは、リモートリポジトリに変更をプッシュする前に問題を自動的に検出します。このフックはクライアント側で実行され、プッシュ予定のコミットのみをスキャンするため、問題がリモートリポジトリに到達する前に効率よく検出できます。
[!NOTE] IaC スキャンでは pre-push フックを利用できません。
pre-push フックは pre-commit フレームワークと連携し、任意の git push 操作の前に実行するよう設定できます。
Pre-Push フックのインストール
pre-commit フレームワークを使用して pre-push フックを設定するには、次の手順に従います。
-
pre-commit フレームワークをインストールします(まだインストールされていない場合)。
pip3 install pre-commit -
.pre-commit-config.yamlファイルを作成または更新し、pre-push フックを追加します。repos: - repo: https://github.com/cycodehq/cycode-cli rev: v3.25.0 hooks: - id: cycode-pre-push stages: [pre-push] -
複数のスキャンタイプを使用する場合は、次の設定を使用します。
repos: - repo: https://github.com/cycodehq/cycode-cli rev: v3.25.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] -
pre-push フックをインストールします。
pre-commit install --hook-type pre-pushインストールが成功すると、次のメッセージが表示されます:
Pre-push installed at .git/hooks/pre-push。 -
pre-push フックを最新の状態に保ちます。
pre-commit autoupdate
Pre-Push スキャンの仕組み
このフックはプッシュされる各コミットを一度に 1 つずつスキャンするため、あるコミットで追加され、後続のコミットで削除されたシークレットも検出されます。pre-commit フレームワーク経由でインストールした場合、プッシュ範囲はフレームワークから取得されます。既存のブランチではリモートブランチ以降の新しいコミットが対象となり、新しいブランチではリモートにまだ存在しないコミットが対象となります(空のリモートにプッシュする場合はすべてのコミット)。手書きの .git/hooks/pre-push から実行する場合、範囲は git のフック入力から読み取られ、新しいブランチはデフォルトブランチとのマージベースからスキャンされます(下記参照)。
タグ、ブランチの削除、最新状態のブランチへのプッシュなど、スキャン対象がないプッシュはスキャンせずに通過します。フックがプッシュ対象を特定できない場合は、何もせずに通過するのではなく、エラーとなってプッシュをブロックします。
Cycode の pre-push フックでは always_run: true と pass_filenames: false が設定されます。これは、スキャン対象がファイルの一覧ではなく、プッシュされるコミットだからです。always_run がない場合、プッシュされるコミットによって変更ファイルがなくなると、pre-commit フレームワークはフックをスキップします。たとえば、あるコミットで追加されたシークレットが次のコミットで削除された場合が該当します。pass_filenames: false がない場合、フレームワークはスキャンで使用されない変更ファイル名を渡します。また、大規模なプッシュではファイル名を複数のバッチに分割し、バッチごとにフルスキャンを実行します。フックを独自に定義する場合(たとえば repo: local フックとして)、両方のオプションを設定してください。
デフォルトブランチのスマート検出
手書きのフックから実行する場合、pre-push スキャンは次の優先順位でマージベース計算に使用するデフォルトブランチを検出します。
- 環境変数:
CYCODE_DEFAULT_BRANCH- 手動で上書きできます - Git Remote HEAD:
git symbolic-ref refs/remotes/origin/HEADを使用して、実際のリモートデフォルトブランチを検出します - Git Remote Info: symbolic-ref が失敗した場合は
git remote show originにフォールバックします - ハードコードされたフォールバック: 一般的なデフォルトブランチ名(origin/main、origin/master、main、master)を使用します
カスタムデフォルトブランチの設定:
export CYCODE_DEFAULT_BRANCH=origin/develop
このスマート検出により、リポジトリで main、master、develop、またはその他のデフォルトブランチ名を使用しているかどうかにかかわらず、pre-push フックが正しく動作します。
Pre-Push スキャンのスキップ
特定の push 操作で pre-push スキャンをスキップするには、次を使用します。
SKIP=cycode-pre-push git push
または、すべての pre-push フックをスキップするには、次を使用します。
git push --no-verify
[!TIP] pre-push フックは
git pushコマンドでトリガーされ、push される予定のコミットのみをスキャンするため、リポジトリ全体をスキャンするより効率的です。
スキャン対象からパスを除外する
.cycodeignore ファイルを使用して、スキャン対象から除外するファイルやディレクトリを Cycode CLI に指定できます。
これは .gitignore ファイルと同じように機能します。これにより、関連するコードにスキャン対象を絞り、特定のパスがローカルで違反として検出されるのを防げます。
仕組み
- 作業フォルダーに
.cycodeignoreという名前のファイルを作成します。 .gitignoreと同じパターンを使用して、除外するファイルやディレクトリを列挙します。- cycode scan コマンドを実行するディレクトリにこのファイルを配置します。
[!WARNING]
- 無効なファイル:
.cycodeignoreファイルに構文エラーがあると、CLI スキャンは失敗し、エラーを返します。- パスの無視と違反の無視: このファイルはパスを除外するためのものです。特定の違反を無視する CLI の機能(たとえば、--ignore-violation フラグを使用する方法)とは異なります。
対応スキャナー
- SAST
- IaC(近日公開)
- SCA(近日公開)
スキャン結果
各スキャンの完了時に、問題が見つかったかどうかを示すメッセージが表示されます。
問題が見つからなかった場合、スキャンは次の成功メッセージで終了します。
Good job! No issues were found!!! 👏👏👏
問題が見つかった場合は、代わりに完了時に違反カードが表示されます。この場合、結果メッセージで強調表示された特定の行を確認するため、該当するファイルを調べてください。問題を解決するために必要な変更を加えた後、スキャンを再実行します。
シークレットの表示/非表示
以下の例では、サブフォルダー cli にあるファイル secret_test でシークレットが見つかりました。メッセージの後半には、シークレットが記載されている具体的な行が示されています。この例では、googleApiKey に割り当てられた値です。
例では、シークレットの大部分がアスタリスクに置き換えられ、実際の値が隠されていることに注目してください。スキャンではデフォルトでシークレットが隠されますが、必要に応じてこの機能を無効にし、シークレット全体を表示できます(スキャン結果を表示するマシンが、覗き見から十分に保護されていることを前提とします)。
シークレットのマスキングを無効にするには、任意の種類のスキャンに --show-secret 引数を追加します。
次の例では、シークレットが見つかった場合に全体を表示するオプションを有効にして、cli サブディレクトリに対して Path Scan を実行します。
cycode scan --show-secret path ./cli
この場合、結果はマスキングされません。
ソフトフェイル
通常の動作では、スキャン結果に問題が見つかると、CLI は終了コード 1 を返します。CI/CD の設定によっては、通常、これにより全体が失敗します。これを避けたい場合は、ソフトフェイル機能を使用できます。
任意の種類のスキャンに --soft-fail オプションを追加すると、結果が見つかったかどうかにかかわらず、終了コードは 0 に固定されます。
スキャン結果の例
Secrets の結果例
╭─────────────────────────────────────────────────────────────── 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 ポータルの該当ポリシーに独自の修正ガイドラインを設定している場合、「Company Guidelines」フィールドに追加したガイドラインが表示されます。会社のガイドラインを追加していない場合、このフィールドは CLI ツールに表示されません。
スキャン結果の無視
無視ルールを追加すると、特定のシークレット値、特定の SHA512 値、特定のパス、特定の Cycode シークレットルール ID および 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 TEXT | SCA スキャンの実行時に、特定のパッケージバージョンのスキャンを無視します。想定されるパターン - name@version。詳細については、パッケージの無視を参照してください。 |
--by-cve TEXT | SCA スキャンの実行時に、特定の 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 コマンドを実行すると、/Users/name/projects/backend/.cycode に config.yaml が作成されます。
➜ backend pwd
/Users/name/projects/backend
➜ backend cycode ignore --by-value test-value
➜ backend tree -a
.
└── .cycode
└── config.yaml
2 directories, 1 file
もう 1 つの方法は、無視ルールをグローバル設定ファイルに保存することです。
グローバル設定のパスは ~/.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 スキャンを実行できます。
config 内の無視ルールの構造
CLI が無視ルールをどのように保存するかを理解しておくことは、これらの設定ファイルを読み取ったり、CLI を使わずに変更したりするうえで重要です。
抽象的な YAML 構造:
exclusions:
{scanTypeName}:
{ignoringType}:
- someIgnoringValue1
- someIgnoringValue2
scanTypeName に指定できる値: iac, sca, sast, secret。
ignoringType に指定できる値: paths, values, rules, packages, shas, cves。
[!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
Report コマンド
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-file | Maven のみ。依存関係ツリーの構築時にカスタム settings.xml ファイルを使用できます。 |
Import コマンド
SBOM のインポート
ソフトウェア部品表(SBOM)は、アプリケーションの開発と提供に関わるすべての構成要素とソフトウェア依存関係の一覧です。 このコマンドを使用すると、ファイルシステムから Cycode に SBOM ファイルをインポートできます。
このコマンドでは、次のオプションを使用できます。
| オプション | 説明 | 必須 | デフォルト |
|---|---|---|---|
-n, --name TEXT | SBOM の表示名 | はい | |
-v, --vendor TEXT | SBOM を提供したエンティティの名前 | はい | |
-l, --label TEXT | SBOM にラベルを付ける | いいえ | |
-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 に記録されます。ログは Settings > CLI Logs で確認できます。
構文ヘルプ
--help 引数を任意のコマンドにいつでも追加すると、使用可能なオプションとその構文を表示するヘルプメッセージを確認できます。
一般的なヘルプを表示するには、次のコマンドを入力します。
cycode --help
スキャンのオプションを表示するには、次のように入力します。
cycode scan --help
特定の種類のスキャンで使用できるオプションを表示するには、次のように入力します。
cycode scan {{option}} --help
たとえば、Path Scan で使用できるオプションを表示するには、次のように入力します。
cycode scan path --help
ignore scan 機能で使用できるオプションを表示するには、次のコマンドを使用します。
cycode ignore --help
レポートで使用できるオプションを表示するには、次のコマンドを使用します。
cycode report --help
特定の種類のレポートで使用できるオプションを表示するには、次のように入力します。
cycode scan {{option}} --help