

こんにちは、代表の後藤です。
※Web集客・広告・SNS・AI導入などをまるっと月10万円から引き受けます → 後藤、貸します。
2,380万件
これ、なんの数字だと思いますか?
2024年だけで公開GitHubに流出した秘密情報(APIキーなど)の件数だそうです。
※セキュリティ会社GitGuardianが発表した調査結果
そのうちOpenAI系のAPIキーは、2022年から2024年で約1,212倍に増えているそうです。
驚きの数値ですよね。
しかも、先日SNSを見ていたら、海外のアカウントで「GitHub上にOpenAI系のAPIキーが160万件も流出している」とスクショ付きの投稿を見かけました。
しかも最近、Claude Codeユーザーが急増しているので、非エンジニアの方ほど気づかないうちにトラブルに巻き込まれやすい話です。
放置すると、数十万円~の請求が飛んでくる可能性もあります。
今回は、「なぜAPIキーが漏れるのか」「漏れたら何が起きるのか」「3分でできる対策」を、非エンジニアの方にもわかるように整理します。
なぜそんなに漏れるのか
APIキーというのは、要するに「ChatGPTやClaudeを自分のプログラムから動かすときの鍵」です。
この鍵を持っている人は、その鍵の持ち主のアカウントでAIを使えてしまいます。
つまり、
他人に鍵を知られたら、その他人があなたの残高でAIを使い放題になる
ということです。
で、なぜこんなに漏れているのか。
自分で書いたコードの中にAPIキーを直接書いてしまい、それをそのままGitHubに公開してしまう
このパターンが多いはずです。
GitHubは世界中のエンジニアが使っているコード共有サービスで、「デフォルトでは公開状態」なので、コードを上げた瞬間、世界中から見える状態になります。
そして悪意のある人たちは、定期的にGitHubで OPENAI_API_KEY= みたいな文字列を検索して、流出したキーを片っ端から拾っています。
さらに怖いのが、「ゾンビ問題」と呼ばれている現象です。
GitGuardianの同じ調査では、漏洩したキーの9割以上が5日経っても有効なままで、2022年に漏れたキーの約7割は今も使える状態だと報告されています。
要するに、一度漏らすと「ひたすら使いたい放題」になっている、という話です。
怖い話ですよね。
漏れると、実際に何が起きるか
例えば、実際に起きるのはこのようなイメージです。
- 高額請求が来る:
APIは従量課金なので、使われた分だけ請求される。
悪用されると一晩で数万円〜数十万円いくことも結構あるようです - 気づくのが遅れる:
請求が来て初めて気づくパターンが多い - 止めるまで続く:
漏洩に気づいて鍵を無効化するまでのあいだ、ずっと請求が積み上がります
実際、海外では「GitHubにうっかりAPIキーを上げて、翌朝起きたら300ドル請求されていた」という話がいくつもあります。
対策1『APIキーは .envファイル に書く』
ではどうするか。答えはシンプルで、APIキーをコードの中に直接書かないことです。
そのための仕組みが .env(ドットイーエヌブイ)ファイルです。
やることは2つだけです。
①コードと同じフォルダに「.env」という名前のファイルを作る
中身はこんな感じです。
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxx②コードの中では「.envから読み込む」形で使う
コード本体には変数名だけを書いておいて、実際のキーは .env から読み込む。
こうしておけば、コードを誰かに見せてもキーが漏れることはありません。
対策2『.gitignore に.envを追加する』
対策1の「.envファイルを作っただけ」だとまだ不十分です。
GitHubにコードをアップするとき、放っておくと .env も一緒にアップされてしまいます。
なので .gitignore(ギットイグノア)というファイルに .env を追加します。
.env.gitignoreにこの1行を書いておくだけで、GitHubに上げるときに「.envはアップロード対象から外す」ことができます。つまり、GitHubに公開されることはなくなります。
もし .gitignore 自体がなかったら、Claude Codeに「.gitignoreに.envを追加して」と頼めば、一発でやってくれます。
「.envで管理する」+「.gitignoreに.envを書く」
この2点セットだけで、うっかり漏洩事故のほとんどは防げます。
予防策をもう1つ:GitHubの「Push Protection」も確認しておく
.envと.gitignoreを徹底していても、「設定を忘れたまま古いコードをpushしてしまう」というケースはゼロにはなりません。
実はGitHub側にも、公開リポジトリへのpush時にAPIキーらしき文字列を検知して、その場でpush自体をブロックしてくれる「Push Protection(プッシュ保護)」という無料の機能があります。
GitHub公式ヘルプによると、個人アカウント向けのPush Protectionは、公開リポジトリに対してはデフォルトでオンになっています。
設定の確認・変更は、GitHubの右上のプロフィール画像から「Settings」→左メニュー「Security」内の「Code security」→「Push protection for yourself」から行えます。
さらに、GitHubは2024年8月からAnthropic(Claude)のAPIキーも「Secret Scanning Partner Program」の対象にしており、OpenAIのAPIキーと合わせて、公開リポジトリで検知された場合はGitHubから各社へ自動的に連携され、各社側でもキーを無効化する仕組みが用意されています。
※出典:GitHub公式Changelog「Anthropic is now a GitHub secret scanning partner」
「.envで管理する」「.gitignoreに書く」という自分側の対策に加えて、この機能がオンになっているか一度確認しておくと、うっかりミスをもう一段防げます。
ただし、非公開(プライベート)リポジトリでの利用は組織向けの有料プランが前提になる点は注意してください。
後藤、貸します。
会社の仕事を、
高額請求を"未然に"防ぐ:支出上限(Spend Limit)を先に設定する
ここまでは「漏らさないための対策」でしたが、
万が一漏れても、請求額がそれ以上増えないようにブレーキをかける仕組み
も、AnthropicとOpenAIそれぞれの管理画面に用意されています。
先に設定しておくのがおすすめです。
Anthropic(Claude)の場合
Claude Console(console.anthropic.com)の「Settings」→「Workspaces」から、ワークスペースごとに「Spend limits」タブで毎月の支出上限を設定できます。
Claude CodeをAPIキーで使っている場合は、自動的に作られる「Claude Code」ワークスペースにも同じ設定が可能です(出典:Anthropic公式ドキュメント「Workspaces」)。
OpenAIの場合
platform.openai.comの組織設定(Organization limits)またはプロジェクト設定(Project limits)の「Limits」タブにある「Edit spend limit」から、毎月の支出上限を入力できます。
ここで重要なのが、「Spend alert(通知が来るだけで、APIリクエストは止まらない)」と「Enforce a hard limit(上限に達すると、以降のAPIリクエストが実際に停止する)」の2種類があることです。
後者をオンにしないと、「上限を設定したつもりが、実は通知が来るだけで課金は止まっていなかった」ということが起こり得ます(出典:OpenAI公式ドキュメント「Spend limits」)。
漏洩の予防と、この支出上限の設定をあわせてやっておくと、万が一のときの被害を数百円〜数千円レベルに抑えられます。
【意外と知られていない】Claude Codeに「APIキーください」と言われても、コピペで渡してはいけない
Claude Codeを使っていると、作業の途中でこう言われることがあります。
「OpenAIのAPIキーを教えてください。ここに貼り付けてもらえれば、コードに組み込みます」
一見親切そうに見えますが、そのままコピペで渡してはいけません。
理由はシンプルで、Claude Codeに貼り付けた内容は、会話履歴としてサーバー側に保管されるからです。
つまり、「キーをコピペで渡す」というのは、「第三者(AI提供事業者)のサーバーにキーを預ける」のと同じことです。悪意のある漏洩じゃなくても、ログとして残るだけで事故の確率は上がります。
AIサービスの会話ログが将来どう扱われるかは、誰にもわかりません。
とにかくコピペでAPIキーを伝えるのは絶対に避けましょう。
すでにGitHubに上げてしまったかも、という人へ
「もしかして過去に上げたかも」と不安な方は、まずどのキーが、どこに上がっているかを特定するところから始めてください。
①リポジトリ内で検索して特定する
GitHubで自分のリポジトリを開いて、検索バーに sk- や OPENAI_API_KEY を入れて検索します。
ローカルだけのコードでも、ターミナルで git log -p | grep "sk-" を実行すれば過去コミットも含めてチェックできます。
②管理画面でキーを無効化する
- OpenAI:
https://platform.openai.com/api-keysで該当キーの「Revoke」をクリック - Anthropic:
https://console.anthropic.com/settings/keysで該当キーを削除
③新しいキーを発行して .env に書き換える
④コードを .env 読み込み形式に直してpushする
履歴には残りますが、すでに無効化済みなので実害はありません。
⑤使用量と請求を確認する
OpenAIは https://platform.openai.com/usage
Anthropicは https://console.anthropic.com/settings/usage
で直近の使用量を確認できます。
なお、Claude Codeを使っている方は、ターミナルで /usage と入力すると、今のセッションでどれくらいコストがかかっているかをその場で確認できます(Anthropic公式ドキュメントに記載されている機能です)。管理画面をわざわざ開かなくても、使いすぎに早めに気づけます。
身に覚えのない請求があれば、各サービスのサポートに連絡してください。
大事なのは、ファイルを消すより先に、まずキーを無効化することです。
まとめ
- APIキーの漏洩は、本当に他人事じゃない
- 対策は2つだけ。
.envで管理する、.gitignoreに.envを書く - Claude Codeに「キーを直接ください」と言われても、コピペで渡さない。
.env経由で読ませる - もう漏らしてしまったかも、と思ったら、まず鍵を無効化する
正直、最初にここでミスを犯すと取り返しがつかないので、AIを触り始めるタイミングでいちばん最初に身につけるべき習慣だと思っています。
Claude Codeを始めたばかりの方は、コードを書くより先に、ここだけは固めておいてください。
よくある質問
Q. .envファイルを作ったのに、Claude Codeが「鍵を教えて」と聞いてくることがあります。どうすれば?
A. 「.envに入っています。コードからは環境変数で読み込んでください」と伝えればOKです。
Q. .envを使っていれば、絶対に漏れませんか?
A. 使い方が正しければ防げます。ただしスクリーンショットやチャットへの貼り付けで「鍵を画面に出す」操作とセットで気をつけてください。
Q. すでに漏らしたかもしれません。一番最初にやることは?
A. キーの無効化(rotate)です。ファイル削除よりも先に、管理画面から該当キーを無効化してください。
Q. 個人利用なら気にしなくていい?
A. むしろ個人利用ほど要注意です。誰も見ていないので、気づいたときには高額請求が来ているケースが一番多いです。
Q. 支出上限(Spend Limit)を設定しておけば、それだけで安心ですか?
A. 上限には「通知だけで止まらないアラート」と「上限に達したら実際にリクエストを止めるハード上限」の2種類があります。安心して使うには、通知だけでなく「ハード上限(Enforce a hard limitなど)」の方を有効にしておく必要があります。







