mcpField
S
secret-protection

secret-protection

github.com/itallstartedwithaideaセキュリティ4480 回インストール28 週間前に更新
リポジトリ

secret-protection について

開発時の認証情報漏えいを防ぐセキュリティスキルです。リポジトリのスキャン、コミット前チェック、CI/CD検査、実行時検出、シークレットのローテーションを扱います。

主な機能

  1. 01.envファイルとリポジトリのスキャン
  2. 02シークレットを含むコミットの阻止
  3. 03CI/CDでの変更検査
  4. 04実行時の漏えい検出とマスキング
  5. 05シークレットのローテーション方針

活用シーン

  1. 01新しいリポジトリへのシークレット検査導入
  2. 02既存リポジトリの認証情報監査
  3. 03CI/CDへのシークレット検査ゲート追加

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/itallstartedwithaidea/agent-skills --skill secret-protection

インストール後、Claude Code で/secret-protectionを入力して読み込まれたか確認します。

詳細

シークレット保護

googleadsagent.ai™ による Agent Skills™ の一部です

説明

シークレット保護は、.env のスキャン、コミット前フック、シークレットローテーションポリシー、実行時の検出を通じて、開発ライフサイクル全体での認証情報の漏えいを防ぎます。エージェントは、コード、設定、ログ、AI との会話履歴にシークレットを含めないゼロトレランスポリシーを適用し、バージョン管理、CI 成果物、本番環境のログに漏えいが及ぶ前に検出します。

ソースコード内のシークレットは、最新のアプリケーションにおけるセキュリティ侵害の最も一般的な原因です。API キーが一つコミットされただけでも、公開リポジトリにプッシュされてから数分以内に、クラウドアカウント全体が侵害されるおそれがあります。自動化されたボットは、公開された認証情報を求めて GitHub を常時スキャンしており、コミットから悪用までの平均時間は 15 分未満です。このスキルは、あらゆる段階でシークレットを検出することで、こうした事態を防ぎます。

保護は、コミット前(シークレットのリポジトリへの混入を防止)、CI/CD(コミット前のチェックをすり抜けたシークレットを検出)、実行時(ログ、エラーメッセージ、AI エージェントの出力に含まれるシークレットを検出して秘匿化)の 3 つの層で機能します。各層は独立しているため、1 つが機能しなくても、次の層が漏えいを検出します。スケジュールに基づいてシークレットのローテーションを適用することで、検出されなかった漏えいの影響範囲も限定できます。

使用する場面

  • 適切なシークレット管理を設定して、新しいリポジトリを作成するとき
  • 認証情報の漏えいを防ぐため、コミット前フックを追加するとき
  • 既存のリポジトリを監査し、コミット済みのシークレットを確認するとき
  • シークレットスキャンゲートを備えた CI/CD パイプラインを設定するとき
  • シークレットローテーションポリシーを実装するとき
  • エージェントの出力にシークレットが含まれるのを防ぐとき

仕組み

graph TD
    A[Developer / Agent Writes Code] --> B[Ring 1: Pre-Commit Hook]
    B --> C{Secrets Detected?}
    C -->|Yes| D[Block Commit + Alert]
    C -->|No| E[Allow Commit]
    E --> F[Ring 2: CI/CD Scan]
    F --> G{Secrets in Diff?}
    G -->|Yes| H[Fail Pipeline + Alert]
    G -->|No| I[Continue Pipeline]
    I --> J[Ring 3: Runtime Detection]
    J --> K[Redact Secrets in Logs]
    J --> L[Redact Secrets in Agent Output]
    K --> M[Production Safe]
    L --> M
    N[Rotation Schedule] --> O[Rotate Keys Monthly]
    O --> P[Update Secrets Manager]
    P --> Q[Deploy Updated References]

3 つの独立した層により、シークレットの漏えいが損害を引き起こすには、すべての層をすり抜ける必要があります。ローテーションスケジュールによって、検出されなかった漏えいの影響範囲が限定されます。

実装

# .pre-commit-config.yaml
repos:
  - repo: https://github.com/gitleaks/gitleaks
    rev: v8.18.0
    hooks:
      - id: gitleaks

  - repo: local
    hooks:
      - id: dotenv-check
        name: Check .env files not committed
        entry: bash -c 'git diff --cached --name-only | grep -E "\.env($|\.)" && exit 1 || exit 0'
        language: system
        pass_filenames: false
import re
from dataclasses import dataclass

@dataclass
class SecretPattern:
    name: str
    pattern: str
    severity: str

SECRET_PATTERNS = [
    SecretPattern("AWS Access Key", r"AKIA[0-9A-Z]{16}", "CRITICAL"),
    SecretPattern("AWS Secret Key", r"(?i)aws_secret_access_key\s*=\s*[A-Za-z0-9/+=]{40}", "CRITICAL"),
    SecretPattern("GitHub Token", r"gh[ps]_[A-Za-z0-9_]{36,}", "CRITICAL"),
    SecretPattern("Generic API Key", r"(?i)(api[_-]?key|apikey)\s*[:=]\s*['\"][A-Za-z0-9]{20,}['\"]", "HIGH"),
    SecretPattern("Private Key", r"-----BEGIN (?:RSA |EC |DSA )?PRIVATE KEY-----", "CRITICAL"),
    SecretPattern("Cloudflare Token", r"(?i)cloudflare.*(?:token|key)\s*[:=]\s*['\"][A-Za-z0-9_-]{40,}['\"]", "CRITICAL"),
    SecretPattern("JWT Token", r"eyJ[A-Za-z0-9_-]{10,}\.eyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}", "HIGH"),
    SecretPattern("Database URL", r"(?:postgres|mysql|mongodb)://\w+:[^@\s]+@", "CRITICAL"),
]

class SecretScanner:
    def __init__(self, patterns: list[SecretPattern] = SECRET_PATTERNS):
        self.patterns = [(p, re.compile(p.pattern)) for p in patterns]

    def scan_text(self, text: str, source: str = "unknown") -> list[dict]:
        findings = []
        for pattern, compiled in self.patterns:
            for match in compiled.finditer(text):
                findings.append({
                    "type": pattern.name,
                    "severity": pattern.severity,
                    "source": source,
                    "position": match.start(),
                    "preview": self._redact(match.group(), keep_chars=4),
                })
        return findings

    def redact_output(self, text: str) -> str:
        """Redact any detected secrets from agent output."""
        for pattern, compiled in self.patterns:
            text = compiled.sub(f"[REDACTED:{pattern.name}]", text)
        return text

    @staticmethod
    def _redact(secret: str, keep_chars: int = 4) -> str:
        if len(secret) <= keep_chars * 2:
            return "*" * len(secret)
        return secret[:keep_chars] + "*" * (len(secret) - keep_chars * 2) + secret[-keep_chars:]

class SecretRotationPolicy:
    ROTATION_SCHEDULES = {
        "CRITICAL": 30,
        "HIGH": 90,
        "MEDIUM": 180,
    }

    def check_rotation_due(self, secret_metadata: dict) -> bool:
        from datetime import datetime, timedelta
        last_rotated = datetime.fromisoformat(secret_metadata["last_rotated"])
        max_age = self.ROTATION_SCHEDULES[secret_metadata["severity"]]
        return datetime.now() - last_rotated > timedelta(days=max_age)

ベストプラクティス

  • 新しいリポジトリでは、最初にコミット前フックをインストールします
  • シークレットの検出結果を決して無視せず、修正するか、誤検知であることを示します
  • シークレットは専用のシークレットマネージャー(Wrangler secrets、Vault、AWS Secrets Manager)に保存します
  • CRITICAL なシークレット(クラウド認証情報、API キー)は 30 日ごとにローテーションします
  • すべてのログ出力、エラーメッセージ、エージェントとの会話履歴からシークレットを秘匿化します
  • git の履歴(gitleaks detect)を定期的にスキャンします。コミット後に削除したシークレットも履歴に残ります

プラットフォームの互換性

プラットフォームサポート備考
CursorFullコミット前フック+スキャン
VS CodeFullgitleaks 拡張機能
WindsurfFullシークレット検出
Claude CodeFullコミット前の統合
ClineFullセキュリティスキャン
aiderFullコミット前フックのサポート

関連スキル

  • エージェントのセキュリティスキャン - 3 層スキャンパイプラインでのシークレット検出を含む、より広範なセキュリティ分析
  • サンドボックスの強化 - ファイルシステムのスコープ設定と権限境界によって、エージェントのシークレットへのアクセスを制限する実行分離
  • CodeQL と Semgrep - コード内のハードコードされた認証情報や安全でないシークレット処理パターンを検出する静的解析ルール

キーワード

secret-protection credential-leak pre-commit gitleaks secret-rotation redaction .env-scanning api-key-security


© 2026 googleadsagent.ai™ | Agent Skills™ | MIT License

コメント