Skip to main content

APIゲートウェイセキュリティのベストプラクティス

著者

Kuria Macharia

feature api

2022年9月7日

0 分で読めます

マイクロサービスにおいて重要な役割を果たすAPIは、今日の開発環境に欠かせない要素です。最新のソフトウェアは多様なマイクロサービスで構成されることが多く、特定の機能が個々のAPIの範囲を超える場合があります。APIゲートウェイを利用すると、複数のサービスをまとめて単一のAPIのように動作させ、APIゲートウェイへの1回の呼び出しで、異なるマイクロサービスから複雑なレスポンスを返せます。たとえば、APIゲートウェイとGraphQLを使えば、定義済みの単一スキーマで異なるマイクロサービスの固有のデータフィールドをクエリし、統合された1つのレスポンスを取得できます。

APIゲートウェイとは?

APIゲートウェイは抽象化レイヤーで、通常、マイクロサービスとそれを利用するクライアントの間にある唯一のパブリックインターフェースとして機能します。バックエンドのマイクロサービスのプロキシとして、クライアント向けAPIエンドポイントをつなぎ、クライアントのリクエストを適切なマイクロサービスにルーティングし、レスポンスデータを集約してからリクエスト元のクライアントに送信します。フロントエンド開発者の作業を簡素化する、一貫性のある明確なアプリケーションプログラミングインターフェースを提供します。

APIゲートウェイには、ほかにも次のようなメリットがあります。

負荷分散— APIゲートウェイを設定し、クライアントからのリクエストを利用可能なサービスインスタンスに分散することで、負荷分散を実現できます。

往復リクエストの削減— ゲートウェイは、レイテンシの増加やパフォーマンスの低下につながる不要なクライアントリクエストを削減します。クライアントはゲートウェイに1回リクエストするだけで、ゲートウェイが複数のサービスにリクエストを転送し、レスポンスを集約できます。

利用状況の監視と分析の一元化— APIゲートウェイでは、監視・分析ツールを統合し、ユーザートラフィック、実行時間、エラーに関する貴重なデータを収集・分析できます。この情報は、アプリケーションのスケーリングやデバッグについて判断する際に欠かせません。

APIからバックエンドサービスにアクセスできるため、バックエンドサービスへの侵入や通信中のデータの傍受を狙う悪意ある攻撃者にとって、APIは格好の攻撃対象です。APIゲートウェイは、バックエンドのマイクロサービスエンドポイントとクライアントエンドポイントの間にセキュリティの境界を設けます。

この記事では、APIゲートウェイがもたらすセキュリティ上のメリットを確認し、APIゲートウェイを安全に保つための追加対策と、実践すべきベストプラクティスを紹介します。

APIゲートウェイがセキュリティを強化する仕組み

APIとしてサービスを提供する企業にとって、セキュリティは重要な課題です。APIゲートウェイは、パブリックに公開されたAPIエンドポイントを利用するシステムのセキュリティ態勢を、さまざまな方法で強化します。主な方法は次のとおりです。

ポリシーの適用

ポリシーとは、基盤となるサービスへのアクセスやAPIの動作を管理する際に従うべきルールです。ポリシーは、チェック対象のルールと、その結果に応じたアクションの2つで構成されます。ポリシーはAPIゲートウェイ内で適用されます。認証・認可やトラフィック管理など、さまざまなタスクのニーズに合わせてカスタマイズできます。たとえば、JSONのマーシャリングをはじめとするデータのシリアライズを、単一のエントリーポイントで標準化できます。

トラフィック過負荷の防止

APIゲートウェイでは、指定した時間内にAPIが呼び出される回数を制限できます。これにより、バックエンドのリクエスト処理能力を超えないようにできます。また、バックエンドのマイクロサービスに大量のトラフィックを送りつけるサービス拒否(DoS)攻撃からシステムを保護します。さらに、異なる認証情報を使った大量のリクエストを送信するブルートフォース攻撃や総当たり攻撃からAPIを守ります。

サーキットブレーカー

サーキットブレーカーは、バックエンドサービスへの接続を保護することで、セキュリティ態勢を強化します。連続した接続失敗が設定した回数に達したことを検知すると、一定時間、バックエンドへの接続を停止します。これにより、失敗が見込まれるリクエストでバックエンドが過負荷になるのを防ぎます。攻撃者によるAPI障害の連鎖を防ぐ、自動的な保護対策です。

バックエンドサービスとフロントエンドアプリケーションの分離

APIゲートウェイは、バックエンドの機密性の高いサービスとフロントエンドアプリケーションの直接的な接触をなくし、セキュリティを強化します。また、リクエストを処理するマイクロサービスについて、フロントエンドが把握できる情報を制限します。これにより、悪意あるコードをバックエンドデータベースに送り込むSQLインジェクション攻撃からシステムを保護できます。バックエンドについて把握できる情報を制限すると、SQLインジェクション攻撃の実行も困難になります。データの取得元であるデータベースに関する情報を攻撃者が持っていないためです。

APIゲートウェイセキュリティのベストプラクティス

APIゲートウェイであらゆるリクエストの基本的な入力検証を実施すると、インジェクション攻撃のリスクを軽減できます。不審な入力を含むリクエストをバックエンドサービスに届く前に破棄できます。

ゲートウェイは優れたセキュリティ機能を提供しますが、APIエンドポイントとマイクロサービスの安全性を保つには、積極的な対策も必要です。安全なAPIゲートウェイを構築するためのベストプラクティスを見ていきましょう。

HTTPSとリクエストの暗号化

APIゲートウェイのセキュリティを強化するには、まずクライアントとの通信にHTTPSを使用していることを確認しましょう。HTTPSは通信中のすべてのデータを暗号化する安全なプロトコルで、セキュリティを高めます。パブリックに公開されたWebサイトでは、現在の業界標準となっています。メールサービスや銀行口座、社内システムにリモートでログインするなど、実行時に機密データを送信する場合は、TLSプロトコルが特に重要です。また、TLS管理の作業をクライアントからクラウドサービスプロバイダーに移すのにも役立ちます。

APIリクエストの検証

クライアントから受信したAPIリクエストをバックエンドのマイクロサービスに転送する前に、APIゲートウェイで検証するよう設定しましょう。たとえば、リクエストパラメーターやヘッダーが空でないこと、ペイロードが許可されたJSONスキーマに従っていることを確認するよう設定できます。

検証に失敗した場合、APIゲートウェイはリクエストを破棄し、クライアントにエラーレスポンスを返します。これにより、サーバーに転送される不要なリクエストを減らし、インジェクション攻撃のリスクを軽減できます。

ロギングの設定

クライアントのアクセスやリクエスト実行に関する問題を解決できるよう、APIゲートウェイでロギングを有効にしましょう。APIゲートウェイで行うロギングには、実行ログとアクセスログの2種類があります。

実行ログには、リクエスト処理時にAPIゲートウェイが実行した各ステップの詳細が記録されます。記録されるデータには、実行トレース、検証ステップ、エラーが含まれます。アクセスログには、APIゲートウェイへの各アクセスの詳細が記録されます。リクエストごとに、誰がどのようにAPIゲートウェイにアクセスしたかを示すエントリーが作成されます。

レート制限の実装

APIゲートウェイでレート制限を実装すると、次のことが可能になります。

  • サービス拒否(DOS)攻撃の防止

  • 障害の連鎖による影響の抑制

  • リソース使用量の制限

APIゲートウェイでレート制限を実装すると、システム障害の原因となる悪意あるトラフィックや、正当なリクエストの過負荷からマイクロサービスを保護できます。スロットリングポリシーは、厳格なレート制限のデメリットを緩和するのに役立ちます。上限を超えたリクエストをキューに入れ、次のクォータで処理するためです。指定したリソースやすべてのリクエストに、レート制限やスロットリングのポリシーを適用できます。

Webアプリケーションファイアウォール(WAF)の有効化

Webアプリケーションファイアウォール(WAF)を使ってAPIゲートウェイを保護できます。WAFは、定義された条件とルールに基づいてAPIへのアクセスを制限します。クロスサイトスクリプティングやインジェクション攻撃など、一般的な脅威からAPIゲートウェイを守るのに役立ちます。

たとえば、指定したCIDRブロック、IPアドレス範囲、国からのリクエストについて、WAFでアクセスを許可または拒否できます。また、悪意あるスクリプトやSQLコードを含むリクエストを検出して破棄することもできます。WAFを導入すると、セキュリティ境界をクライアント側に近づけ、APIゲートウェイの不要な負荷を減らせます。

WAFはHTTPレベルで効果的なコンテンツフィルタリングを実施します。Log4jの脆弱性に起因する攻撃を防ぐ方法の1つとして、米国CISAも推奨しています。Snykが推奨するLog4Shellの修正に関するベストプラクティスの1つでもあります。

APIゲートウェイの用途別設定

攻撃対象領域を縮小し、APIエンドポイントが不要に公開されないよう、ユースケースごとにAPIゲートウェイを分けて作成しましょう。用途別にゲートウェイを設定すると、APIゲートウェイの障害やスロットリングが発生した際に、影響の拡大を抑えられます。

たとえば、1つのゲートウェイが攻撃を受けても、システム内のすべてのサービスが停止することはありません。攻撃対象領域が大幅に小さくなるため、システムのデバッグも容易になります。

APIゲートウェイを最大限に活用する

APIを保護するために最も重要なのは、APIゲートウェイを導入することです。

APIゲートウェイによってマイクロサービスアーキテクチャをパブリックAPIから分離し、その間にさまざまなセキュリティ境界を設けられます。レート制限、WAF、HTTPS、リクエスト検証などの対策は、SQLインジェクション、クロスサイトスクリプティング、サービス拒否攻撃といった一般的なAPI攻撃のリスクを軽減します。

HTTPS通信、リクエスト検証、ロギング、レート制限、WAF、用途別のAPIゲートウェイといったベストプラクティスを徹底することで、エンドポイントや通信中のデータに対する攻撃が成功するリスクを最小限に抑えられます。APIセキュリティの詳細はこちら。

CTFを始めよう

オンデマンドのバーチャル入門ワークショップで、CTFチャレンジの解き方を学びましょう。