BlueAI株式会社BlueAI
カリキュラム/第10章: 組織導入/10-3 Claude Code セキュリティ|組織導入の安全設計

10-3 Claude Code セキュリティ|組織導入の安全設計

無料

Claude Code を組織で安全に運用する技術設計。データ送信先、permissions 制御、機密情報の除外、MCP の権限、監査ログ、SaaS / オンプレ / Bedrock 選定まで、情シス目線で実装解説します。

10章: 組織導入60分
酒井歩乃加
監修: 酒井歩乃加

フリーランス編集者・ライター / 元マイベスト編集ディレクター

平原尚樹
監修: 平原尚樹

株式会社BlueAI 代表取締役CEO / ソフトウェアエンジニア

このレッスンで身につくこと

このレッスンは、レッスン 10-1(組織導入の戦略)と 10-2(Cowork による並行実行)で描いた絵を、実装レイヤーまで落とし込む ためのものです。10-1 は「何を決めるか」、本レッスンは「どう設定するか・どう監査するか」に焦点を当てます。

ポイント

このレッスンのゴール

  • Claude Code 利用時に 何が・どこに・どんな経路で送信されているか を説明できる
  • .claudeignore / .gitignore / permissions の役割の違いを明確に切り分け、自社用テンプレを作れる
  • allow / ask / deny の 3 段階を 組織標準 として設計できる
  • API キーを 環境変数 / Secret Manager / ローテーション の 3 層で管理できる
  • MCP サーバーを 信頼できる発行元かどうか で評価し、危険なものを弾ける
  • 監査ログを 誰が・いつ・何のコマンドを実行したか の粒度で残せる
  • SaaS / Bedrock / Vertex AI の 3 つから 自社のリスクプロファイルに合うもの を選べる
  • 10 項目の監査チェックリストを使って、自社の運用に欠けている穴を発見できる

所要時間 — 約 60 分(手を動かしながらだと 90 分) 難易度 — ★★★★☆(情シス・SRE・セキュリティ担当向けの技術設計) 想定読者 — 情シス / SRE / セキュリティ責任者 / テックリード / EM / CTO


はじめに — 「便利な道具」は「危険な道具」と紙一重

Claude Code は、ローカルファイルを読み、シェルコマンドを実行し、外部サービスと通信できるエージェント です。これだけで、ChatGPT に 200 行貼るのとは まったく別のリスクプロファイル を持っています。rm -rf / を承認したらファイルは戻りません。.env を読み込ませれば本番 DB の接続文字列が Anthropic を通過します。「気をつける」 では絶対に止められない事故が、組織導入のスケールでは必ず起こります。本レッスンの目的は、それを 仕組みで止める ことです。

気づき

セキュリティ設計の鉄則は「人間の善意を信用しない」

「あの人なら大丈夫」と言った瞬間に設計は壊れています。人間は必ずミスをします。優秀な人ほどスピード重視で雑にコピペします。100 人の組織で 1 年運用すれば、平均で月 1 回は誰かがやらかします。事故が起こる前提で、事故っても被害が止まる構造 を作るのが組織セキュリティ設計の本体です。


リスクモデル — 何が漏れる可能性があるか

設計に入る前に、何が漏れたら困るのか を解像度高く整理します。漏洩のシナリオは、大きく 5 つに分類できます。

リスク 1 — ソースコードの流出

Claude Code は、明示的に指示しなくても 関連ファイルを自動で読み込み、推論時に Anthropic API へ送ります。設計上、不可避な動作です。どこまでのコードを送ってよいか を組織として決めていないと事故ります。公開 / 社内限り / 秘匿 の 3 階層で判定し、秘匿コードは ==.claudeignore でブロックする以前に、リポジトリを分けて物理的に隔離== します。

リスク 2 — 認証情報の流出

.envcredentials.json*.pem、SSH 鍵、API トークン、DB 接続文字列 — これらは 流出した瞬間に被害が確定 します。Claude が誤って生成コードに貼り付けたり、/compact の要約として表に出たりするルートを、設定で塞ぎます。

リスク 3 — 顧客個人情報(PII)の流出

顧客の氏名、住所、購買履歴を Claude Code に直接渡す行為は、個人情報保護法上の 「委託」 に該当する可能性が高く、委託先管理義務 の対象になります。Anthropic は SOC 2 Type II / ISO 27001 取得済みですが、自社 DPA レビューと顧客通知の 2 点は法務確認必須です。

リスク 4 — 危険なコマンドの実行

rm -rfgit push --forcedrop tableterraform destroy — 承認なしに実行できる状態は 運用継続性への直接の脅威bypassPermissions を全員に推奨すると、事故 1 回で会社が止まります。

リスク 5 — 不正な MCP サーバーからの情報吸い取り

サードパーティ製 MCP は Claude のコンテキスト全体を読める 構造です。悪意のある / 雑な MCP を入れると、プロジェクトの内容が知らないサーバーに垂れ流される可能性があります。

リスク何が漏れる影響範囲検知難度
ソースコード流出プロダクトの IP、ノウハウ競争優位の喪失高(気づきにくい)
認証情報流出API キー、DB 接続情報システム侵入、データ漏洩中(請求書で発覚)
個人情報流出顧客 PII法的責任、行政処分高(外部からの指摘で発覚)
危険コマンド本番 DB、本番デプロイサービス停止低(即座に発覚)
不正 MCPコンテキスト全体不明(攻撃者次第)極高(事実上不可能)
ポイント

「検知難度が高い」リスクほど、事前防御が決定的に重要 です。事故が起きた後に検知できる種類のものは、まだマシです。検知できないものは、半年後 / 1 年後に顧客からの問い合わせで初めて発覚し、その時点では既に被害が広がっています。


データの送信先 — Anthropic API、リクエスト/レスポンスのフロー

「Claude Code は、何を、どこに送っているのか」 — この問いに、4 行で 答えられないままセキュリティ設計を進めるのは無理があります。ここでフローを正確に押さえます。

標準フロー(Anthropic API 直叩き)

Claude Code が 1 回の指示を処理する間に、次の通信が走ります。

[ローカル]
  ユーザー入力 + ファイル読込結果 (Read/Glob/Grep)
  + CLAUDE.md + settings.json + 過去の会話履歴
        │  HTTPS (TLS 1.3)
        ▼
[Anthropic API] api.anthropic.com → モデル推論
        │  HTTPS (TLS 1.3)
        ▼
[ローカル] Claude の応答 + ツール実行 (Write/Edit/Bash)

重要なポイントは 4 つ①コードの中身が API リクエストに含まれるRead した瞬間に乗る)/ ②過去の会話履歴も毎ターン再送(API はステートレス)/ ③通信は TLS 1.3 で暗号化(経路盗聴リスクはゼロ)/ ④Anthropic 側のログ保持 は Standard で 30 日、Zero Data Retention(ZDR)契約で即時破棄。

Anthropic 側のデータ取扱い

Anthropic は 顧客 API のデータをモデル訓練に使用しません(2026 年時点の公式ポリシー、Claude.ai Consumer とは別扱い)。とはいえ ログとして 30 日間保持 がデフォルトのため、その期間「Anthropic 内に自社コードのスニペットが存在する」状態を許容できるかを、自社ポリシーで判断します。

プラン / 契約訓練利用ログ保持監査ログ
個人 API (Pro/Max)不使用30 日限定的
個人 API + ZDR不使用即時破棄限定的
Enterprise (Anthropic)不使用契約により可変フル
Bedrock 経由不使用AWS 側で完結CloudTrail
Vertex AI 経由不使用GCP 側で完結Cloud Audit Logs

「送信しない」を選ぶ仕組み

==.claudeignore でブロックされたファイルは、そもそも読み込まれません==。読まなければ API リクエストにも乗りません。これが最も確実な「送らない」の作り方です。CLAUDE.md に「秘匿ファイルは触らないで」と書くのは指示として効くだけで、誤読の可能性はゼロにできません。「指示で禁止」ではなく「設定でブロック」 を原則にします。

気づき

「送らない」を確実にするには、ファイルシステムのレベルで隔離するしかない

.env を読み込んだ瞬間、その値は Anthropic API に流れます。コンテキスト圧縮で要約されようと、削除されようと、過去のリクエストには既にプレーンテキストで載っている ことに変わりはありません。「後から消す」設計は無理です。「最初から渡さない」設計だけが、確実に機能します。


機密情報の除外 — .claudeignore / .gitignore / permissions

3 つのファイル / 仕組みが、似ているようでまったく違う役割を果たしています。混同すると確実に事故ります

3 つの違いを 1 表で整理

項目.gitignore.claudeignorepermissions
役割Git 管理から除外Claude の読込から除外ツール実行の許可制御
効く対象git addRead / Glob / GrepBash / Write / Edit
何を止めるコミット流出API リクエスト混入危険な実行

==.gitignore に書いてあっても Claude は読みます。3 つを 同時に揃える== のが基本構成です。

.claudeignore の標準テンプレート

組織共通テンプレートとして、次の内容を 全リポジトリのスキャフォルディング に入れます。

# === シークレット ===
.env
.env.*
credentials.json
service-account*.json
*.pem
*.key
*.crt
.aws/
.gcp/
.azure/
.ssh/
.secrets/
vault/

# === ローカル DB ===
*.sqlite
*.db
dumps/
backups/

# === 内部限定ドキュメント ===
docs/internal/
docs/m-and-a/
docs/legal/

組織で扱うデータの種類に応じて、医療データ、PCI-DSS 対象データ、輸出規制対象コード のディレクトリも追加します。.claudeignore肥大化しても問題ない ので、迷ったら入れておきます。

.gitignore との二重化が必須

==.env.gitignore だけに入れ、.claudeignore に忘れる== のが最多ミス。「Git にはコミットされないが、Claude には読まれて Anthropic に送られる」状態になります。両方に必ず入れる運用をテンプレで担保します。

# 新規リポジトリ作成時のスキャフォルディング
cp ~/templates/.gitignore .gitignore
cp ~/templates/.claudeignore .claudeignore
cp -r ~/templates/.claude .claude
git add .gitignore .claudeignore .claude
git commit -m "chore: add security baseline"

permissions による書き込み / 実行制御

読むのを止める のが .claudeignore書く / 実行するのを止める のが permissions です。.claude/settings.json の deny は ツール × 引数 の組み合わせで指定します。

{
  "permissions": {
    "deny": [
      "Write(.env)",
      "Write(.env.*)",
      "Write(**/credentials.json)",
      "Edit(.env)",
      "Edit(.env.*)",
      "Bash(cat .env)",
      "Bash(cat .env.*)",
      "Bash(cp .env*)"
    ]
  }
}

「Claude が .env を読まない」だけでなく、「.env を書き換えたり、cat で出力したりもできない」状態にします。これで、誤ったコンテキスト経由で .env の内容が露出するルートを完全に塞げます。

Bad

やりがちな失敗

  • .gitignore だけ書いて .claudeignore を作っていない
  • .claudeignore を作ったが、リポジトリにコミットしていない(個人の手元だけにある)
  • 「機密情報を扱うリポジトリだけ .claudeignore を作る」運用 — 抜けが必ず出る
  • .claudeignore を作ったが、permissions の deny を設定していない
Good

確実に止める三重防御

  1. .gitignore でコミット流出を防ぐ
  2. .claudeignore で Claude が読まないようにする
  3. permissions.deny で Claude が書く / cat する / コピーするのも禁じる

permissions の 3 段階運用 — allow / ask / deny の組み立て

.claude/settings.jsonpermissions には 3 つの判定 があります。==allow は確認なしに自動実行、ask は毎回確認(デフォルト)、deny は絶対拒否。allow と deny に書いていない操作は自動的に ask 扱い== です。組織標準としては、安全で頻度が高い読み取り系は allow に、破壊的 / 外部通信 / 認証情報系は deny に、中間は ask に残します。

組織標準テンプレート

全リポジトリの .claude/settings.json にコミットします。

{
  "permissions": {
    "allow": [
      "Read", "Glob", "Grep",
      "Bash(ls *)", "Bash(pwd)",
      "Bash(git status)", "Bash(git diff)", "Bash(git log*)",
      "Bash(npm test)", "Bash(npm run lint)",
      "Bash(npm run typecheck)", "Bash(npm run build)",
      "Bash(go test ./*)", "Bash(go vet ./*)"
    ],
    "deny": [
      "Bash(rm -rf *)", "Bash(sudo *)", "Bash(chmod 777 *)",
      "Bash(git push --force*)", "Bash(git reset --hard*)",
      "Bash(git checkout -- *)", "Bash(git filter-branch*)",
      "Bash(curl *)", "Bash(wget *)", "Bash(ssh *)", "Bash(scp *)",
      "Bash(aws *)", "Bash(gcloud *)", "Bash(kubectl *)",
      "Bash(terraform *destroy*)", "Bash(terraform *apply*)",
      "Bash(docker system prune*)", "Bash(dd *)",
      "Write(.env)", "Write(.env.*)",
      "Edit(.env)", "Edit(.env.*)",
      "Bash(cat .env*)", "Bash(cp .env*)"
    ]
  }
}

allow / deny を組織で標準化する 3 つのルール

①迷ったら deny — 事故時の被害が大きいものは全部 deny に入れて、必要だと声が上がってから外す。②allow は積極的に拡張 — 安全で頻度が高い操作(テスト・lint・git status 等)は迷わず allow に。ask が多すぎると承認疲れで全部 yes を押すようになる。③環境別に差分を持つ — 本番に近いリポジトリでは deny を厳しく、新規プロトタイプでは allow を緩く。

ask の戦略的活用

ask に残すのは 「人間が見れば判断できるが、機械では事前判定できない」 もの。Bash(npm install <パッケージ名>) は文字列を見ないと安全性が分からないので、allow にも deny にも入れず ask に残します。

ポイント

permissions の見直しは 月 1 回のサイクル で。「直近 1 ヶ月でいつも yes を押している操作」を allow に昇格、「使われない操作」を deny に降格、という棚卸しを情シスが担当します。


API キー管理 — 環境変数、Secret Manager、ローテーション

API キーは Claude Code 組織運用の 最重要シークレット。漏洩すると コスト青天井 / 利用ログ閲覧 / 悪意ある書き換え の 3 つが同時に起こります。

3 層のキー管理

組織標準は次の 3 層構成。Layer 1 個人ローカル は OS Keychain 経由、Layer 2 CI/CD は GitHub Secrets / GitLab CI Variables、Layer 3 本番運用ボット は AWS Secrets Manager / GCP Secret Manager から IAM で都度取得。

# Layer 1 — macOS Keychain に保管、利用時のみ環境変数化
security add-generic-password -a "$USER" -s "anthropic-api-key" -w "sk-ant-..."
export ANTHROPIC_API_KEY=$(security find-generic-password \
  -a "$USER" -s "anthropic-api-key" -w)

# Layer 2 — GitHub Actions の Secrets から注入
# env:
#   ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}

# Layer 3 — Cloud Run / Lambda は Secret Manager から都度取得、IAM で権限分離

==.zshrc に平文で書く== のは最低限避けます。ノート PC 盗難 1 回で全社キーが漏れます。

1 人 1 キー原則

組織導入で必ず守るべきは 「1 人 1 キー」。共有キーを使うと誰がいつ何に使ったか追えず、不正利用の犯人が分かりません。Anthropic Console の Workspace 単位 でキーを発行し、個人別に割り当てます。

構成利点欠点
全社 1 キー管理が楽誰が使ったか不明、漏洩時の影響全社
部署別キー部署単位の集計可能個人特定不可、退職時の処理が雑
1 人 1 キー完全な追跡、退職時の即時 revoke発行・管理コスト

100 人規模までは 1 人 1 キーが現実的。それを超える規模では Bedrock / Vertex 経由で IAM ロール認証に切り替える設計が定石です。

ローテーションのルール

「いつかやる」では絶対にやりません。情シスのチェックリストに次を組み込みます。①90 日定期ローテーション / ②退職日当日に該当キー Revoke(オフボーディングに必須項目化)/ ③漏洩疑い時は即時 Revoke + 全キー一斉ローテーション / ④Notion / スプレッドシートで台帳管理

漏洩時の対応フロー

「漏れたかも」と感じた瞬間に次の順で動きます。①console.anthropic.com で該当キーを即座に Revoke / ②Usage ページで直近 24 時間の異常利用を確認 / ③アクセスログから利用 IP を特定 / ④情シス・セキュリティ責任者に 30 分以内に第一報 / ⑤PII を扱うコードに関与していたら法務に通知 / ⑥事後ふりかえりで漏洩経路と再発防止策を決定

ポイント

漏洩を 1 時間以内に止められるか が被害の桁を決めます。請求アラートを 1 日 $100 で発報 に設定すると、土日深夜の不正利用も検知できます。Slack #security-alerts 連携を Phase 2 までに完了させます。


MCP サーバーの安全な選び方 — 信頼できる発行元、ローカル sandbox

第 8 章で扱った MCP は、Claude Code に外部ツールを接続する強力な機能です。一方で、MCP サーバーは Claude のコンテキスト全体にアクセスできる ので、雑に入れると情報吸い取りツールに化ける リスクがあります。

MCP のリスクモデル

MCP サーバーをインストールすると、Claude が ①サーバーが提供するツールをユーザー指示なしに呼ぶ / ②コンテキストの一部 / 全部をサーバーに送信 / ③サーバー応答をコンテキストに取り込む 挙動を取れるようになります。サーバー側コードの動作はユーザーから見えません。AI エージェントは 判断を委任している ぶん、悪意のあるサーバーの影響を強く受けます。

3 つの信頼レベル

組織で使う MCP は次の 3 段階で分類し、L1 のみ全社展開 / L2 は情シス承認制 / L3 は禁止 が現実的なラインです。

レベル評価
L1 信頼可Anthropic 公式、自社内製、有名 SaaS 公式監査済み、定常許可
L2 条件付きOSS で 1k stars 以上、過去 3 ヶ月メンテあり情シス承認後に許可
L3 不可個人の趣味、star 100 未満、メンテ停止業務利用禁止

MCP サーバーの評価チェックリスト

新しい MCP を業務利用する前に、発行元 / OSS かどうか / メンテ頻度 / Issue 対応速度 / 外部通信先 / 認証情報要求の最小性 / コンテキスト送信範囲 / SOC 2・ISO 27001 取得状況 の 8 項目を確認します。

ローカル sandbox での隔離

未知の MCP は 専用の隔離環境 で動かします。本番 Mac で直接実行せず、Docker / Devcontainer / VM 上の最小権限環境を用意します。

# Docker で隔離環境を作る例(認証情報も別キー)
docker run -it --rm --name mcp-sandbox \
  -v $(pwd)/sandbox-data:/workspace:rw \
  -e ANTHROPIC_API_KEY=$SANDBOX_KEY \
  --read-only --tmpfs /tmp:rw --memory=2g --cpus=1 \
  node:20-slim bash

認証情報も別キーを使う のがポイント。サンドボックスから本番リソースにも個人機密にもアクセスできない状態を作ります。

MCP の deny リスト

permissions と同様、MCP も deny リストを持てます。組織で禁止する MCP を情シスが管理し、各リポジトリの settings.json に同期します。

{
  "mcp": {
    "denyServers": [
      "unknown-vendor/file-system-mcp",
      "github.com/random-user/auto-deploy-mcp"
    ]
  }
}
Bad

MCP の失敗パターン

  • 「便利そう」だけで個人判断で MCP をインストール、半年後に発行元のメンテが止まる
  • データベース接続系の MCP を本番認証情報で使い、SQL 履歴が外部に流出
  • カレンダー / メール系 MCP に「全権限」を渡してしまう
  • MCP の自動アップデートを許可、ある日突然挙動が変わる
Good

組織での MCP 運用

  • 利用可能な MCP の ホワイトリスト を情シスが管理
  • 新規 MCP の追加は 月 1 回のレビュー会 で議論
  • 認証情報は MCP ごとに 専用の最小権限ロール を作る
  • バージョンを ==mcp.json で固定==、自動更新を無効化

ログ・監査 — どのコマンドを誰がいつ実行したか追跡

「事故が起こったときに、後から追える状態」を作るのが監査の本体です。監査ログがない組織は、事故が起こっても原因が特定できず、再発防止も組めません

Claude Code の標準ログ

Claude Code は ~/.claude/projects/<hash>/ 配下に JSONL 形式でセッションログを蓄積します。開始 / 終了タイムスタンプ・ユーザー入力・応答・実行ツール名と引数・承認 / 拒否の判定 が記録されます。ローカルにしか残らない ので、組織監査としては不十分です。

集約ログの設計

各個人のセッションログを中央集約 する仕組みを作ります。3 パターン。A シェルラッパーclaude をラップして終了時にクラウドストレージに rsync、シンプルだがローカル依存。B Usage API — Anthropic Console から定期取得、コマンド粒度は取れないがコスト + 監査に有用。C Bedrock / Vertex 経由 — CloudTrail / Cloud Audit Logs が自動でフル記録、エンタープライズ環境では最有力。

# パターン A のシェルラッパー例(/usr/local/bin/claude-audited)
#!/bin/bash
USER_EMAIL=$(git config user.email)
TS=$(date -u +%Y-%m-%dT%H:%M:%SZ)

command claude "$@"
EXIT_CODE=$?

LATEST=$(ls -t ~/.claude/projects/*/session-*.jsonl | head -1)
aws s3 cp "$LATEST" "s3://company-claude-audit/$USER_EMAIL/$TS.jsonl"
exit $EXIT_CODE

監査ダッシュボードの最小要件

情シスが月次レビューするための最小 5 項目。①利用者別月次トークン消費 / ②deny にヒットした操作一覧 / ③permissions の変更履歴 / ④退職者の最終利用日 / ⑤コスト上限超過アラート

監査ログ自体のセキュリティ

監査ログは本体と同等以上に厳重に守ります。過去のユーザー入力 / 出力がそのまま記録されているため、ログ漏洩 = 半年分の業務内容漏洩。ストレージは WORM、アクセスは情シス + セキュリティ責任者のみ、アクセス自体を別ログに記録(メタログ)、保管期間は法令準拠で 1〜7 年。

気づき

監査ログは「事故が起こった後の救命具」

事故ったその瞬間に、ログがあれば「誰の・何のオペレーションが原因か」が 30 分で分かります。ログがないと、犯人探しに数週間かかり、その間に被害が広がります。ログ整備のコストは、事故対応コストの数十分の一 です。Phase 2 までに必ず整備します。


SaaS / オンプレ運用の選択 — Anthropic、Bedrock、Vertex AI

Claude Code は Anthropic 直 API 以外に AWS Bedrock / GCP Vertex AI 経由でも動きます。組織のセキュリティ要件に応じて選びます。

3 つの経路の比較

項目Anthropic 直AWS BedrockGCP Vertex AI
認証API キーIAM ロールサービスアカウント
データ境界AnthropicAWS リージョン内GCP リージョン内
監査ログConsoleCloudTrailCloud Audit Logs
データレジデンシーUS 中心東京可東京可
モデル提供即日数週間〜数ヶ月数週間〜数ヶ月

選び方の基本指針

A 個人 / スタートアップ — Anthropic 直。手間が少なく、最新モデルが即日使える。B エンタープライズ / 金融 / 医療 — Bedrock or Vertex。既存 AWS / GCP の Enterprise Agreement で追加契約不要、自社クラウド境界を超えない、CloudTrail / Audit Logs が監査要件を自動で満たす。C 日本国内データ要件 — Bedrock 東京 or Vertex asia-northeast1 でデータ越境を回避。D ハイブリッド — 開発は Anthropic 直、本番は Bedrock / Vertex の組み合わせ。

設定例

Bedrock 経由で Claude Code を動かす設定。

# Bedrock 経由(東京リージョン)
export CLAUDE_CODE_USE_BEDROCK=1
export AWS_REGION=ap-northeast-1
export ANTHROPIC_MODEL=anthropic.claude-sonnet-4-20250514-v1:0
aws configure sso && claude

# Vertex AI 経由(東京リージョン)
export CLAUDE_CODE_USE_VERTEX=1
export CLOUD_ML_REGION=asia-northeast1
export ANTHROPIC_VERTEX_PROJECT_ID=my-gcp-project
gcloud auth application-default login && claude

コストの違い

3 経路ともほぼ同等価格、AWS / GCP のコミット割引が効けば多少安くなる程度。コストだけで決めるのは正解とは限りません。データレジデンシー / 監査要件 / 既存クラウド契約のほうが優先度が高い判断軸です。

ポイント

Phase 1 は Anthropic 直で試す、Phase 3 の全社展開で Bedrock / Vertex に乗り換える のが現実的。最初から Bedrock を選ぶと、最新モデル提供までに数ヶ月待つことになり、パイロットの速度が落ちます。


失敗パターン — 組織導入で実際に起こった事故

組織導入の現場で実際に発生した失敗を 4 つ紹介します。すべて 事前に設計しておけば回避できた 例です。

失敗 1 — 秘匿情報をリポジトリにコミット

Bad

状況 — エンジニアが本番の .env.env.production.local という名前で別途作り、.claudeignore 登録を忘れた。Git にもコミットされ、リモートに push された。

原因.gitignore のワイルドカード不足、.claudeignore テンプレが組織標準化されていなかった。

被害 — Stripe / Auth0 / DB の認証情報が GitHub に露出。4 時間で全キー Revoke、Git 履歴 rewrite、関係者通知。対応工数は数十人日。

対処.gitignore / .claudeignore の組織標準テンプレをスキャフォルディング必須化 / pre-commit hook で detect-secrets / git-secrets 導入 / GitHub Secret Scanning + Push Protection を組織全体で有効化。

失敗 2 — 危険なシェルコマンドを承認した

Bad

状況 — 新人がテスト環境のクリーンアップを依頼。Claude が rm -rf を含む提案を出し、文字列を見間違えて承認。引数に ~/ が混じっていて、ホームディレクトリが部分的に消えた。

原因permissions.denyBash(rm -rf *) が入っていなかった。

被害 — 個人マシンのホームディレクトリの一部消失。Time Machine 復旧で 4 時間。会社共有データへの影響なし。

対処 — 組織標準 permissions.deny を全リポジトリに強制 / rm -rf 系は絶対 deny / 新人オンボーディングで「承認は 3 秒考えてから」を周知。

失敗 3 — 個人 API キーをチームで共有

Bad

状況 — リーダーが自分のキーを Slack DM で 5 人に共有。半年後リーダーが退職、個人キーは Revoke したが共有先のフォローを忘れた。

原因 — 1 人 1 キーの組織ルールがなく、オフボーディングのチェック項目に「該当者キーの転用有無」が無かった。

被害 — 共有先 5 人が半日 Claude Code を使えなくなった。退職者が悪意を持てば、社内ナレッジを抜き出せた状態だった。

対処 — Workspace 機能で 1 人 1 キー強制 / Slack に Secret Scanning Bot 設定 / オフボーディングに「該当者の Workspace を Revoke」必須項目化。

失敗 4 — Sub-agent / MCP への過剰権限

Bad

状況 — 営業部の自動化用に Slack 連携の Sub-agent を構築。MCP で CRM・メール・カレンダーを接続し、bypassPermissions を有効化。Sub-agent が顧客リスト全件をエクスポートして外部アドレスに送信した。

原因 — Sub-agent に過剰権限を付与し、CRM の全権アカウントを直接渡していた。

被害 — 宛先が社内テスト用で情報漏洩には至らず。運用次第では数万件流出する寸前だった。

対処 — Sub-agent には最小権限の MCP 認証情報のみ / 外部宛メールは人間の最終承認必須 / bypassPermissions は CI のみ / 月次の運用レビュー会を設置。

気づき

4 つの失敗の共通点は 「便利さを優先して、安全装置を外した」 こと。組織導入では便利さと安全のトレードオフが必ず発生しますが、ゼロ防御で運用してはいけない ラインだけは絶対に守ります。


監査チェックリスト 10 項目

組織導入が一段落した段階で、四半期 1 回 の監査を回します。次の 10 項目を順に確認します。

<Checklist id="intro-ch10-3-audit" items={["全リポジトリに .claudeignore が存在し、組織標準テンプレと差分がない","全リポジトリの .claude/settings.jsonpermissions.deny が組織標準を満たしている","個人 API キーは 1 人 1 キー、共有キーが存在しない","API キーの最終ローテーション日が 90 日以内","退職者のキーが Revoke 済みで、台帳と一致している","監査ログがクラウドストレージに集約されており、過去 90 日分が閲覧可能","コスト Hard Limit / Soft Limit が個人別に設定されている","MCP サーバーの利用一覧があり、すべて L1 / L2 信頼レベル","Bedrock / Vertex 経由の場合、CloudTrail / Cloud Audit Logs に Claude 呼び出しが記録されている","過去 90 日間にセキュリティインシデントが発生しておらず、もしくはインシデント対応報告が完了している"]} />

このチェックリストは 情シス / セキュリティ責任者が独立して実施結果を CTO / CEO に四半期報告 として上げるのが理想。「現場が自分で監査」では緩みが入るため、監督と現場を分離 するのが鉄則です。


経営層・情シスへの説明スライド構成

技術用語に詳しくない聴衆向けに、5 枚 を超えないように作ります。

スライド 1 何を守るか — ソースコード / 認証情報 / 顧客個人情報の 3 資産。漏洩時の最大被害を金額換算で示す。

スライド 2 どう漏れるか — リスク 5 シナリオを 絵で 説明。コード送信フロー、危険コマンド、MCP からの情報吸い取り。技術的正確さより「どこに穴があるか」が直感的に分かることが重要。

スライド 3 3 重防御の構成.claudeignore / permissions / 監査ログを 1 枚の概念図 に。「読まない / 書けない / 後から追える」のメッセージ。

スライド 4 運用ルール — 1 人 1 キー / 90 日ローテーション / 退職時 Revoke / MCP ホワイトリスト / 四半期監査 の 5 つ。項目ごとに責任者の役職 を明記。

スライド 5 コストとリスクのバランス — 完璧と無防備の中間点を示し、Phase 1 → 4 のロードマップで段階的に強化する旨を補足。

ポイント

経営層向け資料は 情シス内レビューを通してから提出 します。技術的な誤りが 1 つあるとその後の説明全部の信頼が崩れます。


まとめ

このレッスンで押さえた Claude Code セキュリティ実装 の要点 8 つ。

  1. データの送信先Read した時点で内容は Anthropic API に流れる。「指示で禁止」ではなく「ファイルシステムで隔離」が原則
  2. 3 重防御.gitignore / .claudeignore / permissions.deny の 3 つを同時に揃える
  3. permissions の 3 段階 — allow / ask / deny。迷ったら deny
  4. 1 人 1 キー + 90 日ローテーション — 共有キー禁止、退職時即時 Revoke、Secret Manager 経由
  5. MCP は 3 段階の信頼レベル — L1 のみ全社、L2 は情シス承認制、L3 は禁止
  6. 監査ログは必ず集約 — Bedrock / Vertex 経由なら自動で監査要件を満たす
  7. SaaS / Bedrock / Vertex の使い分け — パイロットは Anthropic 直、全社展開時にクラウドベンダー経由
  8. 四半期 1 回の独立監査 — 現場と監督を分離、CTO / CEO に報告

セキュリティは「一度設定して終わり」ではありません。Claude Code は半年で挙動が変わり、MCP は週単位で増えます。運用ルール・設定・ローテーションを 生き物 として扱う組織だけが、長期的に安全な状態を保てます。

章末演習

章末演習 — 自社の運用に落とし込む。所要時間 30 分。

  1. ==自社の .claudeignore テンプレを書く== — 機密ファイルを列挙し、組織標準テンプレを 1 つ作る
  2. ==.claude/settings.json の deny リストを書く== — 自社で禁止すべきコマンドを 20 個以上挙げて JSON に落とす
  3. 1 人 1 キーの実現方法を決める — Anthropic Workspace か Bedrock IAM か Vertex SA か、自社クラウド契約と照らし合わせる
  4. MCP ホワイトリストを 5 つ作る — 利用予定 MCP の信頼レベルを判定する
  5. 監査チェックリスト 10 項目を実施 — 欠けている項目を Phase 2 までの宿題に追加

ここまで完了すれば、情シス・セキュリティ責任者と経営層に説明できる材料 が揃います。

<Quiz question="Claude Code で .env ファイルを Anthropic API に絶対送信させないために、最も確実な方法はどれですか?" options={["CLAUDE.md に「.env を読まないでください」と書いておく",".gitignore.env を追加する",".claudeignore.env を追加し、permissions.denyRead(.env) も拒否する"]} answer={2} />

<Checklist id="intro-ch10-3" items={["Claude Code のデータ送信フローを 4 行で説明できる",".gitignore / .claudeignore / permissions の役割の違いを明確に説明できる","allow / ask / deny の 3 段階を組織標準として設計できる","1 人 1 キー + 90 日ローテーションの運用フローを描ける","MCP サーバーの 3 段階信頼レベルで自社の利用 MCP を分類できる","監査ログをクラウドストレージに集約する設計を 1 つ持っている","Anthropic / Bedrock / Vertex の 3 経路から自社用の選択ができる","10 項目の監査チェックリストで自社の穴を見つけた"]} />


これで Claude Code 入門ガイドの全 30 レッスンが完了しました。おめでとうございます。ここから先は 実際に手を動かして組織に根付かせる フェーズ。10-1 のチャンピオン制度、10-2 の Cowork 設計、本レッスンのセキュリティ実装を自社文脈に翻訳して半年・1 年単位で運用し続けることで、Claude Code が「便利ツール」から「組織の生産性インフラ」へ 育ちます。

次のステップ

  • 10-1: チーム活用 — チャンピオン制度の設計を読み返して、社内ロードマップに落とし込みましょう
  • 10-2: Claude Cowork — Cowork 設計とオンボーディング教材の整え方をもう一度確認できます
  • 9-1: API 料金の仕組み — 全社展開の前にコスト見積もりを精緻化したい方におすすめです