.env ファイル、クラウド資格情報ストア、コーディングエージェントの認証トークンなど、資格情報を含む可能性があるファイルの読み書きをブロックします。コマンド解析の前に動作し、すべての安全レベルに適用されます。構造解析の上限を超える入力は拒否します。
このページでは、すべての組み込みルール ID、一致する対象、既定の状態を示します。パスが保護されるか、どのルール ID が制御するかを調べるために使ってください。secret_protection スキーマについては、ポリシーを参照してください。ガードフローについては、アーキテクチャを参照してください。コマンド例については、ブロックされるコマンドを参照してください。
登録済みルールは 132 個あります。大部分は同じ ID パターンを共有する生成ファミリーに属します。そのため、次の表では、すべての ID ではなく ID 形式を使ってファミリーを示します。10 ルールのコーディング CLI 設定階層を除くすべてのルールが、既定で on です。
動作する場所
機密パス保護は、コマンド解析の前に動作するガードステージです。サポート対象の command、path、search(grep/glob)、patch 形式で動作します。CC Safety Net が認識しないツールでは、コマンド候補の抽出結果とパスに見える値の両方を検査します。そのツールの任意のテキストをシェルコマンドとして扱うことはありません。
一致すると intent
hard_stop で拒否され、一致したルール ID が付きます。そのため、ブロックメッセージと監査ログには、正確なルールが示されます。書き込みだけでなく、読み取りもブロックされます。cat .env、strings id_rsa、dd if=.env はすべてブロックされます。
フォールバックを代入する展開は、引用符がない場合も二重引用符の場合も、そのフォールバックをパスとして公開します。cat "${X:=.env}" と cat ${X=.env} は、どちらも secret.basename.env でブロックされます。単一引用符内のテキストは非アクティブなままなので、cat '${X:=.env}' はブロックされません。
一致順序
各候補パスには、次の検査が順に適用されます。最初の一致が優先されます。除外は、それより後にあるルールにのみ適用されます。- 設定済みの拒否パス — すべての組み込みルールおよびすべての除外より前に検査します。一致すると
secret.deny-pathに帰属します。 - env テンプレートの除外 — テンプレートのベース名は読み取り可能なままです。除外を参照してください。
- ホームディレクトリルール —
~/.sshなど、保護対象のディレクトリ全体。公開鍵の除外より優先されるため、~/.ssh/id_rsa.pubもブロックされます。 - コーディング CLI ルール — エージェントごとの資格情報パスと設定パス。
- 公開鍵の除外 —
id_rsa.pub、id_ed25519.pub、id_ecdsa.pubは、保護対象ディレクトリの外ではシークレットではありません。 - ベース名ルール、次に
.env.*パターン、次に キーバリエーションルール。 - ベンダー管理ディレクトリの除外 — 残り 2 つのファミリーだけを抑制します。除外を参照してください。
- 広範な SSH ベース名パターン、次に 拡張子ルール。
ベース名ルール
9 個のルールが、すべてのディレクトリで正確なベース名をブロックします。
知っておく必要がある境界が 2 つあります。
secret.basename.credentialsは正確な名前credentialsだけに一致します。credentials.jsonは、このルールにもほかの組み込みルールにも一致しません。id_dsaのベース名ルールはありません。正確なid_dsaは、後述する広範なパターンsecret.pattern.ssh-key-basenameによって引き続きブロックされます。
.env ファミリーを拡張します。secret.pattern.env-variant は、除外テンプレートを除き、.env.local、.env.production、.env.template.local など、.env. で始まるすべてのベース名をブロックします。
ホームディレクトリルール
これらのルールは、ホームディレクトリの下にある場所を保護します。ディレクトリ自体と、その内部すべてが対象です。
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.keypair ではなく secret.ext-pattern.key を使います。登録されていない ID は、unknown secret protection rule id "<id>" で拒否されます。
コーディング CLI 資格情報階層(既定では on)
9 個のルールが、サポート対象のコーディングエージェントの資格情報ストアを保護します。ここまでのほかのすべてのルールと同様に、シークレット保護が有効なら on です。
Antigravity に資格情報ルールはありません。唯一のルールは、次の設定階層にあります。
コーディング CLI 設定階層(既定では off)
10 個のルールが、同じエージェントの設定ファイルと MCP 設定ファイルを対象にします。これらのファイルには資格情報をインラインで含めることができますが、エージェントは通常の作業でも編集します。そのため、この階層はoffで提供され、各ルールを有効にするにはsecret_protection.overrides で明示的に "on" を指定する必要があります。ルールを on にすると、<project> パスはすべてのリポジトリルートに一致します。
拒否パス
secret_protection.deny_paths は、独自の保護対象場所を追加します。一致すると secret.deny-path に帰属する hard-stop になります。この ID は登録されていないため、オーバーライドで無効にできません。また、このページの除外は一切適用されません。拒否パスが適用されなくなるのは、secret_protection.enabled が false の場合だけです。この設定はステージ全体を無効にします。使用できるエントリ形式については、ポリシーを参照してください。
除外
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 にあります。
secret_protection.enabled: falseは、組み込みルールと拒否パスを含むステージ全体を無効にします。secret_protection.overridesは、登録済み ID ごとにルールの状態を設定します。"off"は既定で on のルールを無効にし、"on"は設定階層のルールを有効にします。secret_protection.deny_pathsは、独自の保護対象場所を追加します。
test -f ~/.ssh/id_rsa、find ~/.ssh -type f)もブロックされます。ダッシュボードは、UI から同じ設定を編集します。
シークレット保護は範囲が限定されたパターンセットであり、一般的な読み取り境界ではありません。どのルールも認識しないファイル内の資格情報は保護されません。この境界については、サンドボックスとの比較を参照してください。階層の注意点については、既知の制限を参照してください。ログとブロックメッセージから資格情報の値を取り除くシークレットの編集は別の仕組みです。監査ログリファレンスとセキュリティモデルに説明があります。