APIキーの直書きは何が危ないのか—動くから気づけない。確認手順と見つけたときの対応
キーは「なりすませる合鍵」。漏れていても、ツールは何事もなく動き続ける
この記事はAIで作った社内ツール、本番導入前チェックリスト12項目の観点1(情報の置き場所)を詳しく扱ったものです。
この記事のポイント
APIキーは「その人になりすませる合鍵」。漏れても動作に異常が出ないので気づけない。残る場所はコード本体だけでなく、Gitの履歴・チャットの貼り付け・スクリーンショットにも及ぶ。見つけたときの正しい順序は「無効化 → 再発行 → コード修正」で、コードを直すのは最後。
AIに「このAPIを使ってツールを作って」と頼むと、動かすためにキーが必要になる。手っ取り早く動かしたいので、いったんコードに直接書く。動いた。そのまま使い始める。——非エンジニアが作ったツールで最も多いのがこのパターンで、しかもこの状態は、何年放置しても不具合として表面化しない。この記事では、何が危ないのか、どこを見れば分かるのか、見つけたら何から手を付けるのかを順に整理する。
APIキーは「パスワード」だと思っていい
技術的な説明を抜きにすると、APIキーはそのサービスにおいて自分になりすませる合鍵だ。持っている人は、自分と同じ操作ができる。
何ができてしまうかは、キーの種類で変わる。
- 生成AIサービスのキー:他人があなたの契約で使い放題になる。気づくのは請求が跳ね上がったとき
- クラウドストレージのキー:保存しているファイルを取り出される
- データベースのキー:顧客情報を丸ごと読み出される。書き換えや削除ができるキーなら、消される
- メール配信サービスのキー:自社のドメインを名乗って第三者がメールを送れる
いずれも「パスワードが漏れた」のと同じ扱いをする必要がある。そして重要なのは、漏れていてもツールは正常に動き続けることだ。異常が出ないので、社内の誰も気づけない。
なぜ直書きが残ってしまうのか
これは注意力の問題ではなく、作り方の順序による。
- まず動かしたいので、キーをコードに直接書く
- 動いた。うれしい。次の機能に進む
- 「あとで環境変数に移す」と思っている
- 移す前に完成して、使い始める
AIに「環境変数から読む設計にして」と最初から指示していても、この落とし穴は残る。動作確認のために一時的に直接書いた値が、そのまま残っているケースが非常に多い。指示したかどうかではなく、実際のファイルを見ないと分からない。
キーが残っている場所は5つある
コードを開いて検索するだけでは足りない。実際に確認する場所はこれだけある。
| 場所 | 見落としやすい理由 |
|---|---|
| コード本体 | ここは探す。ただしファイルが複数あると見落とす |
| 設定ファイル・.env | 環境変数にしたつもりでも、そのファイル自体が共有されていることがある |
| Gitのコミット履歴 | ファイルから消しても履歴には残る。ここが最も見落とされる |
| AIとのチャット履歴 | エラー解決のためにコードごと貼り付けたときに一緒に送っている |
| スクリーンショット・共有資料 | 画面キャプチャに写り込む。社内資料や勉強会の資料に残る |
特に3番目は非エンジニアにはほぼ知られていない。Gitはファイルの変更履歴をすべて保存する仕組みなので、後からファイルを書き換えても、古いバージョンを見れば元の値が読める。「消したから大丈夫」が通用しない。
確認手順(技術がなくてもできる範囲)
- 使っている外部サービスを全部書き出す。生成AI、クラウド、メール配信、決済、地図など。それぞれキーが必要だったはずなので、キーの本数が分かる
- 各サービスの管理画面で、発行済みキーの一覧を見る。身に覚えのないキーがないか、いつ発行したものかを確認する。ここは管理画面を開くだけなので誰でもできる
- 作った人に「このキーはどこに書いてありますか」と聞く。即答できれば場所は把握できている。「たしか環境変数にした気が」なら、実際に開いて確認する
- Gitを使っているか聞く。使っているなら、履歴にキーが含まれていないかの確認が別途必要になる。ここは技術者の領域
- 利用量とアクセス記録を見る。多くのサービスは管理画面で使用量が見られる。想定より多い、深夜に使われている、といった兆候があれば漏洩を疑う
見つかったときの対応は、順序を間違えない
直書きが見つかると、まずコードを直したくなる。それは順序が逆だ。
正しい順序
- 発行元の管理画面で、そのキーを無効化(失効)する—漏れている前提で、まず使えなくする
- 新しいキーを発行する
- 新しいキーを環境変数に入れ、そのファイルが共有対象外であることを確認する
- コードを修正し、動作を確認する
- Git履歴に残っている場合の扱いを技術者と決める
コードから消すだけでは、すでに漏れている可能性のあるキーが有効なまま残る。無効化して初めてリスクが止まる。多少ツールが止まってもいいので、失効を先にやる。
出典・一次情報
- リポジトリからの機微なデータの削除(GitHub Docs)—機微なデータがシークレット(パスワード、トークン、資格情報など)である場合、「最初の手順として、そのシークレットを失効させたり、ローテーションしたりする必要がある」と明記されています。また、リポジトリから削除したあとも、クローンやフォーク、キャッシュされたビュー内のハッシュ経由で以前のコミットにアクセスできる可能性があることも説明されています。
仕様・手順は変更されます。最新の情報は公表元でご確認ください。
次に同じことを起こさないために
- キーは用途ごとに分けて発行する。1本を使い回さない。漏れたときに影響範囲を切り分けられる
- 権限は必要最小限にする。読み取りだけで足りるなら、書き込み・削除ができるキーを使わない
- AIにコードを貼るときは、キーをダミーに置き換えてから貼る。ルールとして決めておく
- 半年に一度、キーを棚卸しする。使っていないキーを消すだけでもリスクは減る
「どこに書いてあるか分からない」を解消する
テクミルは、社内で作ったAIツールについて、第三者のエンジニアが懸念点と対応方針を整理するサービスです。キーの保管場所とGit履歴の確認だけ、といった範囲を指定した相談もできます。月額8万円(税別)から、初回の相談は30分無料。
テクミルのサービス内容を見る →まとめ
APIキーの直書きは、技術的には初歩的な問題だが、症状が出ないという一点で厄介になる。動いているから誰も見に行かず、見に行かないから見つからない。確認は管理画面を開くところから始められるので、まず発行済みキーの一覧を見るところから手を付けるといい。
よくある質問
APIキーが漏れると具体的に何が起きますか?
そのキーで許可されている操作を、第三者がすべて実行できます。生成AIのキーなら他人があなたの契約で使い放題になり請求が跳ね上がる、クラウドストレージのキーなら保存されているファイルを取り出される、データベースのキーなら顧客情報を丸ごと読み出される。キーは「その人になりすませる合鍵」なので、パスワードが漏れたのと同じ扱いで対応します。
コードからAPIキーを消せば大丈夫ですか?
足りません。Gitでバージョン管理している場合、ファイルから消しても過去のコミット履歴には残り続けます。履歴を見れば読み取れる状態のままです。正しい順序は、まず古いキーを発行元の管理画面で無効化(失効)し、新しいキーを発行して環境変数に入れること。コードの修正はその後です。
環境変数に入れれば安全ですか?
直書きよりは大幅に安全ですが、環境変数を書いたファイル(.envなど)が共有フォルダに置かれていたり、Gitに含まれていたりすると意味がありません。「環境変数にした」ではなく「そのファイルが誰から見えるか」まで確認してください。
泉 款太(いずみ かんた)
株式会社SalesDock 代表取締役
慶應義塾大学法学部卒。スタートアップ、ラクスル、リクルート(SUUMO)を経て2025年に独立。 中小企業の経営・営業・業務・データをつなぐ事業基盤の設計と実装を支援。 不動産・製造業・クリニックを中心に30社以上の業務改善に携わる。
代表メッセージを読む →