クラウド・インフラセキュリティ

API (Application Programming Interface)

約 5 分で読めます

API とは

API (Application Programming Interface) とは、ソフトウェア同士がデータや機能をやり取りするための取り決め (インターフェース) です。レストランに例えると、客 (アプリケーション) がメニュー (API 仕様) を見て注文し、ウェイター (API) が厨房 (サーバー) に伝えて料理 (データ) を運んでくる仕組みに似ています。

スマートフォンの天気アプリが最新の気象データを表示できるのは、気象サービスの API を通じてデータを取得しているからです。現代の Web サービスは、裏側で数十から数百の API を組み合わせて動いています。

API の主な種類

REST API
現在最も普及している API 設計スタイル。HTTP メソッド (GET, POST, PUT, DELETE) を使い、URL でリソースを指定する。シンプルで理解しやすく、ほとんどの Web サービスが採用している。
GraphQL
Facebook が開発したクエリ言語。クライアントが必要なデータだけを指定して取得できるため、REST で起きがちな過剰取得 (over-fetching) を防げる。モバイルアプリなど帯域が限られる環境で有利。
WebSocket
サーバーとクライアント間で双方向のリアルタイム通信を実現する。チャットアプリ、株価のリアルタイム表示、オンラインゲームなど、即時性が求められる場面で使われる。
gRPC
Google が開発した高性能 RPC フレームワーク。Protocol Buffers によるバイナリシリアライゼーションで、REST より高速な通信が可能。マイクロサービス間の内部通信で多用される。

API の認証と認可

API を安全に利用するには、「誰がアクセスしているか」(認証) と「何を許可するか」(認可) の仕組みが不可欠です。

  • API キー: 最もシンプルな認証方式。リクエストヘッダーやクエリパラメータに固定の文字列を含める。手軽だが、キーが漏洩すると誰でもアクセスできてしまう。
  • OAuth 2.0: 「Google でログイン」のような第三者認証を実現する標準プロトコル。ユーザーのパスワードを直接共有せず、アクセストークンを介して権限を委譲する。
  • JWT (JSON Web Token): 認証情報をトークンに埋め込み、サーバー側でセッションを保持しなくても検証できる方式。ステートレスな API 設計と相性が良い。

API キーをソースコードにハードコードしたり、公開リポジトリにコミットしたりする事故は後を絶ちません。シークレット管理ツールを使い、環境変数や専用のシークレットストアで管理するのが鉄則です。

レート制限と API の保護

レート制限 (Rate Limiting) とは、一定時間内に受け付ける API リクエスト数に上限を設ける仕組みです。これがないと、悪意のあるユーザーが大量のリクエストを送りつけてサーバーをダウンさせる DDoS 攻撃が容易になります。

一般的なレート制限の実装パターンには以下があります。

  • 固定ウィンドウ: 1 分間に 100 リクエストまで、のように固定の時間枠で制限。実装が簡単だが、ウィンドウの境界でバーストが発生しうる。
  • スライディングウィンドウ: 直近 1 分間のリクエスト数を常に追跡。固定ウィンドウのバースト問題を解消する。
  • トークンバケット: 一定速度でトークンが補充され、リクエストごとにトークンを消費する。短時間のバーストを許容しつつ、長期的な平均レートを制御できる。

レート制限に達すると、サーバーは HTTP ステータスコード 429 (Too Many Requests) を返します。API を利用する側は、429 を受け取ったらリトライ間隔を空ける (エクスポネンシャルバックオフ) 実装が必要です。

API セキュリティの実践

API は現代の Web サービスの中核であり、攻撃者にとっても主要な標的です。OWASP API Security Top 10 では、認証の不備、オブジェクトレベルの認可不備、過剰なデータ公開などが上位に挙げられています。

  • 入力バリデーション: すべてのリクエストパラメータを検証し、SQL インジェクションXSS を防ぐ。
  • HTTPS の強制: API 通信は必ず TLS で暗号化する。平文の HTTP で API キーやトークンを送信すると、ネットワーク上で傍受される。
  • 最小権限の原則: API トークンには必要最小限の権限だけを付与する。読み取り専用の用途に書き込み権限を与えない。
  • ログと監視: API の呼び出しパターンを監視し、異常なアクセスを早期に検知する。

よくある誤解

API は開発者だけが関係するもの
API はスマートフォンアプリ、IoT デバイス、決済システムなど、日常生活のあらゆる場面で使われています。SNS にログインする、電子マネーで支払う、配車アプリを使うといった行為はすべて API を介しています。
API を公開しなければ安全
内部 API であっても、社内ネットワークに侵入された場合やサプライチェーン攻撃を受けた場合に悪用されるリスクがあります。内部 API にも認証・認可・暗号化を適用するゼロトラストの考え方が重要です。
REST API は古い技術で GraphQL に置き換わる
GraphQL は特定のユースケースで優れていますが、REST がすべての場面で劣っているわけではありません。シンプルな CRUD 操作やキャッシュの活用では REST の方が適しており、両者は共存しています。
共有する
B!

関連用語

関連記事