AI 利用ガイドライン
AI コーディングツール利用時のセキュリティ方針と運用ルール
AI コーディングツールの利用時に機密情報を適切に管理するための方針をまとめています。
利用可能なツール
以下のツールの使用を承認しています。これ以外のツールを利用する場合は、事前に確認してください。
- Claude Code(Anthropic)
- Codex(OpenAI)
- GitHub Copilot(GitHub)
- Cursor
- Windsurf
- OpenCode
- Gemini Code Assist(Google)
基本方針
- 学習データへの利用をオフにする:各 AI サービスの設定で、入力内容を学習に使用しない設定を有効化します
- コンテキストに機密情報を含めない:パスワード・API キー・認証情報を AI への入力として渡しません
多層防御モデル
機密情報の漏洩を防ぐために、3 つの層で多段的に防御します。「気をつける」という人的対応に頼らず、各層が独立して機能することで、1 つの層が機能しない状況でも他の層が補完します。
| 層 | 役割 |
|---|---|
| 1. 入力層 | AI に機密情報を渡さない |
| 2. 保管層 | 暗号化・外部サービスで保管する |
| 3. コミット層 | Git hook で検出・ブロックする |
層 1:入力層
AI に機密情報を渡さないことが最も重要です。また、.claude/settings.json などチーム共有ファイルで .env 等へのアクセスを制限します。
{
"permissions": {
"deny": [
"Read(.env*)",
"Write(.env*)"
]
}
}
層 2:保管層
API キー等の機密情報は、ローカル環境でも平文で保存しません。推奨される保管先は以下のとおりです。
- GitHub Actions Secrets
- シークレット管理サービス(1Password CLI 等)
- ホスティングサービスの環境変数やシークレット管理
ローカルに置く場合は dotenvx などで暗号化します。
また、機密情報は .gitignore に記載し、リポジトリに含めません。
_credentials/
*.local.md
*.secret.md
credentials*.md
**/draft/
層 3:コミット層
コミット時に gitleaks でスキャンし、機密情報が含まれている場合はコミットを中断します。Git hook ツール(Lefthook、pre-commit 等)を使用します。
# lefthook.yml
pre-commit:
commands:
gitleaks:
run: gitleaks git --staged --redact --verbose
プロジェクト固有ルール(日本語フィールド名など)は .gitleaks.toml でカスタム追加してください。
フロントエンドでの API キー取り扱い
API キーをフロントエンドのコードに直接記述してはいけません。ブラウザ上のコード・ネットワークリクエスト・Source Map・ビルド成果物はすべて確認可能であり、実質的に公開と同じ状態になります。
// NG: フロントエンドに直書き
const apiKey = "sk-xxxxxxxx";
// OK: フロントエンドは自前バックエンドを呼ぶ
await fetch("/api/chat", { method: "POST", body: JSON.stringify({ message }) });
// バックエンドで環境変数を読む
const apiKey = process.env.OPENAI_API_KEY;
漏洩が発生した場合の対応
機密情報が漏洩した場合は、以下の手順で対応します。
- 該当の API キー・パスワードを必ずローテーションします(最優先)
git filter-repoで履歴から削除します
brew install git-filter-repo
# dry-run で確認
git filter-repo --dry-run --path <ファイルパス> --invert-paths
# 削除実行
git filter-repo --force --path <ファイルパス> --invert-paths
- リモートを再設定して force push します(
git filter-repo実行後はリモート登録が削除されます)
git remote add origin git@github.com:<user>/<repository>
git push --force origin main
- public リポジトリの場合は GitHub Support にキャッシュ削除を依頼します
履歴を消すのは「これ以上の露出を防ぐ」ためです。「無かったことにする」は不可能であるため、ローテーションを最優先で実施してください。