次の方法で共有


Azure API Management ランディング ゾーンのアーキテクチャ

Azure API Management
Azure Application Gateway
Azure Functions
.NET

API は、内部システム内と外部チャネルの両方で、組織とその顧客がサービスにアクセスする方法にますます不可欠になっています。 内部的には、API は基幹業務 (LoB) アプリケーション、独自のソリューション、およびパートナー統合へのアクセスを容易にします。 外部的には、API の収益化を通じて生産性を向上させ、収益を生み出すことに重点を置く組織が増えています。 この傾向を考えると、Azure API Managementは、内部および外部の両方の利害関係者に対する API の標準化されたガバナンス、公開、および監視の基本要素として機能します。

Azure Application Gateway API のセキュリティ チェックポイントとして機能します。 ユーザーがインターネット経由で直接接続できるようにする代わりに、すべてのトラフィックをアプリケーション ゲートウェイ経由でルーティングします。 このセットアップでは、API の保護に役立つ追加のアクセス制御が追加されます。 この方法では、1 つの API Management インスタンスを使用して、組織内の内部 API と組織外の外部 API の両方をサポートしながら、公開されている API をゲートウェイの背後でセキュリティで保護することができます。

このアーキテクチャは、AzureのCloud Adoption Frameworkのapi Management のAzureランディング ゾーンのガイダンスの基礎として機能します。

アーキテクチャ

この図は、API Management のセキュリティで保護されたベースライン アーキテクチャを示しています。

左上のキー アイコンは、Azure サブスクリプションを表します。 [パブリック IP アドレス] というラベルの付いたネットワーク インターフェイス アイコンは、Application Gateway というラベルが付いた 2 つの対向する矢印があるアイコンに右向きの矢印で接続します。 このゲートウェイは、Application Gateway サブネットというラベルの付いた四角形の領域内に配置されます。 Web Application Firewallポリシーのラベル付きの地球のアイコンがあるレンガの壁は、統合トラフィック検査を示すApplication Gatewayに接続されています。 Application Gateway サブネットの下には、Log Analytics ワークスペース、Application Insights、azure-api.net の 3 つのアイコンがあります。 Application Gateway から右向きの矢印を使用すると、API Management Premium というラベルの付いたクラウド アイコンが表示されます。これは、API Management サブネットというラベルが付いた別の四角形の領域内にあります。 プライベート エンドポイントは、プライベート エンドポイント サブネットというラベルの付いた 3 番目の四角形領域内にあります。 プライベート エンドポイントから下向きに伸びる矢印は、キー・ボールトというラベルが付いた円の中のキー アイコンにつながっています。 図全体の方向矢印は、トラフィックの流れとコンポーネント間の安全な接続を示します。

このアーキテクチャのVisio ファイルをダウンロードしてください。

このアーキテクチャでは、Azure ランディング ゾーン参照実装からポリシーが配置され、その構造が管理グループから下方に向かっていることを前提としています。

Workflow

  • パブリック IP アドレスは、外部トラフィックのエントリ ポイントとして機能するアプリケーション ゲートウェイに割り当てられます。 そのエンドポイントは、カスタム ドメインを介して API を公開します。

  • アプリケーション ゲートウェイは、独自のサブネットにデプロイされ、受信要求を検査およびフィルター処理するために、Web Application Firewall (WAF) ポリシーによって保護されます。

  • トラフィックは、アプリケーション ゲートウェイから別の API Management サブネットに存在する API Management (Premium) にルーティングされます。 API Management インスタンスは内部モードで構成されているため、直接パブリック アクセスは禁止されます。

  • プライベート エンドポイントは、仮想ネットワークにのみ公開されているバックエンド アプリケーション サーバーに API Management を安全に接続するために使用されます。 API Managementは、Azure Key Vaultなどの依存関係に定期的に接続します。 通常、このプライベート接続はすべて、専用プライベート エンドポイント サブネット内のエンドポイントで行われます。

  • Log Analytics ワークスペースと Application Insights は、ログ記録、監視、テレメトリ用に統合されています。

コンポーネント

  • API Management は、ハイブリッド環境とマルチクラウド環境間でサービスを管理できるマネージド サービスです。 内部ユーザーと外部ユーザーの両方による API の監視と使用に対する制御とセキュリティを提供します。 このアーキテクチャでは、API Management はバックエンド アーキテクチャを抽象化するためのファサードとして機能します。

  • Application Gateway は、レイヤー 7 のロード バランサーと WAF として機能するマネージド サービス です。 Application Gateway は内部 API Management インスタンスを保護します。これにより、内部モードと外部モードの両方を使用できます。 このアーキテクチャでは、API Management によって API がセキュリティで保護され、Application Gateway によって WAF などの補完的な機能が追加されます。

  • Private Domain Name System (DNS) ゾーン は、カスタム DNS ソリューションを実装することなく、仮想ネットワーク内のドメイン名を管理および解決できるAzure DNSの機能です。 プライベート DNS ゾーンは、 仮想ネットワーク リンクを介して 1 つ以上の仮想ネットワークにアラインできます。 このアーキテクチャでは、仮想ネットワーク内で適切な名前解決を確保するためにプライベート DNS ゾーンが必要です。

  • Application Insights は、開発者が異常を検出し、問題を診断し、使用パターンを理解するのに役立つ拡張可能なアプリケーション パフォーマンス管理サービスです。 Application Insights は、拡張可能なアプリケーション パフォーマンス管理とライブ Web アプリの監視を備えています。 .NET、Node.js、Java、Pythonなど、さまざまなプラットフォームがサポートされています。 Azure、オンプレミス、ハイブリッド環境、またはその他のパブリック クラウドでホストされているアプリをサポートします。 このアーキテクチャでは、Application Insights はデプロイされたアプリケーションの動作を監視します。

  • Log Analytics はクラウドベースのデータ分析ツールであり、Azure ポータル内から必要に応じて、Azure Monitor ログ内のデータに対してログ クエリを編集および実行できます。 開発者は、単純なクエリを実行してレコードを取得したり、高度な分析にLog Analyticsを使用して結果を視覚化したりできます。 このアーキテクチャでは、Log Analyticsは分析とレポートのためにすべてのプラットフォーム リソース ログを集計します。

  • Azure Key Vault は、シークレットを安全に格納してアクセスするクラウド サービスです。 これらのシークレットの範囲は、API キーとパスワードから、証明書と暗号化キーまでです。 このアーキテクチャでは、Key Vault Application Gateway が使用する Secure Sockets Layer (SSL) 証明書を格納します。

選択肢

API Management インスタンスが接続するバックエンド サービスでは、いくつかの代替手段を使用できます。

  • Azure App Service は、Web アプリを構築、デプロイ、スケーリングするフル マネージド HTTP ベースのサービスです。 .NET、.NET Core、Java、Ruby、Node.js、PHP、およびPythonがサポートされます。 アプリケーションは、Windowsまたは Linux ベースの環境で実行およびスケーリングできます。

  • Azure Kubernetes Service (AKS) は、フル マネージド クラスターを提供するマネージド Kubernetes オファリングです。 統合された継続的インテグレーションと継続的デリバリー (CI/CD) と、組み込みのガバナンスとセキュリティを実現します。

  • Azure Logic Apps は、自動化されたワークフローを作成して実行するクラウドベースのプラットフォームです。 詳細については、 参照アーキテクチャの例を参照してください。

  • Azure Container Apps は、サーバーレス プラットフォームでマイクロサービスとコンテナー化されたアプリケーションを実行できるフル マネージドのサーバーレス コンテナー サービスです。

マルチリージョンデプロイの場合は、Azure Front Door を使用して、ユーザーとアプリケーションの静的および動的な Web コンテンツとの間に高速で信頼性の高い安全なアクセスを提供することを検討してください。

Application Gateway で API を保護する方法のその他の例については、「 Application Gateway と API Management を使用した API の保護」を参照してください。

考慮事項

これらの考慮事項は、Azure Well-Architected Framework の柱を実装します。これは、ワークロードの品質を向上させるために使用できる一連の基本原則です。 詳細については、「 Well-Architected Framework」を参照してください。

[信頼性]

信頼性は、アプリケーションが顧客に対して行ったコミットメントを確実に満たすことができるのに役立ちます。 詳細については、「信頼性の設計レビュー チェックリスト」を参照してください。

  • 各リージョンの 2 つ以上の可用性ゾーンに分散された API Management の少なくとも 2 つの スケール ユニット をデプロイします。 容量メトリックを監視し、1 つの可用性ゾーン内のユニットが失われた場合でも操作を続行できるように、十分な容量ユニットをプロビジョニングします。

  • Premium レベルは可用性ゾーンとマルチリージョンデプロイをサポートしているため、Premium レベルを使用することをお勧めします。 この機能は、1 つのリージョンまたはゾーンがダウンした場合でも、サービスを引き続き実行できることを意味します。 これらの機能は、障害や災害時にアプリケーションを保護するのに役立ちます。

  • ディザスター リカバリーの場合は、システム割り当て ID ではなく、ユーザー割り当てマネージド ID を使用して API Management を設定します。 リソースを再デプロイまたは削除しても、ID とそのアクセス許可は維持されるため、アクセスをより簡単に復元できます。 Azure Pipelinesを使用してバックアップを自動化します。 信頼性を高めるために、複数のリージョンにサービスをデプロイする必要があるかどうかを判断します。

  • 仮想ネットワーク ピアリングは、リージョン内で強力なパフォーマンスを提供しますが、ネットワークのスケーラビリティの制限は 500 です。 さらにワークロードを接続する必要がある場合は、hub-spoke design または Azure Virtual WAN を使用します。

セキュリティ

セキュリティは、意図的な攻撃や貴重なデータとシステムの誤用に対する保証を提供します。 詳細については、セキュリティ設計レビューのチェックリストを参照してください。

  • API Management 検証ポリシーは、 OpenAPI スキーマに対する API 要求と応答を検証します。 これらの機能は WAF の代わりではありませんが、一部の脅威に対する追加の保護を提供できます。 検証ポリシーを追加するとパフォーマンスに影響する可能性があるため、パフォーマンス ロード テストを使用して API スループットへの影響を評価することをお勧めします。

  • API のMicrosoft Defender は、API Management で公開されている API の完全なライフ サイクル保護、検出、応答を提供します。 主な機能の 1 つは、機械学習ベースの検出とルールベースの検出を使用して、実行時の異常観察によって Open Web Application Security Project (OWASP) API Top 10 の脆弱性の悪用を検出することです。

  • API Management ワークスペースは、 API の整理と分離に役立ちます。 この方法を使用すると、アクセスして管理できるユーザーを簡単に制御できます。 各ワークスペースには独自のアクセス許可セットを設定できるため、アクセスを必要とするユーザーまたはチームのみに制限できます。 この分離により、偶発的な変更や不正アクセスのリスクが軽減され、より安全な API 環境がサポートされます。

  • API Management ポリシーでKey Vaultシークレットを名前付き値として使用 API Management ポリシーの機密情報を保護します。

  • 内部 API Management インスタンスの外部アクセスには Application Gateway を使用して、API Management インスタンスを保護し、WAF を使用して一般的な Web アプリケーションの悪用や脆弱性から保護し、ハイブリッド接続を有効にします。

  • ハイブリッド接続とセキュリティの強化をサポートするために、仮想ネットワークに API Management ゲートウェイをデプロイします。

  • 仮想ネットワーク ピアリングにより、リージョンのパフォーマンスが向上し、仮想ネットワーク間のプライベート通信が可能になります。

  • WAF を使用する場合は、着信トラフィックの悪意のある動作を検査するレイヤーを導入します。 この保護は、SQL インジェクションやクロスサイト スクリプティングなどの一般的な脅威をブロックするのに役立ちます。 Application Gateway と分散型サービス拒否 (DDoS) 保護は、過剰なトラフィックや接続の洪水による API Management インスタンスの過負荷を防ぐのに役立ちます。 詳細については、「 Application Gateway と API Management を使用した API の保護」を参照してください。

  • Azure Functionsのプライベート エンドポイントを使用すると、仮想ネットワーク内のプライベート IP アドレス経由で関数アプリに安全に接続できます。 この設定により、関数がパブリック インターネットに公開されるのを防ぎ、不正アクセスのリスクが軽減されます。 このアーキテクチャでは、プライベート エンドポイントにより、ネットワーク内の信頼されたリソースのみがAzure Functionsにアクセスできるようになります。

リバース プロキシの背後での API Management ポリシーの処理

Web Application Firewall (WAF) を使用する Application Gateway は API 管理の前に配置され、内部 API Management インスタンスに到達する前にすべての API トラフィックを処理します。 この目的は、クライアント要求を検査、フィルター処理、およびルーティングするエッジ レベルのセキュリティ レイヤーを追加することです。一方、API Management では API ガバナンス、変換、バックエンド統合に重点を置いています。

ただし、この階層化トポロジには、特定の API Management ポリシーに対する動作への影響が伴います。TLS の終了、ルーティングの決定、またはヘッダー/接続変換が Application Gateway の境界で発生した場合、API Management ポリシー エンジンには、予想される元のクライアント要求の詳細が表示されない場合があります。 その場合、ポリシーの動作が API Management が直接公開される場合とは異なる場合があります。 例えば次が挙げられます。

  • クライアント IP ベースのフィルター処理: ソース IP アドレスに基づいてトラフィックを許可または拒否できる ip-filter などのポリシーでは、実際のクライアント アドレスではなく、Application Gateway のプライベート IP がソースとして表示されるようになりました。 その結果、適切なトラフィックがフィルター処理されるように、 ip-filter ポリシーを慎重に計画し、管理する必要があります。

  • ポリシーの順序とコンテキストの前提条件: API Management ポリシーは、特定のヘッダー、ホスト名、または要求特性を持つ要求に対して実行することが想定されます。 Application Gateway がヘッダー (ルーティング、カスタム ドメイン、または SSL オフロード用) を書き換える場合、ダウンストリーム API Management ポリシーが依存するコンテキストが、これらのポリシーで定義されているものと一致しない可能性があります。 これにより、API Management 内のルーティング ポリシー、検証、または変換ロジックがクライアントの意図と一致しなくなる可能性があります。

Application Gateway と API Management は 2 つの強制レイヤーになり、API Management の受信要求のビューは、元のクライアント コンテキストから 1 ステップ削除されます。 API Management では、生のクライアント属性に依存するポリシーを使用することは避けなければなりません。これらの属性がエンドツーエンドで保持されない限り、HTTP 要求で利用可能なデータに基づいてカスタム ポリシーを作成する必要がある場合があります。

ホスト ヘッダーなどのデータを保持する方法に関するその他の推奨事項については、「 リバース プロキシとそのバックエンド Web アプリケーションの間で元の HTTP ホスト名を保持する」を参照してください。

コストの最適化

コストの最適化では、不要な経費を削減し、運用効率を向上させる方法に重点を置いています。 詳細については、「コスト最適化の設計レビュー チェックリスト」を参照してください。

  • このデプロイでは、 Premium プラン を使用して、可用性ゾーンと仮想ネットワークの機能をサポートします。 専用インスタンスが不要な場合は、ネットワーク アクセスと可用性ゾーンの両方をサポートする Flex Consumption を使用することもできます。 このデプロイの 料金計算ツール を確認します。

  • 概念実証やプロトタイプの場合は、Developer や Standard などの他の API Management レベルを使用することをお勧めします。

オペレーショナル エクセレンス

オペレーショナル エクセレンスは、アプリケーションをデプロイし、それを運用環境で実行し続ける運用プロセスをカバーします。 詳細については、「 オペレーショナル エクセレンスの設計レビュー チェックリスト」を参照してください。

  • API Management の構成をAzure Resource Manager テンプレートとして表し、コードとしてのインフラストラクチャ (IaC) アプローチを採用します。

  • CI/CD プロセスを使用して、API Management の構成を管理、バージョン管理、更新します。

  • API Management インスタンスの状態を検証するのに役立つカスタム正常性プローブを作成します。 URL /status-0123456789abcdef を使用して、アプリケーション ゲートウェイで API Management サービスの共通の正常性エンドポイントを作成します。

  • キー コンテナーで更新された証明書は API Management で自動的にローテーションされ、4 時間以内の変更が反映されます。

  • Azure DevOpsやGitHubなどの DevOps ツールを使用する場合、クラウドでホストされるエージェントまたはランナーはパブリック インターネット経由で動作します。 このアーキテクチャの API Management は内部ネットワークに設定されているため、仮想ネットワークにアクセスできる DevOps エージェントを使用する必要があります。 DevOps エージェントは、アーキテクチャ内の API に対するポリシーやその他の変更をデプロイするのに役立ちます。 これらの CI/CD テンプレート を使用してプロセスをパーツに分割し、開発チームが各 API の変更をデプロイできるようにします。 DevOps ランナーは、これらの個々のデプロイを処理するテンプレートを開始します。

このシナリオを展開します

このアーキテクチャは、GitHub で使用できます。 これには、必要なすべての IaC ファイルと、deployment 命令が含まれています。

貢献者

Microsoft では、この記事を保持しています。 次の共同作成者がこの記事を書きました。

主要著者:

パブリックでないLinkedIn プロファイルを表示するには、LinkedIn.

次のステップ