APIキーはパスワードではない。漏えい時に止めるもの

APIキーは、APIを使ってよい相手かどうかを窓口側が見分けるための利用者証や受付番号のような情報です。

Tatoediaの読者モブ
読者さん疑問

APIキーって、つまりパスワード?

Tatoediaの案内役
案内役答え

近い役割はあるけど、同じものとして扱うと危ないよ。利用者や契約を見分ける手がかりで、権限や通信の安全性は別に考えるんだ。

パスワードとは役目が違う

APIキーは、APIという窓口を使う前に受付へ見せる利用者証のようなものです。受付は番号を見て「この利用者からの依頼だな」と判断し、その結果、使った量を記録したり、上限をかけたり、不正な使い方を見つけたりできます。天気、地図、決済といった外部サービスの API を自社のサービスにつなぐとき、ノーコードの連携ツールや社内の自動化で API を呼び出すときに、ほぼ必ず発行を求められます。

APIキーは、どの利用者、どの契約からの呼び出しかを見分けるための手がかりです。パスワードに近い扱いが必要なのは確かですが、同じものではありません。利用者証を持っていることは、「この契約の利用者の誰か」であることを示しても、持っている人が本人だと確かめたことにはならない。細かな権限の制御や通信の安全は、別の仕組みと組み合わせて考えます。

漏れたら止めて作り直す

利用者証が他人の手に渡れば、その人はあなたの契約で窓口を使えます。使った分の料金も、あなたに請求されるかもしれません。

だから APIキーは、公開しているコードの置き場所(リポジトリ)や、誰でも見られるブラウザ側の画面にそのまま書かないのが鉄則です。サーバー側の設定、たとえば環境変数に置いておきます。

それでも漏れることはあります。漏れたと分かったときに、すぐ無効にして新しいキーを発行できるよう、手順を先に用意しておきましょう。誰がキーを管理していて、どこで使われているかが分からないと、止めた瞬間に何が止まるかも分かりません。

渡す範囲は最初から絞る

使える機能や、呼び出してよい接続元を絞れるサービスなら、必要最小限にしておきます。読み取りしかしない連携に、書き込みの権限まで付いたキーを渡す必要はありません。漏れたときの被害は、キーが持っている権限の広さで決まります。

そのうえで、APIキーだけで守りが十分かも確かめてください。扱うデータが重要なら、提供元が用意している別の認証や署名の仕組みも合わせて使います。