13
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

API キーはどこから漏れるのか? 自分のサイトに来た .env 探し 1,566 件と、公開事例を 7 つの経路に分けてみた

13
Posted at

API キーが漏れる 7 つの経路(左)と、それぞれ先にすること(右)を矢印でつないだ図。サーバーや公開の置き場から 3 つ: ①公開リポジトリ(いちばん多い。2025 年の 1 年で 2,865 万件)→ 漏れた鍵を取り消す、プッシュ保護とシークレットスキャンも使う、②Web サイトの公開フォルダ → .env や .git を公開フォルダに置かない、③配るパッケージ・コンテナイメージ → 配る前に、途中の層まで鍵が無いかを確かめる。AI から 3 つ: ④ログと AI の会話の記録 → 鍵を出力させない、AI に .env を表示させない、⑤AI の道具と MCP の設定ファイル → 設定ファイルを公開しない、権限を絞った鍵を使う、⑥AI の学習に使われる公開データ → 漏れた鍵を取り消す。利用者の画面(ブラウザ)から 1 つ: ⑦公開してよかった鍵の権限変更 → 使える API と、使えるサイトを絞っておく

「API キーが漏れた」と聞くと、悪意のある誰かに盗まれた場面を思い浮かべがちです。実際に多いのは、鍵を置いた場所が思ったより広く見えていた、という漏れ方です。

この記事では、公開されている報告と事例、そして私たちのサイトに実際に届いたアクセスの記録から、API キーが漏れる経路を 7 つに分け、それぞれ何から塞ぐかを答えます。冒頭の図は、左に 7 つの経路を漏れる場所ごとに並べ、右にそれぞれ先にすることを並べた一覧です。引用した原文と細かい数字は、調査ページ API キーはどこから漏れるのか — 7 つの経路 に 1 行ずつ載せています。


1. まず、言葉をそろえる

言葉 意味
鍵 システムが「使ってよい相手か」を確かめるための、秘密の文字列。パスワード、API キー、アクセストークンなどがある。この記事では、これらをまとめて「鍵」と呼ぶ
API キー 鍵の一種。プログラムが別のシステムの API を呼ぶときに、自分が誰かを示すために送る文字列。API キーを持っている人は、持ち主と同じ操作ができる
環境変数 プログラムを動かすときに、外から渡しておく設定の値。API キーを入れることが多い
.env 環境変数に入れる値を書いておくファイル。API キーやパスワードが入る
.git コードの変更の記録が入ったフォルダ。過去の記録も丸ごと入っている
コンテナイメージ アプリを動かすための部品一式を、1 つにまとめて配る形
MCP AI に外のサービスや道具をつなぐための決まり
シークレットスキャン GitHub などのサービスが、置かれたコードから鍵の形をした文字列を探し、見つけた鍵を知らせる仕組み

2. 漏れる経路は 7 つ

API キーが漏れる 7 つの経路を、漏れる場所で 3 つに分けて、アイコンつきで並べた図。サーバーや公開の置き場から 3 つ(①公開リポジトリ、②Web サイトの公開フォルダ、③配るパッケージやコンテナイメージ)、AI から 3 つ(④ログと AI の会話の記録、⑤AI の道具と MCP の設定ファイル、⑥AI の学習に使われる公開データ)、利用者の画面(ブラウザ)から 1 つ(⑦公開してよかった鍵の権限変更)

漏れる場所で分けると、サーバーや公開の置き場が 3 つ、AI が 3 つ、利用者の画面(ブラウザ)が 1 つです。どれも、鍵を置いた場所が思ったより広く見えていた、というものです。

📎 7 つの経路の出典は API キーはどこから漏れるのか の「漏れる経路は 7 つ」 にあります。

3. いちばん多いのは、公開リポジトリ

件数が最も多いのは、GitHub などに公開したコードに鍵を書いたままにしてしまう漏れ方です。GitGuardian の年次報告によると、2025 年の 1 年で公開 GitHub に新しく置かれた鍵は 2,865 万件でした。

日本の例では、トヨタ自動車の委託先が公開したソースコードに、データサーバーへのアクセスキーが入っていて、約 5 年間、第三者が見られる状態だったと発表されています。設定ファイルに書いたまま公開する、サンプルに本物の鍵を入れたまま共有する、といった手違いで起きます。

📎 原文は API キーはどこから漏れるのか の「公開リポジトリ」 にあります。漏れた鍵を誰が止めるのかは シークレットスキャンとは にまとめています。

4. Web サイトの .env は、名前を当てるだけで読まれる

公開フォルダの .env が読まれる仕組みを比べた図。探す側は「/.env」「/ci/.env」など、ありそうな名前と置き場所を順に要求する。.env を公開フォルダに置いていないサイトは「見つからない」と返し、何も漏れない(IT連携マップのサイトは、中身を返した要求が 0 件)。置いてしまったサイトは、ファイルの中身がそのまま返り、書いてあった API キーやパスワードが持ち去られる

Web サイトの公開フォルダ(誰でも読める場所)に、環境変数を書いた .env を置くと、名前を当てられただけで中身が返ります。探す側は、ありそうな名前と置き場所を順に試していきます。

実際に、私たちのサイトにも 22 日分の記録で、攻撃に使われる形の要求が 8,219 件届き、そのうち .env を探す要求は 1,566 件以上、.git を探す要求は 108 件以上ありました。私たちのサイトは .env を置いていないので、中身を返したものは 0 件です。

📎 探された場所の上位 10 と数え方は API キーはどこから漏れるのか の「調査の詳細」 にあります。.env をどこに置けばよいかは .env の名前を変えれば安全か — 合鍵の置き場所 にまとめています。

5. AI の会話・設定・学習データにも残る

公開 GitHub の MCP の設定ファイルから見つかった鍵 2 万 4,008 件の円グラフ。まだ使えた鍵は 2,117 件(8.8%)、使えると確かめられなかった鍵は 21,891 件(91.2%)(GitGuardian)

AI を使うようになって、鍵の置き場所が増えました。AI の道具を外のサービスにつなぐ MCP の設定ファイルからは、公開 GitHub で 2 万 4,008 件の鍵が見つかり、うち 2,117 件はまだ使えました。

AI エージェントの部品の弱点のうち 73.5% は、動作を確かめるための出力が AI の会話に流れ込むことが原因だった、という研究もあります。会話の記録は手元に残ります。さらに、AI の学習に使われる公開リポジトリからは、まだ使える鍵が 54 万 3,699 件見つかっています。一度集められたデータからは、元のリポジトリを消しても鍵は消えません。

📎 原文は API キーはどこから漏れるのか の「AI の設定と学習データ」 にあります。AI エージェントに鍵を渡すときの注意は AI エージェントに鍵を渡しても大丈夫か に、MCP サーバーを足す前に確かめることは MCP サーバーを追加する前に、何を確かめるか にまとめています。

6. 公開してよかった鍵の権限変更

公開してよかった鍵の権限変更を、前と後で比べた図。鍵の文字列は同じまま、その鍵で使える API が増え、漏らしてはいけない鍵に変わる。前: Web ページに載せた地図の表示用の鍵。使える API は地図の表示だけで、Gemini は無効。拾われても、使えるのは地図の表示だけ。変化: 同じプロジェクトで、別の担当者が Gemini の API を有効にした(鍵の持ち主には知らせが来ない)。後: 同じ鍵で、地図の表示と Gemini の両方が使える。ページから鍵を拾った人が、アップロードされたファイルや保存されたデータを見たり、AI の利用料を持ち主に請求させたりできる。先にすること: 使える API(地図の表示だけ)と、使えるサイトを鍵に設定しておく。Truffle Security は、この状態の Google の鍵を 2,863 件見つけた

Google の地図を Web ページに表示するときは、Google の鍵をページの HTML に書いて公開します。この鍵は、もともと誰に見られてもよい前提の鍵です。ところが、同じプロジェクトで別の担当者が生成 AI の Gemini の API を有効にすると、公開していた同じ鍵で Gemini も使えるようになります。鍵の文字列は変わらず、鍵の持ち主に知らせも来ません。

Truffle Security は、この状態の Google の鍵を 2,863 件見つけました。ページから鍵を拾った人は、その鍵で、アップロードされたファイルを見たり、AI の利用料を持ち主に請求させたりできます。

公開してよい鍵でも、使える API と使えるサイトを鍵に設定して絞っておかないと、後から漏らしてはいけない鍵に変わります。

📎 原文は API キーはどこから漏れるのか の「公開してよかった鍵の権限変更」 にあります。

7. 経路ごとに、先に塞ぐところ

API キーが漏れる 7 つの経路ごとに、漏れ方と先にすることを並べた図。①公開リポジトリ: コードや設定ファイルに鍵を書いたまま公開する、サンプルに本物の鍵を入れたまま共有する → 漏れた鍵を取り消す、プッシュ保護とシークレットスキャンも使う。②Web サイトの公開フォルダ: .env や .git を誰でも読める場所に置き、名前を当てられて中身を読まれる → .env や .git を公開フォルダに置かない。③配るパッケージ・コンテナイメージ: 公開した Docker イメージの途中の層から鍵が抜き取られた(Codecov)→ 配る前に、途中の層まで含めて鍵が無いかを確かめる。④ログと AI の会話の記録: 動作を確かめるための出力が AI の会話に流れ込み、手元の記録に残る → 鍵を出力させない、AI に .env の中身を表示させない。⑤AI の道具と MCP の設定ファイル: 設定ファイルに鍵を直接書いたまま、ファイルごと公開する → 設定ファイルを公開しない、権限を絞った鍵を使う。⑥AI の学習に使われる公開データ: 一度集められたデータに鍵が残り、元のリポジトリを消しても消えない → 漏れた鍵を取り消す。⑦公開してよかった鍵の権限変更: 同じプロジェクトで別の API が有効になり、公開していた鍵で生成 AI まで使えるようになる → 使える API と、使えるサイトを絞っておく。鍵が漏れたら、どの経路でも、まず漏れた鍵を取り消す。コードやファイルから鍵を消しても、鍵は使えるまま

経路 先にすること
公開リポジトリ 漏れた鍵を取り消す。プッシュ保護とシークレットスキャンも使う(シークレットスキャンとは)
Web サイトの公開フォルダ .env や .git を公開フォルダに置かない
パッケージとコンテナイメージ 配る前に、途中の層まで含めて鍵が無いかを確かめる
ログと AI の会話 鍵を出力させない。AI に .env を表示させない
AI の設定と MCP 設定ファイルを公開しない。権限を絞った鍵を使う
学習データ 漏れた鍵を取り消す
公開してよかった鍵の権限変更 使える API と、使えるサイトを絞っておく

鍵が漏れたと分かったら、どの経路でも、まず漏れた鍵を取り消します。コードやファイルから鍵を消しても、鍵は使えるままだからです。鍵の期限と取り消し方は API トークンはいつ切れ、どう取り消すか にまとめています。

一次出典

出典 内容
GitGuardian: The State of Secrets Sprawl 2026 公開 GitHub の鍵 2,865 万件・MCP の設定ファイル
トヨタ自動車: お客様のメールアドレス等の漏洩可能性に関するお詫び 公開されたソースコードにアクセスキー
Codecov: April 2021 Post-Mortem コンテナイメージの途中の層から鍵
Chen et al.(arXiv 2604.03070) AI エージェントの部品の弱点の 73.5%
Truffle Security: Why exposed credentials stay live for years 学習に使われる公開リポジトリの鍵
Truffle Security: Google API keys and Gemini Gemini に使える Google の鍵 2,863 件

引用した原文と出典は、すべて調査ページで 1 行ずつ公開しています。確かめたい方は API キーはどこから漏れるのか — 7 つの経路 をご覧ください。

読者アンケート実施中
このテーマをもっと深掘りしてほしい方は、記事に「いいね」をお願いします。「いいね」の多いテーマから順に追加調査し、結果は新着記事でお知らせします(フォローしていただくと通知が届きます)。

【転載OK】本記事の転載について

本記事の文章・図表は、すべて転載 OK です。図は加工しないままお使いください。転載の際は、出典として、この記事の完全版 『API キーはどこから漏れるのか』(renkeimap.jp)へのリンクをお願いします。事前の連絡は不要です。

※ 筆者は日立系ITベンダー・介護ソフトベンダー・大学病院IT部門を経て独立し、現在は中小企業のIT・DX支援をしながら、業務システムの「つながり」を一次資料で調べています。 文中の「編集部」は、筆者が所属する IT連携マップ編集部 のことです。誤りを見つけられましたら 訂正窓口(無料・アカウント不要)へお願いします。訂正履歴も公開しています。

13
14
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
13
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?