> ## Documentation Index
> Fetch the complete documentation index at: https://ccsafetynet.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# シークレット保護リファレンス

> CC Safety Net に組み込まれたシークレット保護ルールの完全な一覧。機密ベース名、保護対象のホームディレクトリ、キーファイルのバリエーション、資格情報の拡張子、2 つのコーディング CLI 階層、拒否パス、すべての除外を説明します。

シークレット保護は、SSH キー、`.env` ファイル、クラウド資格情報ストア、コーディングエージェントの認証トークンなど、資格情報を含む可能性があるファイルの読み書きをブロックします。コマンド解析の前に動作し、**すべて**の安全レベルに適用されます。構造解析の上限を超える入力は拒否します。

このページでは、すべての組み込みルール ID、一致する対象、既定の状態を示します。パスが保護されるか、どのルール ID が制御するかを調べるために使ってください。`secret_protection` スキーマについては、[ポリシー](/docs/ja/configuration/policy)を参照してください。ガードフローについては、[アーキテクチャ](/docs/ja/guides/architecture)を参照してください。コマンド例については、[ブロックされるコマンド](/docs/ja/reference/blocked-commands)を参照してください。

登録済みルールは **132 個**あります。大部分は同じ ID パターンを共有する生成ファミリーに属します。そのため、次の表では、すべての ID ではなく ID 形式を使ってファミリーを示します。10 ルールの[コーディング CLI 設定階層](#coding-cli-config-tier)を除くすべてのルールが、既定で on です。

## 動作する場所

機密パス保護は、コマンド解析の**前**に動作するガードステージです。サポート対象の **command**、**path**、**search**（grep/glob）、**patch** 形式で動作します。CC Safety Net が認識しないツールでは、コマンド候補の抽出結果とパスに見える値の両方を検査します。そのツールの任意のテキストをシェルコマンドとして扱うことはありません。

| 形式                      | 検査するもの                                                                                                                   |
| ----------------------- | ------------------------------------------------------------------------------------------------------------------------ |
| `command`               | 解析済みコマンドから抽出されたパスターゲット。セグメント、パイプ、リダイレクトターゲット、コマンド置換、`VAR=value` 代入値、代入を伴う展開（`${VAR:=path}`、`${VAR=path}`）のフォールバックテキストを含む |
| `path`                  | 抽出されたパスに見えるツール値（read、write、edit ツールの入力）                                                                                  |
| `search`（`grep`、`glob`） | パターンを指定するフラグと区別されたファイルオペランド                                                                                              |
| `patch`                 | 抽出されたパスに見えるツール値                                                                                                          |
| 不明なツール                  | コマンド候補の抽出結果**と**パス値の両方                                                                                                   |

一致すると intent `hard_stop` で拒否され、一致したルール ID が付きます。そのため、[ブロックメッセージ](/docs/ja/guides/how-it-works)と[監査ログ](/docs/ja/reference/audit-log)には、正確なルールが示されます。書き込みだけでなく、読み取りもブロックされます。`cat .env`、`strings id_rsa`、`dd if=.env` はすべてブロックされます。

フォールバックを代入する展開は、引用符がない場合も二重引用符の場合も、そのフォールバックをパスとして公開します。`cat "${X:=.env}"` と `cat ${X=.env}` は、どちらも `secret.basename.env` でブロックされます。単一引用符内のテキストは非アクティブなままなので、`cat '${X:=.env}'` はブロックされません。

## 一致順序

各候補パスには、次の検査が順に適用されます。最初の一致が優先されます。除外は、それより後にあるルールにのみ適用されます。

1. **設定済みの[拒否パス](/docs/ja/configuration/policy)** — すべての組み込みルールおよびすべての除外より前に検査します。一致すると `secret.deny-path` に帰属します。
2. **env テンプレートの除外** — テンプレートのベース名は読み取り可能なままです。[除外](#除外)を参照してください。
3. **[ホームディレクトリルール](#ホームディレクトリルール)** — `~/.ssh` など、保護対象のディレクトリ全体。公開鍵の除外より優先されるため、`~/.ssh/id_rsa.pub` もブロックされます。
4. **[コーディング CLI ルール](#coding-cli-credential-tier)** — エージェントごとの資格情報パスと設定パス。
5. **公開鍵の除外** — `id_rsa.pub`、`id_ed25519.pub`、`id_ecdsa.pub` は、保護対象ディレクトリの外ではシークレットではありません。
6. **[ベース名ルール](#ベース名ルール)**、次に **`.env.*` パターン**、次に **[キーバリエーションルール](#キーバリエーションルール)**。
7. **ベンダー管理ディレクトリの除外** — 残り 2 つのファミリーだけを抑制します。[除外](#除外)を参照してください。
8. **広範な SSH ベース名パターン**、次に **[拡張子ルール](#拡張子ルール)**。

## ベース名ルール

9 個のルールが、すべてのディレクトリで正確なベース名をブロックします。

| ルール ID                            | ベース名               |
| --------------------------------- | ------------------ |
| `secret.basename.env`             | `.env`             |
| `secret.basename.npmrc`           | `.npmrc`           |
| `secret.basename.pypirc`          | `.pypirc`          |
| `secret.basename.netrc`           | `.netrc`           |
| `secret.basename.git-credentials` | `.git-credentials` |
| `secret.basename.id-rsa`          | `id_rsa`           |
| `secret.basename.id-ed25519`      | `id_ed25519`       |
| `secret.basename.id-ecdsa`        | `id_ecdsa`         |
| `secret.basename.credentials`     | `credentials`      |

知っておく必要がある境界が 2 つあります。

* `secret.basename.credentials` は正確な名前 `credentials` だけに一致します。`credentials.json` は、このルールにもほかの組み込みルールにも一致しません。
* `id_dsa` のベース名ルールはありません。正確な `id_dsa` は、後述する広範なパターン `secret.pattern.ssh-key-basename` によって引き続きブロックされます。

1 つのパターンルールが `.env` ファミリーを拡張します。`secret.pattern.env-variant` は、[除外テンプレート](#除外)を除き、`.env.local`、`.env.production`、`.env.template.local` など、`.env.` で始まるすべてのベース名をブロックします。

## ホームディレクトリルール

これらのルールは、ホームディレクトリの下にある場所を保護します。ディレクトリ自体と、その内部すべてが対象です。

| ルール ID                      | 保護するもの                   |
| --------------------------- | ------------------------ |
| `secret.home.ssh`           | `~/.ssh`                 |
| `secret.home.aws`           | `~/.aws`                 |
| `secret.home.gcp`           | `~/.gcp`                 |
| `secret.home.gcloud-config` | `~/.config/gcloud`       |
| `secret.home.kube-config`   | `~/.kube/config`         |
| `secret.home.docker-config` | `~/.docker/config.json`  |
| `secret.home.gh-hosts`      | `~/.config/gh/hosts.yml` |

2 つの単一ファイルルール（`kube-config`、`docker-config`）には、それぞれ名前を変更したバックアップを対象にする 8 個の関連ルールがあります。ID 形式は `secret.home.<slug>.<suffix>` です。suffix は `bak`、`backup`、`copy`、`disabled`、`old`、`orig`、`save`、`tmp` です。そのため、`~/.kube/config.bak` は `secret.home.kube-config.bak` でブロックされ、`~/.docker/config.json.old` は `secret.home.docker-config.old` でブロックされます。生成ルールは 16 個で、ファミリー全体では 23 個です。

## キーバリエーションルール

名前を変更して保護を回避しようとするキーおよび資格情報ファイルのコピーには、独自のファミリーがあります。`id_rsa`、`id_dsa`、`id_ed25519`、`id_ecdsa`、`credentials` の 5 つの保護接頭辞から作られます。各 ID の slug は、接頭辞のアンダースコアをダッシュにしたものです（`id-rsa`、`credentials` など）。

* **区切り文字のバリエーション** — `secret.variant.<slug>.separator`（5 ルール）。接頭辞の後に `-` または `_` と任意の文字が続くものをブロックします。例は `id_rsa-old`、`id_rsa_backup`、`credentials_prod` です。
* **ドット suffix のバリエーション** — `secret.variant.<slug>.<suffix>`（50 ルール）。接頭辞の後に、`.bak`、`.backup`、`.copy`、`.disabled`、`.key`、`.old`、`.orig`、`.pem`、`.save`、`.tmp` の正確に 10 個の suffix のいずれかが続くものをブロックします。そのため、`id_rsa.bak` は `secret.variant.id-rsa.bak` でブロックされ、`credentials.pem` は `secret.variant.credentials.pem` でブロックされます。

このファミリーは意図的に正確です。そのため、似た名前は許可されます。`id_rsafoo` には区切り文字が一致せず、`credentials.json` はリスト外の suffix を使います。

1 つの広範なパターンがファミリーを完成させます。`secret.pattern.ssh-key-basename` は、`_rsa`、`_dsa`、`_ed25519`、`_ecdsa` で終わる、**拡張子がない**すべてのベース名をブロックします。例は `deploy_key_rsa` と `github_ed25519` です。ドットを含む名前は一致しません。

## 拡張子ルール

ID 形式 `secret.ext.<extension>` を持つ 21 個のルールは、次の拡張子を持つすべてのファイルをブロックします。

`.agilekeychain`, `.asc`, `.bek`, `.cscfg`, `.fve`, `.gnucash`, `.jks`, `.keychain`, `.kwallet`, `.mdf`, `.ovpn`, `.p12`, `.pcap`, `.pem`, `.pfx`, `.pkcs12`, `.psafe3`, `.rdp`, `.sdf`, `.tblk`, `.tpm`

3 個の**拡張子パターン**ルールが、拡張子ファミリーを対象にします。

| ルール ID                        | 拡張子                     |
| ----------------------------- | ----------------------- |
| `secret.ext-pattern.key`      | `.key`, `.keypair`      |
| `secret.ext-pattern.keystore` | `.keystore`, `.keyring` |
| `secret.ext-pattern.kdbx`     | `.kdb`, `.kdbx`         |

オーバーライドにはファミリー ID を使う必要があります。`secret.ext.keypair` ではなく `secret.ext-pattern.key` を使います。登録されていない ID は、`unknown secret protection rule id "<id>"` で拒否されます。

<span id="coding-cli-credential-tier" />

## コーディング CLI 資格情報階層（既定では on）

9 個のルールが、サポート対象のコーディングエージェントの資格情報ストアを保護します。ここまでのほかのすべてのルールと同様に、シークレット保護が有効なら on です。

| ルール ID                   | 保護するもの                                                                                                                                  |
| ------------------------ | --------------------------------------------------------------------------------------------------------------------------------------- |
| `secret.cli.claude-code` | `~/.claude/.credentials.json`                                                                                                           |
| `secret.cli.codex`       | `~/.codex/auth.json`, `~/.codex/.credentials.json`, `~/.codex/secrets`, `~/.codex/.sandbox-secrets`                                     |
| `secret.cli.gemini`      | `~/.gemini/oauth_creds.json`, `~/.gemini/mcp-oauth-tokens.json`, `~/.gemini/a2a-oauth-tokens.json`, `~/.gemini/gemini-credentials.json` |
| `secret.cli.copilot-cli` | `~/.copilot/config.json`, `~/.copilot/mcp-oauth-config`, `~/.copilot/mcp-secrets`                                                       |
| `secret.cli.kimi-code`   | `~/.kimi-code/server.token`, `~/.kimi-code/credentials`, `~/.kimi/credentials`, `~/.kimi/mcp-oauth`                                     |
| `secret.cli.opencode`    | `~/.local/share/opencode/auth.json`, `~/.local/share/opencode/mcp-auth.json`, `~/.local/share/opencode/opencode.db`                     |
| `secret.cli.pi`          | `~/.pi/agent/auth.json`                                                                                                                 |
| `secret.cli.amp`         | `~/.local/share/amp/secrets.json`, `~/.amp/oauth`                                                                                       |
| `secret.cli.cursor`      | `~/.cursor/auth.json`, `~/.config/cursor/auth.json`, `~/.cursor/projects/<name>/mcp-auth.json`                                          |

Antigravity に資格情報ルールはありません。唯一のルールは、次の設定階層にあります。

<span id="coding-cli-config-tier" />

## コーディング CLI 設定階層（既定では off）

10 個のルールが、同じエージェントの設定ファイルと MCP 設定ファイルを対象にします。これらのファイルには資格情報をインラインで含めることができますが、エージェントは通常の作業でも編集します。そのため、この階層は**off**で提供され、各ルールを有効にするには [`secret_protection.overrides`](/docs/ja/configuration/policy) で明示的に `"on"` を指定する必要があります。ルールを on にすると、`<project>` パスはすべてのリポジトリルートに一致します。

| ルール ID                          | 有効時に保護するもの                                                                                                                                                                                                           |
| ------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `secret.cli.claude-code.config` | `~/.claude/settings.json`, `~/.claude/settings.local.json`, `~/.claude.json`, `<project>/.claude/settings.local.json`, `<project>/.mcp.json`                                                                         |
| `secret.cli.codex.config`       | `~/.codex/config.toml`, `~/.codex/<name>.config.toml`                                                                                                                                                                |
| `secret.cli.gemini.config`      | `~/.gemini/settings.json`, `~/.gemini/google_accounts.json`, `<project>/.gemini/settings.json`, `/Library/Application Support/GeminiCli/settings.json`, `/etc/gemini-cli/settings.json`                              |
| `secret.cli.copilot-cli.config` | `~/.copilot/mcp-config.json`                                                                                                                                                                                         |
| `secret.cli.kimi-code.config`   | `~/.kimi-code/config.toml`, `~/.kimi-code/mcp.json`, `~/.kimi/config.toml`, `~/.kimi/config.json`, `~/.kimi/config.json.bak`, `~/.kimi/mcp.json`, `<project>/.kimi-code/mcp.json`                                    |
| `secret.cli.opencode.config`    | `~/.config/opencode/opencode.json`, `~/.config/opencode/opencode.jsonc`, `/Library/Application Support/opencode/opencode.json`, `/etc/opencode/opencode.json`, `<project>/opencode.json`, `<project>/opencode.jsonc` |
| `secret.cli.pi.config`          | `~/.pi/agent/models.json`                                                                                                                                                                                            |
| `secret.cli.amp.config`         | `~/.config/amp/settings.json`, `~/.config/amp/settings.jsonc`, `<project>/.amp/settings.json`, `<project>/.amp/settings.jsonc`                                                                                       |
| `secret.cli.cursor.config`      | `~/.cursor/mcp.json`, `<project>/.cursor/mcp.json`                                                                                                                                                                   |
| `secret.cli.antigravity`        | `~/.gemini/config/hooks.json`, `~/.gemini/config/mcp_config.json`                                                                                                                                                    |

## 拒否パス

[`secret_protection.deny_paths`](/docs/ja/configuration/policy) は、独自の保護対象場所を追加します。一致すると `secret.deny-path` に帰属する hard-stop になります。この ID は登録されていないため、オーバーライドで無効にできません。また、このページの除外は一切適用されません。拒否パスが適用されなくなるのは、`secret_protection.enabled` が `false` の場合だけです。この設定はステージ全体を無効にします。使用できるエントリ形式については、[ポリシー](/docs/ja/configuration/policy)を参照してください。

## 除外

3 つの除外が、上記ルールの境界を定めます。設定済みの拒否パスを緩和するものはありません。

* **env テンプレート。** 正確なベース名 `.env.example`、`.env.sample`、`.env.template`、`.env.defaults` と、`.env.example.` または `.env.sample.` で始まるすべての名前は、保護対象のホームディレクトリ内でも、すべての組み込みルールより前に除外されます。接頭辞形式はそれ以上拡張されません。`.env.template.local` は、ほかの `.env.*` 名と同様に `secret.pattern.env-variant` でブロックされます。
* **公開鍵。** `id_rsa.pub`、`id_ed25519.pub`、`id_ecdsa.pub` はシークレットではないため除外されます。ただし、先に検査される保護対象ホームディレクトリの外にある場合だけです。`./id_rsa.pub` は許可されます。`~/.ssh/id_rsa.pub` は `secret.home.ssh` でブロックされます。
* **ベンダー管理ディレクトリ。** パスセグメントが `node_modules` または `__pycache__` の場合、または隣接する組み合わせ `vendor/bundle` または `vendor/cache` がある場合、正確に 2 つのファミリーが抑制されます。拡張子ルール（単純形式とパターン形式）と、広範な `secret.pattern.ssh-key-basename` ルールです。それ以外のルールはすべて引き続き適用されます。`node_modules/x/.env` と `node_modules/x/id_rsa` は通常どおりブロックされます。`.git` は除外セットに含まれません。

## 設定

すべての設定は [`policy.json`](/docs/ja/configuration/policy) にあります。

* `secret_protection.enabled: false` は、組み込みルールと拒否パスを含むステージ全体を無効にします。
* `secret_protection.overrides` は、登録済み ID ごとにルールの状態を設定します。`"off"` は既定で on のルールを無効にし、`"on"` は設定階層のルールを有効にします。
* `secret_protection.deny_paths` は、独自の保護対象場所を追加します。

[許可パス](/docs/ja/guides/analysis-engine)も standard モードの許可も、シークレット保護を緩和しません。[strict モード](/docs/ja/configuration/modes)では、これらのパスに対するメタデータのみの検出（`test -f ~/.ssh/id_rsa`、`find ~/.ssh -type f`）もブロックされます。[ダッシュボード](/docs/ja/guides/dashboard)は、UI から同じ設定を編集します。

<Note>
  シークレット保護は範囲が限定されたパターンセットであり、一般的な読み取り境界ではありません。どのルールも認識しないファイル内の資格情報は保護されません。この境界については、[サンドボックスとの比較](/docs/ja/guides/vs-sandboxing)を参照してください。階層の注意点については、[既知の制限](/docs/ja/guides/known-limitations)を参照してください。ログとブロックメッセージから資格情報の値を取り除くシークレットの**編集**は別の仕組みです。[監査ログリファレンス](/docs/ja/reference/audit-log)と[セキュリティモデル](/docs/ja/guides/security-model)に説明があります。
</Note>
