機密情報の保護
AI コーディングツールの利用時に、入力・保管・コミットの 3 層で機密情報の漏洩を防ぐ多層防御
パスワード・API キー・認証情報などの機密情報は、AI への入力として渡しません。 そのうえで、渡してしまった場合やファイル経由で読み取られた場合に備えて、次の多層防御で漏洩を防ぎます。
.env ファイルや GitHub の Secrets の扱いは、GitHub 権限・セキュリティを参照してください。
多層防御モデル
機密情報の漏洩を、入力・保管・コミットの 3 か所で防ぎます。どこか 1 か所で漏れても、次の層で止められるようにします。
| 層 | 役割 |
|---|---|
| 1. 入力層 | AI ツールが機密情報を含むファイルを読めないようにする |
| 2. 保管層 | 本番用の機密情報をローカルに置かない |
| 3. コミット層 | Git hook で検出してコミットを止める |
入力層
チーム共有の設定ファイルで、AI ツールが .env などを読み取れないようにします。
{
"permissions": {
"deny": [
"Read(.env*)",
"Edit(.env*)"
]
}
}
ほかのツールにも、同様の設定があります。いずれも完全な保護ではないため、保管層・コミット層と組み合わせて使います。
| ツール | 設定 | 制約 |
|---|---|---|
| Cursor | .cursorignore |
Agent が使うターミナルや MCP サーバーからのアクセスは防げない |
| GitHub Copilot | Content exclusion(リポジトリ・Organization の設定) | Copilot Business / Enterprise のみ。VS Code の Copilot Chat の Edit・Agent モードには適用されない |
保管層
本番用の API キーやパスワードは、ローカル環境に置きません。次のいずれかで保管します。
- GitHub Actions の Secrets
- シークレット管理サービス(1Password CLI など)
- ホスティングサービスの環境変数やシークレット管理
ローカルの .env には開発用の値だけを置きます。必要に応じて dotenvx などで暗号化します。
AI との作業で作ったメモや下書きに機密情報が含まれる場合があります。専用のファイル名・ディレクトリを決めて .gitignore に追加し、リポジトリに含めないようにします。
_credentials/
_drafts/
*.local.md
*.secret.md
コミット層
コミット時に gitleaks でスキャンし、機密情報が含まれている場合はコミットを中断します。 Git hook ツール(Lefthook、pre-commit など)から実行します。
gitleaks 本体は hook ツールに含まれないため、各メンバーの環境にインストールしておきます。
brew install gitleaks
pre-commit:
commands:
gitleaks:
run: gitleaks git --staged --redact --verbose
プロジェクト固有の機密情報の形式(独自の API キーの接頭辞など)は、.gitleaks.toml にルールを追加して検出します。
機密情報の漏洩時の対応
機密情報が漏洩した場合は、該当の API キー・パスワードを最優先でローテーションしたうえで、GitHub 権限・セキュリティの手順に従って対応してください。