跳转到主要内容

API 密钥

本文约需 2 分钟阅读

API キーとは、アプリケーション間の通信で呼び出し元を識別するために使われる 一意の文字列です。Web サービスやクラウドプラットフォームが提供する API に アクセスする際、リクエストに API キーを含めることで「誰がこの API を呼んでいるのか」を サーバー側が判別します。ただし、API キーは厳密には認証 (authentication) ではなく 識別 (identification) の手段であり、OAuth トークンのような きめ細かい権限制御とは根本的に異なる点を理解しておく必要があります。

API キーの仕組み

API キーの送信方法は主に 2 つあります。1 つ目はリクエストヘッダーに含める方式で、Authorization: Bearer sk-xxxxX-API-Key: xxxx のように HTTP ヘッダーに埋め込みます。2 つ目はクエリパラメータとして URL に付与する方式 (?api_key=xxxx) ですが、こちらはサーバーログやブラウザ履歴にキーが 残るため、現在ではセキュリティ上推奨されません。 ヘッダー方式であっても、通信がTLS で暗号化されていなければ キーは平文で流れるため、HTTPS の利用は大前提です。

API キーと OAuth トークンの違い

API キーは「このリクエストはどのアプリケーションから来たか」を示す識別子であり、 通常は固定の文字列です。一方、OAuth のアクセストークンは 「どのユーザーが、どのスコープ (権限範囲) で、いつまで有効な認可を与えたか」を 表現する動的なトークンです。API キーが漏洩すると、そのキーに紐づくすべての操作が 無制限に実行される危険がありますが、OAuth トークンはスコープの限定と有効期限により 被害範囲を局所化できます。実務上は、公開 API の利用量制限には API キー、 ユーザーデータへのアクセスには OAuth トークンという使い分けが一般的です。

キー漏洩事故の実態

API キーの漏洩は、開発現場で最も頻繁に起きるセキュリティインシデントの 1 つです。 GitHub の公開リポジトリに AWS のアクセスキーをコミットしてしまい、数分以内に 自動スキャンボットに検出されて暗号通貨マイニングに悪用される事例は後を絶ちません。 2023 年には、ある企業が Slack のメッセージ内に API キーを貼り付けたことが原因で 大規模なデータ漏洩に 発展しました。AWS は GitHub 上の漏洩キーを自動検出して無効化する仕組みを導入していますが、 検出までのわずかな時間差で被害が発生するケースもあります。スタートアップのセキュリティチェックリストでも、 キー管理は最優先項目として挙げられています。

シークレット管理のベストプラクティス

API キーをソースコードに直接書き込む (ハードコード) のは最も危険なアンチパターンです。 代わりに、環境変数 (.env ファイル) でキーを管理し、.gitignore で Git の追跡対象から除外するのが最低限の対策です。 より堅牢な運用では、HashiCorp Vault や AWS Secrets Manager のような シークレット管理サービスを利用します。これらのサービスは、キーの保存時暗号化、 アクセスログの記録、自動ローテーションといった機能を提供し、 キーのライフサイクル全体を安全に管理できます。鍵管理の 基本原則として、キーにアクセスできる人間とシステムを最小権限に 絞ることが重要です。

シークレット管理の実践的な手法は、API セキュリティの実践書 (Amazon)でも体系的に解説されています。

ローテーションの重要性

API キーは定期的に新しいものに差し替える (ローテーション) べきです。 キーが漏洩していても気づかないケースは多く、定期ローテーションは 「気づかない漏洩」の被害期間を限定する保険として機能します。 AWS や Google Cloud では 90 日ごとのローテーションが推奨されており、 自動ローテーション機能も提供されています。ローテーション時は、旧キーと新キーの 両方が一定期間有効な「グレースピリオド」を設けることで、サービスの中断を防ぎます。API キー管理の詳細ガイドも 参考にしてください。

よくある誤解

「API キーがあればセキュリティは万全」という誤解は根強いですが、 API キーは単なる識別子であり、それだけでは十分な保護にはなりません。 API キーに加えて、IP アドレス制限、レート制限、 リファラーチェックなどを組み合わせた多層防御が 不可欠です。また、フロントエンドの JavaScript に API キーを埋め込むと、 ブラウザの開発者ツールから誰でも閲覧できてしまうため、 サーバーサイドでのみキーを扱う設計が原則です。

相关术语

这篇文章对您有帮助吗?

XHatena