APIレイテンシーにおいて重要なセキュリティチェックは?
直接の回答
セキュリティチェックは、リクエスト経路に追加の作業(たとえば、完全性(integrity)検証、認証(authentication)、認可(authorization)、安全なフェイルオーバー)を導入するため、APIレイテンシーに影響し得ます。ライブの市場データを前提にせずにレイテンシーを考えたい場合は、セキュリティ設計で安定している部分と、環境で変動する部分(ネットワーク距離、プロバイダーの挙動、リトライのパターン)を分けて考えてください。
APIリクエストにおいて、観測されるレイテンシーには通常、次が含まれます:エンドポイントに到達するまでの時間、暗号学的または完全性(integrity)チェックに費やす時間、権限判断に費やす時間、キューで待機する時間、そしてチェックが失敗したときのリトライやタイムアウトによって生じる遅延。
仕組みと定義
APIレイテンシーとは、APIリクエストを送信してから、対応するレスポンス(または失敗)を受け取るまでの経過時間です。**「セキュリティチェック」**とは、次を確認する手順です:(1)クライアントが主張する相手であること、(2)リクエストが許可されていること、(3)関与するソフトウェアとデータが真正で、かつ損なわれていないこと。
レイテンシーに影響し得る代表的なセキュリティチェックには、次のようなものがあります:
-
真正なダウンロードと完全性(integrity) クライアントがバイナリ、設定パッケージ、または証明書を取得する場合、クライアントは、それらを使用する前に署名やハッシュを検証することがあります。この検証は通常、安定したローカル処理ですが、コールドスタート、デプロイ、再起動の際には数秒の追加要因になり得ます。すると、システムが再初期化を必要とする場合に、間接的に「リクエストの見かけのレイテンシー」を増やします。
-
資格情報(credentials)と認証(authentication) リクエストに資格情報(たとえばトークンや署名付きリクエスト)が含まれる場合、サーバーはそれらを検証しなければなりません。検証には暗号学的チェックやキーの参照(lookup)が含まれることがあります。その処理時間は、リクエスト—レスポンス経路の一部になります。
-
権限(permissions)と認可(authorization) 認証が成功していても、認可は、呼び出し元が要求された操作を実行できることを保証します。権限チェックにはポリシー評価が関わることがあります。ポリシーが複雑であったり、追加の参照(lookups)に依存したりする場合、認可は測定可能な時間を追加し得ます。
-
更新(updates)と安全なキー/証明書ローテーション キーのローテーションや設定更新はセキュリティ上の必須要件ですが、同時に一時的な不一致(mismatch)のウィンドウを生み出すこともあります。ローテーション中、クライアントはサーバーがもはや認識しない資格情報(またはその逆)を提示することがあります。その結果は、多くの場合、リトライ、バックオフ、またはフェイルオーバーによって、より遅い挙動になります。
-
バックアップと復旧(recovery)経路 レジリエンス機能(たとえばバックアップ用エンドポイント、キャッシュされたポリシー、復旧手順)は、障害の影響を減らせます。しかし、フォールバック自体がレイテンシーを変えることがあります。たとえば、タイムアウト後にリクエストが再ルーティングされると、エンドツーエンド時間が増えます。
証拠または例(明示的な前提つき)
リクエストを送信し、最大でタイムアウトまで待つシステムを考えます。次の安定したセキュリティ設計の選択肢を仮定してください:
- 認証検証は、サーバー側の作業として Ta ミリ秒追加される。
- 認可ポリシー評価は Tp ミリ秒追加される。
- 失敗したチェックは、固定のバックオフ B の後に、最大 N 回までリトライを引き起こす。
すべてのチェックが最初の試行で成功するなら、単純化したレイテンシーモデルは: L ≈ NetworkRoundTrip + Ta + Tp + queue_wait
認証が失敗し、システムがリトライする場合、レイテンシーは: L_retry ≈ NetworkRoundTrip + (Ta_fail + Tp_fail) + (N−1)·(B + NetworkRoundTrip)
重要な素材(material)の制約:「Ta」 と 「Tp」 の各コンポーネントは、定数である保証はありません。キーサイズ、ポリシーの複雑さ、キャッシュヒット率、プロバイダーの負荷によって変わり得ます。さらに、観測される L は、タイムアウト設定とリトライ設定に依存します。これにより、速い失敗が遅い結果に変わることがあります。
2つ目の例は、真正なダウンロードに対する完全性(integrity)チェックです。サービスが再起動し、リクエストを提供できるようになる前にダウンロード済みパッケージを検証する必要がある場合、そのウィンドウ中のリクエストレイテンシーは増加します。これは、各リクエストが遅くなるからではなく、サービスがまだ準備できていないためです。
制限とリスク(失敗モードを含む)
セキュリティチェックとレイテンシーを結びつける素材(material)な失敗モードには、次が含まれます:
- スロー・フェイル増幅(Slow-fail amplification): 小さなセキュリティ失敗(誤ったトークン、期限切れのキー、誤ったスコープの権限)がリトライを引き起こし、レイテンシーが大幅に悪化し得ます。
- キャッシュとポリシーのばらつき: 認可の判断は、負荷の状況に応じて挙動が変わり得るキャッシュやポリシーソースに依存する場合があります。
- ローテーションの不一致ウィンドウ: 資格情報や証明書の更新は、一時的に互換性を壊し、エラー率とレイテンシーを増やします。
- 完全性(integrity)検証の遅延: 真正なダウンロードのチェックは、デプロイや再起動後の可用性を遅らせ得ます。
不確実性と検証の限界:
- ここではリアルタイムの市場データは前提にしていないため、レイテンシーの仕組みに関する概念的なガイダンスです。
- 結果は、ネットワーク状況、プロバイダーの実装詳細、コスト、実行環境、管轄(jurisdiction)によって変わります。
- セキュリティ設定とレイテンシーの過去の関係は、将来のパフォーマンスを保証しません。