# Secret Scanning

Secret Scanningは、シェル履歴ファイル（`.zsh_history`、`.bash_history`）、AIコーディングエージェントのセッション、認証情報ファイルなど、チームのデバイス上のローカルファイルに残されたハードコードされたシークレットを検出し、そのクリーンアップを支援します。`curl` コマンドや環境変数を貼り付けたことで、APIキーやトークンが誤ってシェル履歴に漏れてしまうことはよくあり、そうしたシークレットは何か月も残り続けることがあります。

スキャンはすべてデバイス上で実行されます。すべての検出結果が表示されるため、開発者は自分のマシン上で直接それらを確認し、修正できます。

ディスク全体をクロールするわけではありません。履歴ファイルや認証情報ファイルなど、シークレットが蓄積しやすい場所のみを確認します。完全なリストについては[スキャン対象](https://help.aikido.dev/docs/docs-ja/aikido-device-protection/using-aikido-endpoint/secret-scanning#what-gets-scanned)を参照してください。

{% hint style="info" %}
Secret ScanningはAikido Device Protectionの一部です。まだエージェントをデプロイしていない場合は、[Device Protectionのデプロイ](https://help.aikido.dev/docs/docs-ja/aikido-device-protection/deploying-aikido-endpoint)を参照してください。
{% endhint %}

## 仕組み

Secret Scanningは、シークレットの値がデバイス上に留まるように設計されています。

* **スキャンは完全にローカルで行われます。** エージェントはデバイス自体でファイルを読み取り、検査します。ファイルの内容がAikidoにアップロードされることはありません。
* **シークレットの値はデバイス上に留まります。** 検出されたシークレットの完全な値が送信されることはありません。デスクトップクライアントではマスクされた状態（例: `[AIK********...]`）で表示されるため、値を露出させることなく識別できます。
* **報告されるのはシークレットの種類と数文字のみです。** Aikidoが受け取るのは、検出されたシークレットの_種類_（例: 「認可トークン」）と、検出結果を識別するのに十分な値の数文字のみです。完全なシークレットが送信されることはありません。これにより、シークレットそのものを渡すことなく、どのような種類のシークレットが露出しているかを組織が把握できます。

```mermaid
flowchart LR
    A[Files on device<br/>e.g. .zsh_history] --> B[On-device scan]
    B --> C[Findings shown locally<br/>file, type, masked preview]
    B --> D[Secret type and a few<br/>characters reported to Aikido]

    classDef local fill:#d6f5d6,stroke:#27ae60;
    classDef cloud fill:#fff2cc,stroke:#e1a100;
    class C local;
    class D cloud;
```

## 検出されたシークレットの確認

デスクトップクライアントで **Secrets** タブを開くと、エージェントが検出したすべての項目を確認できます。このタブには、検出されたシークレットの総数が表示されます。

<figure><img src="https://help.aikido.dev/_assets/da17253229ed/device-protection-secrets.png" alt=".zsh_history内で検出されたシークレットをマスクされた値で一覧表示しているSecretsタブ"><figcaption></figcaption></figure>

各検出結果には以下が表示されます。

* **Type** - 検出された内容の説明。例: 「curlコマンドのヘッダーで指定された潜在的な認可トークンを検出しました。これにより、curlでアクセスされたリソースが侵害される可能性があります。」
* **Location** - シークレットが見つかったファイルと行。例: `/Users/samuel/.zsh_history:370`。同じ種類のシークレットが複数の場所に出現する場合は、まとめてグループ化されます（例: 「and 8 more」）。行を展開すると、すべての出現箇所を確認できます。
* **Value** - 検出されたシークレット。常にマスクされています。

## シークレットのクリーンアップ

シークレットは1つずつ、または一括で修正できます。

* **1つずつ** - 検出結果の **erase** アイコンをクリックして、個々のシークレットをクリーンアップします。
* **一括** - チェックボックスを使って複数の検出結果を選択するか、特定の種類のシークレットをすべて選択し、1回の操作でクリーンアップします。

クリーンアップを行うと、デバイス上のファイルからシークレットが削除されます。

クリーンアップは、書き換え可能なカテゴリであるシェル履歴とAIエージェントセッションでのみ利用できます。認証情報ファイル、クラウド認証情報、AIツール認証情報の検出結果は報告されますが変更されないため、認証情報をローテーションし、設定ファイルをご自身で更新して修正してください。これらの認証情報が再び平文で保存されないようにするには、[シークレットを安全に保存する](https://help.aikido.dev/docs/docs-ja/aikido-device-protection/using-aikido-endpoint/storing-secrets-safely)を参照してください。

{% hint style="warning" %}
シークレットをクリーンアップしても、ローカルファイルから削除されるだけです。シークレットがまだ有効な場合は、使用できなくなるよう、発行元でローテーションまたは失効させてください。
{% endhint %}

## スキャン対象

検出結果は5つのカテゴリに分類されます。シェル履歴とAIエージェントセッションは、その場でクリーンアップできます。3つの認証情報カテゴリは検出のみです。これらのファイルはツールが読み込む設定であるため、Aikidoは検出内容を報告しますが、書き換えることはありません。

| カテゴリ            | 対象範囲                                                   | クリーンアップ     |
| ------------------- | ---------------------------------------------------------------- | ----------- |
| シェル履歴       | シェルおよびREPLの履歴ファイル                                     | 書き換え可能  |
| AIエージェントセッション   | ローカルAIコーディングエージェントのセッショントランスクリプトとプロンプト履歴 | 書き換え可能  |
| 認証情報ファイル    | パッケージマネージャー、git、CI、データベースの認証情報ファイル          | 検出のみ |
| クラウド認証情報   | クラウドプロバイダーおよびインフラストラクチャツールの認証情報               | 検出のみ |
| AIツール認証情報 | AIツールおよびMCPクライアントの設定ファイルと認証情報ファイル          | 検出のみ |

以下のパスはすべて、ユーザーのホームディレクトリからの相対パスです

<details>

<summary>シェル履歴</summary>

すべてのプラットフォーム: `.zsh_history`, `.bash_history`, `.local/share/fish/fish_history`, `.ksh_history`, `.history`, `.sh_history`, `.python_history`, `.node_repl_history`, `.psql_history`, `.mysql_history`, `.irb_history`, `.rediscli_history`

macOSおよびLinux: `.zsh_sessions/*.history(new)`, `.bash_sessions/*.history(new)`, `.local/share/powershell/PSReadLine/*_history.txt`

Windows: `AppData/Roaming/Microsoft/Windows/PowerShell/PSReadLine/*_history.txt`, `AppData/Roaming/postgresql/psql_history`

これらの固定の場所に加えて、エージェントはユーザー自身が設定した履歴パスも追跡します。対象となるのは、`.zshenv`、`.zshrc`、`.zprofile`、`.zlogin`、`.bashrc`、`.bash_profile`、`.bash_login`、`.kshrc`、`.profile` で設定された `HISTFILE=`、およびPowerShellプロファイル（`Documents/(Windows)PowerShell/*.ps1`、それに相当するOneDrive内のファイル、`.config/powershell/*.ps1`）で設定された `-HistorySavePath` です。

</details>

<details>

<summary>AIエージェントセッション</summary>

`.claude/projects/*/*.jsonl`, `.claude/history.jsonl`, `.claude.json`, `.claude/paste-cache/*.txt`, `.codex/sessions/*/*/*/rollout-*.jsonl`, `.codex/history.jsonl`, `.gemini/tmp/*/chats/*`

</details>

<details>

<summary>認証情報ファイル</summary>

すべてのプラットフォーム: `.npmrc`, `.yarnrc.yml`, `.pypirc`, `.config/pip/pip.conf`, `.pip/pip.conf`, `.gem/credentials`, `.cargo/credentials(.toml)`, `.m2/settings.xml`, `.gradle/gradle.properties`, `.config/composer/auth.json`, `.composer/auth.json`, `.nuget/NuGet/NuGet.Config`, `.git-credentials`, `.config/git/credentials`, `.config/gh/hosts.yml`, `.config/glab-cli/config.yml`, `.netrc`, `.pgpass`, `.my.cnf`, `.circleci/cli.yml`, `.config/argocd/config`

Windows: `AppData/Roaming/pip/pip.ini`, `AppData/Roaming/Composer/auth.json`, `AppData/Roaming/NuGet/NuGet.Config`, `AppData/Roaming/GitHub CLI/hosts.yml`, `_netrc`, `AppData/Roaming/postgresql/pgpass.conf`

</details>

<details>

<summary>クラウド認証情報</summary>

すべてのプラットフォーム: `.aws/credentials`, `.aws/config`, `.config/gcloud/application_default_credentials.json`, `.azure/msal_token_cache.json`, `.azure/service_principal_entries.json`, `.kube/config`, `.docker/config.json`, `.vault-token`, `.terraform.d/credentials.tfrc.json`, `.config/doctl/config.yaml`, `.config/hcloud/cli.toml`, `.aliyun/config.json`, `.fly/config.yml`

macOSおよびLinux: `Library/Application Support/doctl/config.yaml`

Windows: `AppData/Roaming/gcloud/application_default_credentials.json`, `AppData/Roaming/terraform.d/credentials.tfrc.json`

</details>

<details>

<summary>AIツール認証情報</summary>

すべてのプラットフォーム: `.claude/settings.json`, `.claude/settings.local.json`, `.claude/.credentials.json`, `.codex/auth.json`, `.codex/config.toml`, `.gemini/settings.json`, `.gemini/oauth_creds.json`, `.cursor/mcp.json`, `.config/opencode/opencode.json`, `.local/share/opencode/auth.json`, `.codeium/windsurf/mcp_config.json`, `.config/github-copilot/apps.json`, `.config/github-copilot/hosts.json`

macOSおよびLinux: `Library/Application Support/Claude/claude_desktop_config.json`, `Library/Application Support/Code/User/mcp.json`, `.config/Code/User/mcp.json`

Windows: `AppData/Roaming/Claude/claude_desktop_config.json`, `AppData/Roaming/Code/User/mcp.json`

</details>
