設計に API 優先アプローチ に準拠するワークロードが増え、インターネット経由の Web アプリケーションに対する脅威の数と重大度が高まっているため、API を保護するためのセキュリティ戦略を用意することが重要です。 API セキュリティの 1 つのステップは、ゲートウェイ ルーティング パターン を使用してネットワーク トラフィックを保護することです。 ゲートウェイを使用して、柔軟なルーティング規則をサポートするだけでなく、トラフィック ソースの場所とトラフィック品質を制限します。 この記事では、Azure Application Gateway と Azure API Management を使用して API アクセスを保護する方法について説明します。
Architecture
この記事では、App Service Environment、Azure SQL Managed Instance、Azure Kubernetes Services など、アプリケーションの基盤となるプラットフォームについては取り上げません。 図のこれらの部分では、幅広いソリューションとして実行できることを示しているだけです。 この記事では特に、網掛けされた領域である、API Management と Application Gateway について説明します。
このアーキテクチャの Visio ファイルをダウンロードします。
ワークフロー
Application Gateway は、サブネットのネットワーク セキュリティ グループ (NSG) によって許可されている HTTP 要求を受け取ります。
その後、Application Gateway の Web Application Firewall (WAF) が、Geomatch カスタム ルール を含む WAF ルール に対して要求を確認します。 要求が有効な場合、要求は続行されます。
Application Gateway は、要求を適切な バックエンド プール に送信する URL プロキシ メカニズムを設定します。 たとえば、API 呼び出しの URL 形式に応じて、次のようになります:
api.<some-domain>/external/*
のような形式の URL は、バックエンドに到達して、要求された API と対話できます。api.<some-domain>/*
として書式設定された呼び出しは、ターゲットのないバックエンド プールであるデッド エンド (シンクプール) に移動します。
また、Application Gateway は、同じ Azure 仮想ネットワーク内のリソースからの内部呼び出しを、
api.<some-domain>/internal/*
下で受け入れてプロキシします。最後に、API Management レベルで、API は次のパターンの呼び出しを受け入れるように設定されます。
api.<some-domain>/external/*
api.<some-domain>/internal/*
このシナリオの場合、API Management では、パブリックとプライベートの 2 種類の IP アドレスが使用されます。 パブリック IP アドレスは、ポート 3443 での内部通信、および外部仮想ネットワーク構成のランタイム API トラフィックに使用されます。 API Management がパブリック インターネットに接続しているバックエンドに要求を送信すると、要求の配信元としてパブリック IP アドレスが表示されます。 詳細については、「VNet 内の API Management サービスの IP アドレス」を参照してください。
Application Gateway レベルのルーティング規則により、
portal.<some-domain>/*
下のユーザーが開発者ポータルに適切にリダイレクトされるため、開発者は内部環境と外部環境の両方から API とその構成を管理できます。
コンポーネント
Azure Virtual Network を使用すると、さまざまな種類の Azure リソースが相互、インターネット、およびオンプレミス ネットワークとプライベートに通信できます。 このアーキテクチャでは、Application Gateway は、パブリック インターネット トラフィックをこのプライベート ネットワークにトンネリングする役割を担います。
Azure Application Gateway は、Web アプリケーションへのトラフィックを管理する Web トラフィック ロード バランサーです。 この種類のルーティングは、アプリケーション レイヤー (OSI レイヤー 7) の負荷分散と呼ばれます。 このアーキテクチャでは、ゲートウェイはルーティングに使用されるだけでなく、Web ベースの一般的な攻撃ベクトルから保護する Web Application Firewall (WAF) をホストします。
Azure API Management は、すべての環境にわたる API 用のハイブリッドマルチクラウド管理プラットフォームです。 API Management では、既存のバックエンド サービス用に一貫性のある最新の API ゲートウェイが作成されます。 このアーキテクチャでは、API Management は完全にプライベートなモードで使用され、API コードとホストから横断的な懸念事項を取り除きます。
推奨事項
このソリューションでは、ソリューション全体の実装と、API Management 仮想ネットワークの内部および外部からの API アクセスのテストに重点が置かれています。 API Management 仮想ネットワークの統合プロセスの詳細については、「内部 VNET 内の API Management と Application Gateway の統合」を参照してください。
バックエンドのプライベート リソースと通信するには、Application Gateway と API Management がリソースと同じ仮想ネットワーク内またはピアリングされた仮想ネットワーク内にある必要があります。
プライベートの内部デプロイ モデルを使用すると、API Management は既存の仮想ネットワークに接続して、そのネットワーク コンテキスト内部から到達できるようになります。 この機能を有効にするには、Developer または Premium の API Management サービス レベルをデプロイします。
Azure Key Vault で App Gateway 証明書を管理します。
サービスとの対話を個人用に設定するには、CNAME エントリを使用できます。
代替
他のサービスを使用して、同様のレベルのファイアウォールと Web アプリケーション ファイアウォール (WAF) 保護を提供できます:
- Azure Front Door
- Azure Firewall
- Barracuda などのパートナー ソリューション
- Azure Marketplace で入手できるその他のソリューション
考慮事項
信頼性
Azure Application Gateway は、インスタンス数に関係なく、常に高可用性の方法でデプロイされます。 ゾーンの誤動作の影響を回避するために、複数の可用性ゾーンにまたがるよう Application Gateway を構成できます。 詳細については、「自動スケーリングと高可用性」を参照してください。
API Management サービス コンポーネントのゾーン冗長性を有効にして、回復性と高可用性を実現します。 ゾーン冗長では、物理的に分離されたゾーン内にある複数のデータセンター間で API Management ゲートウェイとコントロール プレーンをレプリケートすることで、ゾーン障害に対する回復性を持たせています。 可用性ゾーン をサポート するには、API Management Premium レベルが必要です。
API Management では、複数リージョンのデプロイもサポートされていて、1 つのリージョンがオフラインになった場合に可用性を向上させることができます。 詳細については、「マルチリージョン デプロイ」 を参照してください。 このトポロジでは、Application Gateway はリージョン サービスであるため、リージョンごとに 1 つの Application Gateway を使用することも重要です。
Security
Application Gateway セキュリティの詳細については、Application Gateway の Azure セキュリティ ベースラインに関するページを参照してください。
API Management セキュリティの詳細については、API Management の Azure セキュリティ ベースラインに関するページを参照してください。
Azure DDoS Protection では、アプリケーションの設計に関するベスト プラクティスと組み合わせることにより、DDoS 攻撃からの保護を向上させるための強化された DDoS 軽減機能が提供されます。 すべての境界仮想ネットワークで Azure DDOS Protection を有効にする必要があります。
コストの最適化
このアーキテクチャのコストは、次のような構成の側面によって異なります。
- サービス階層
- スケーラビリティ。つまり、特定の需要をサポートするためにサービスによって動的に割り当てられるインスタンスの数
- このアーキテクチャが継続的に実行されるのか、または月に数時間だけ実行されるのか
これらの側面を評価したら、Azure 料金計算ツールにアクセスして価格を見積もります。
パフォーマンス効率
Application Gateway は、このアーキテクチャのエントリ ポイントであり、WAF 機能では要求分析ごとに追加の処理機能が必要になります。 Application Gateway の計算能力をその場で拡張できるようにするには、自動スケールを有効にすることが重要です。 詳細については、「自動スケールを指定する」を参照してください。 Application Gateway の サブネットのサイズ に関する製品ドキュメントの推奨事項に従います。 これにより、完全なスケールアウトをサポートするのに十分な大きさのサブネットが確保されます。
同時実行性が高いシナリオをサポートするには、API Management で自動スケールを有効にします。 自動スケーリングを使うと、受信する要求の数の増加に応じて、API Management の処理能力が増強されます。 詳細については、「Azure API Management インスタンスを自動的にスケーリングする」を参照してください。
このシナリオのデプロイ
このシナリオは、内部 API Management と Web アプリを使用した Application Gateway のAzure クイック スタート ギャラリーの公開で示されています。
次のステップ
適切な Web API 設計 ガイドラインに従って API を設計 し、適切な Web API 実装 プラクティスを使用して実装します。