1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Claude Code】APIキー・機密情報の漏洩を防ぐ!実践セキュリティガイド

1
Posted at

はじめに

Claude Code は強力な AI コーディングツールですが、使い方を間違えると API キーや機密情報が漏洩するリスク があります。

「気づいたら .env ファイルが GitHub に push されていた」「API キーがコード内にハードコードされていた」——こうした事故は、初心者に限らず起こり得ます。

この記事では、Claude Code を使う上で API キーや機密情報を守るための具体的な対策 を解説します。

対象読者

  • Claude Code を使い始めた方
  • API キーの管理に不安がある方
  • チームで Claude Code を使おうとしている方

1. APIキーはどこに保存されるのか

Claude Code 自体の API キー

Claude Code の API キーは macOS Keychain に暗号化して保存 されます。プレーンテキストのファイルには保存されません。

# ログインすると API キーは Keychain に安全に保存される
claude login

つまり、Claude Code 自体の認証情報は、OS レベルで保護されています。

プロジェクトで使う API キー(外部サービス)

問題になりやすいのは、プロジェクト内で使う外部サービスの API キーです。

# こんなファイルに API キーを書いていませんか?
.env
config.json
application.properties
docker-compose.yml

これらのファイルを Claude Code が読み取り、生成したコードに API キーが含まれてしまうケースがあります。

2. やってはいけないこと

NG1:API キーをソースコードにハードコード

// ❌ 絶対にやってはいけない
String apiKey = "sk-ant-api03-xxxxxxxxxxxx";

Claude Code にコードを生成させる際、プロンプトに API キーを含めると、そのまま出力に反映される場合があります。

NG2:.env ファイルを Git で管理

# ❌ .env ファイルがコミットされている
git add .env
git commit -m "設定ファイル追加"
git push origin main  # API キーが全世界に公開される

NG3:Claude Code に .env ファイルを読ませる

Claude Code は指示されればファイルを読み取ります。.env ファイルを読ませると、その内容がコンテキストに含まれます。

# ❌ こういう指示は避ける
「.env ファイルを読んで、環境変数を使ったコードを書いて」

3. API キーを安全に管理する方法

方法1:.gitignore に必ず追加

プロジェクトを作成したら、最初に .gitignore を設定します。

# 環境変数ファイル
.env
.env.local
.env.development
.env.production
.env.*

# IDE の設定ファイル
.idea/
.vscode/

# 認証情報
credentials.json
serviceAccountKey.json
*.pem
*.key

方法2:環境変数を使う

API キーはファイルではなく 環境変数 として設定します。

# ターミナルで設定(セッション中のみ有効)
export DATABASE_URL="jdbc:postgresql://localhost:5432/mydb"
export API_SECRET="your-secret-key"

コード側では環境変数から読み取ります。

// ✅ 環境変数から取得
String apiKey = System.getenv("API_SECRET");

方法3:.env.example をテンプレートとして用意

実際の値を含まないテンプレートファイルを Git で管理します。

# .env.example(これは Git で管理してOK)
DATABASE_URL=jdbc:postgresql://localhost:5432/mydb
API_SECRET=ここに実際のキーを設定
SMTP_PASSWORD=ここに実際のパスワードを設定
# .env(これは Git で管理しない)
DATABASE_URL=jdbc:postgresql://localhost:5432/mydb
API_SECRET=sk-ant-api03-xxxxxxxxxxxx
SMTP_PASSWORD=actualpassword123

方法4:Claude Code の権限設定で .env を保護

.claude/settings.json.env ファイルへのアクセスを制限できます。

{
  "permissions": {
    "deny": [
      "Read(.env)",
      "Read(.env.*)"
    ]
  }
}

この設定により、Claude Code が .env ファイルを読み取ることを防げます。

4. Git で機密情報を漏洩させないための対策

対策1:コミット前の確認

# コミット前に差分を確認する習慣をつける
git diff --cached

API キーやパスワードらしき文字列がないか、目視で確認します。

対策2:git-secrets を導入する

AWS が提供する git-secrets を使うと、コミット時に機密情報を自動検出できます。

# インストール(macOS)
brew install git-secrets

# リポジトリに設定
cd your-project
git secrets --install
git secrets --register-aws

# カスタムパターンを追加
git secrets --add 'sk-ant-[a-zA-Z0-9]+'      # Anthropic API キー
git secrets --add 'ghp_[a-zA-Z0-9]+'          # GitHub トークン
git secrets --add 'password\s*=\s*.+'         # パスワードっぽい文字列

設定後、機密情報を含むコミットは自動的にブロックされます。

対策3:Claude Code の Hooks で保護する

Claude Code の Hooks 機能を使えば、コミット対象に機密情報が含まれていないか自動チェックできます。

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "cat | jq -r '.tool_input.command' | grep -qE 'git (add|commit).*\\.env' && echo '.env ファイルのコミットはブロックされました' >&2 && exit 2 || exit 0"
          }
        ]
      }
    ]
  }
}

対策4:もし漏洩してしまったら

万が一 API キーが Git にコミットされた場合:

  1. 即座に API キーを無効化する(各サービスの管理画面から)
  2. 新しい API キーを発行する
  3. Git の履歴からも削除するgit filter-branchBFG Repo-Cleaner を使用)
# BFG Repo-Cleaner で履歴から機密情報を削除
bfg --replace-text passwords.txt your-repo.git

重要なのは、コミットを取り消すだけでは不十分 ということです。Git の履歴に残り続けるため、履歴ごと削除する必要があります。

5. Claude Code に機密情報を渡さない工夫

CLAUDE.md に指示を書く

プロジェクトの CLAUDE.md に、機密情報の取り扱いルールを記載しておきます。

# セキュリティルール
- .env ファイルを読み取らないこと
- API キーやパスワードをコード内にハードコードしないこと
- 認証情報は必ず環境変数から取得するコードを書くこと
- コミット時に .env や credentials を含めないこと

ただし、CLAUDE.md は指示であり強制力はありません。必ず 権限設定(settings.json) と併用しましょう。

CLAUDE.md 自体に機密情報を書かない

CLAUDE.md はプロジェクトのルートに置くファイルです。Git で管理されるため、ここにも API キーを書いてはいけません。

# ❌ CLAUDE.md に書いてはいけない
データベースのパスワードは「mypassword123」です

# ✅ こう書く
データベースの接続情報は環境変数 DATABASE_URL から取得してください

6. チェックリスト

プロジェクトを始めるとき、以下を確認しましょう。

  • .gitignore.env や認証ファイルを追加した
  • API キーはソースコードにハードコードしていない
  • .env.example(テンプレート)を用意した
  • Claude Code の権限設定で .env の読み取りを制限した
  • git-secrets または同等のツールを導入した
  • CLAUDE.md にセキュリティルールを記載した
  • チームメンバーにルールを共有した

まとめ

対策 方法
API キーの保存 環境変数を使う。ファイルに直接書かない
Git での保護 .gitignoregit-secrets で二重防御
Claude Code の制限 settings.json.env の読み取りを拒否
自動チェック Hooks で機密ファイルのコミットをブロック
漏洩時の対応 即座にキーを無効化 → 履歴からも削除

API キーの漏洩は、不正利用による高額請求データ流出に直結します。「まだ個人開発だから大丈夫」と思わず、最初から安全な習慣を身につけましょう。


@kotaro_ai_lab

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?