Google APIキーを守る3つの基本手順、悪用と高額請求のリスクを下げる

Google APIキーを守る3つの基本手順、悪用と高額請求のリスクを下げる

Google APIキーを守る3つの基本手順、悪用と高額請求のリスクを下げる

Google Geminiを含むAIサービスやGoogle Cloud APIを利用する上で、APIキーの安全な管理は避けて通れない課題だ。適切な対策を怠ると、キーの漏洩や悪用により、高額な請求やプロジェクト環境の侵害を引き起こす可能性がある。

APIキーは「使うのは簡単だが、安全でない方法で使うのも同じくらい簡単」とGoogle Cloud Blogの著者Leonid Yankulin氏は指摘する。この記事では、Googleが提供するAPIキーのリスクを大幅に下げるための、すぐに実践できる具体的な手順を解説する。

これらの対策の多くは、Googleに限らず他のサービスで発行されるAPIキーやプロダクトトークンにも応用可能だ。個人開発者から組織の管理者まで、キーの取り扱いを見直すきっかけにしてほしい。

Step 1. 新しいAPIキーは「隔離」と「制限」が大前提

Step 1. 新しいAPIキーは「隔離」と「制限」が大前提

APIキーを作成する際、最初からセキュリティを考慮しておくことで、後々のトラブルを未然に防げる。「とりあえず作成」して放置されている無制限のキーが、組織における最大のリスク要因の一つだ。

キーは専用プロジェクトで作成する

新しいAPIキーを生成する最初のルールは、他の目的に使っていない独立したGoogle Cloudプロジェクト内で作成すること。これにより、仮にキーが漏洩しても、被害がそのプロジェクトのリソースに限定される。

プロジェクトを分けることは、問題発生時の原因特定と影響範囲の調査を大幅に容易にする。本番環境と同じプロジェクトで実験用のAPIキーを発行するといった行為は避けるべきだ。

API制限で「できること」を絞る

APIキーを作成する際、デフォルトではAPI制限がかかっていない。これは、そのキーが有効化されているすべてのサービスにアクセスできる状態を意味する。Google Cloud Blogの著者は「制限のないキーを絶対に作るな」と強調する。

API制限を設定することで、キーがアクセスできるサービスを特定のAPIだけに絞り込める。たとえば、AI Studioで利用するなら「Gemini API」のみ、地図機能だけが必要なら「Maps API」だけに制限する。漏洩時の攻撃範囲を最小化する考え方だ。

注意すべき副次的なポイントとして、AI StudioやFirebaseなど間接的なUIからキーを作成した場合、意図しないAPI群が自動で許可されているケースがある。Firebase経由で作ったキーは24ものAPI(DatastoreやFirestore、Cloud SQLなど)へのアクセスが許可されるため、不要なものは手動で外す必要がある。

未制限キーのリスク(Before)
流出キー Gemini API Maps API Cloud SQL Firestore
あらゆるAPIにアクセスされ、被害が拡大
制限設定後のキー(After)
流出キー Gemini API Maps API Cloud SQL Firestore
Gemini APIだけが悪用されるが、他のサービスは保護される

制限したいAPIが一覧に表示されない場合は、そのAPIが対象プロジェクトで有効化されていない可能性が高い。APIライブラリから事前に有効化しておく必要がある。

アプリケーション制限で「使う場所」を縛る

API制限が「どのサービスを使えるか」を制御するのに対し、アプリケーション制限は「どのアプリからキーを使えるか」を制御する。こちらも併用することで、セキュリティは飛躍的に高まる。

たとえばAI Studio専用のキーなら、許可するウェブサイトを aistudio.google.com に限定すれば、他のスクリプトや自動化ツールから大量のトークンを消費されるリスクを防げる。指定できる制限タイプは以下の4種類だ。

  • ウェブサイト、許可するURLのリストを指定
  • サービス(IPアドレス)、IPv4やIPv6アドレス、サブネットマスクで指定
  • iOSアプリ、バンドルIDで指定
  • Androidアプリ、パッケージ名と証明書フィンガープリントのペアで指定

注意点として、1つのキーに設定できるアプリケーション制限タイプは1種類だけ。複数のアプリ種別で利用する場合は、それぞれ専用のAPIキーを発行する。キーをアプリごとに分けておけば、利用状況の監視や侵害発生時の調査も容易になる。

アプリケーション制限の設定イメージ(AI Studio専用キーの場合)
許可アプリ
ウェブサイト https://aistudio.google.com
ブロックされるアクセス例
自動化スクリプトからの呼び出し、不明なIPアドレスからのリクエスト、許可リストにないWebサイト

Step 2. APIキーは「誰でも使える」前提で保管する

Step 2. APIキーは「誰でも使える」前提で保管する

APIキーの最大の特性は、特定の個人アカウントと紐づかない点にある。Google Cloud Blogの記事で「誰でも使える」と強調されているように、キー文字列を知っていれば誰でもその権限でAPIを呼び出せる。保管の安全性の重要性はAPI制限と同等だ。

「APIキーを絶対に、見えやすい場所に保存してはいけない」という基本ルールはシンプルだが、実際の開発現場ではしばしば破られている。ソースコードへのハードコードや、Gitリポジトリへの平文でのコミットは典型的なミスだ。

自社アプリケーションではSecret Managerを使う

Google Cloudを利用しているなら、Secret Manager(シークレットマネージャー)のような専用の機密情報管理サービスにキーを格納するのが鉄則だ。Secret Managerを使えば、APIキーをCloud RunやGKEの実行環境に安全に注入できる。

さらに保護レベルを上げたい場合は、キーを環境変数に渡すのではなく、アプリケーションコード内でSecret Managerから直接読み取る方式も選択肢になる。これによりランタイムメモリへの露出時間をさらに短縮できる。

外部アプリケーションではキーの取り扱いを事前調査する

サードパーティ製のツールやサービスにAPIキーを入力する場合、そのアプリケーションがキーをどのように保管し、通信しているかを確認する必要がある。

Webアプリケーションであれば、ブラウザの開発者ツールを使ってトラフィックを調査し、キーが暗号化されていない通信経路で送信されていないかを確認する。「Google AI Studioは暗号化されたローカルストレージを使用し、TLS暗号化チャネル経由でのみキーを送信する」とYankulin氏は具体例を挙げている。こうした設計を満たしていないツールへのキー提供は避けるべきだ。

安全なキー保管のチェックフロー
STEP 1 キーをソースコードに書いていないか確認
STEP 2 Secret Managerなど専用サービスに格納する
STEP 3 外部ツール利用時は、暗号化保存とTLS通信を確認する
STEP 4 Gitのコミット履歴にもキーが含まれていないか最終チェック

異常を検知したら「即削除」、調査の手順も把握する

異常を検知したら「即削除」、調査の手順も把握する

どんなに対策を施しても、キーが侵害される可能性はゼロにはできない。迅速な初動対応が被害を最小化する鍵を握る。Yankulin氏は「クレジットカードを無くしたときと同じように、まずキーを削除すること」と述べている。

Cloudコンソール、または gcloud services api-keys delete コマンドで即座にキーを無効化する。誤報だったと判明した場合でも、削除から30日以内であれば undelete コマンドで復元が可能だ。

侵害されたキーを特定する2段階調査

どのAPIキーが侵害されたか不明な場合は、以下の2段階で調査を進める。

第一段階、組織またはプロジェクト内のすべてのAPIキーを洗い出す。Cloudコンソールの「Asset Inventory」でリソースタイプを apikeys.Key に絞り込む方法と、gcloud services api-keys list コマンドを使う方法がある。組織全体を横断検索する場合は gcloud asset search-all-resources コマンドでJSON出力をフィルタリングする。

第二段階、API消費量のグラフを確認する。Cloud Monitoringの指標 serviceruntime.googleapis.com/api/request_count を使い、credential_id ラベルで特定のAPIキーIDに絞り込む。リクエスト数が異常に急増している場合、そのキーが悪用されている可能性が高い。

APIキーIDは、Cloudコンソールの「Credentials」ページでキーを選択した際のURL(/key/[KEY_ID] 部分)から、または gcloud services api-keys list --format='value(displayName,uid)' コマンドで確認できる。

API消費量の異常検知イメージ
通常時のリクエスト数
1時間あたり数千リクエスト。日次グラフはなだらかで安定した波形
侵害発生時のリクエスト数
1時間あたり数十万リクエストに急増。短時間で不自然なスパイクが出現
異常なスパイク  通常レンジ

Step 3. 日常的な「APIキー衛生管理」を習慣化する

Step 3. 日常的な「APIキー衛生管理」を習慣化する

エンジニアだけの話ではない。クラウドをかじり始めたばかりの個人ユーザーも、今すぐAPIキーの「衛生管理」を始めるべきだ。放置されたキーは、知らぬ間に悪用の温床となる。

Yankulin氏が推奨する即時実行すべきアクションは以下の5つだ。

  • 自分が保有するすべてのAPIキーを洗い出す
  • 使っていないキー、見覚えのないキーはすべて削除する(30日以内なら復元可能)
  • 残すキーは、利用するAPIだけに制限し、可能ならクライアントも絞り込む
  • 組織の管理者は apikeys.googleapis.com/Key の組織ポリシーを設定し、キーの乱立と制限設定の抜けを防ぐ
  • 定期的なキーのローテーション(再発行と差し替え)を検討する。ただし、既存キーを削除する前に、すべての利用箇所を特定して新しいキーに更新する周到さが必要だ

キーローテーションの際に「既存キーがどこで使われているのか把握しきれていない」という問題に直面するケースは多い。日頃からキーの利用箇所をドキュメント化しておくこと、そして新しいキーの発行時点から適切な制限をかけておくことが、結果的にローテーションのハードルを下げる。

キー衛生管理の3大習慣
棚卸し 全プロジェクトのAPIキーを月次でリストアップし、使っていないものは即削除
制限設定 新規キーは必ずAPI制限とアプリケーション制限をかけてから使い始める
ローテーション 四半期ごとにキーを再発行し、利用箇所を更新。跡地の旧キーは速やかに削除

この記事のポイント

  • APIキーは「誰でも使える」クレデンシャル。見える場所に保管しないことが大前提
  • 新規キー作成時は、API制限とアプリケーション制限を両方設定して攻撃の範囲を狭める
  • 保管にはSecret Managerなど専用の機密情報管理サービスを使い、コードへのハードコードを避ける
  • 使っていないキーや制限のないキーは即座に削除し、組織ポリシーで乱立を防ぐ
  • 侵害が疑われる場合はクレジットカードと同じ感覚で「まず削除」。監視データで異常を検知する
海田 洋祐

・ 複数業界における17年間のデジタルビジネス開発経験 ・ ウェブサイト開発のためのHTML、PHP、CSS、Java等の実用的知識 ・ 15ヶ国語対応の多言語SaaSの開発経験 ・ 17年間にも及ぶ、Eコマース長期運営経験 ・ 幅広い業界でのSEO最適化の豊富な経験

メッセージを残す