☁️

Azure Front Door(CDN)とAzure Storage Accountのデザインパターン3選

2024/02/18に公開

■ はじめに

Azure上で静的コンテンツの配信を目的としたアーキテクチャについてのデザインパターンと注意点を整理しました。

■ Azureサービス紹介

1. Azure Front Door

コンテンツ配信ネットワーク(CDN)として、グローバルなアプリケーションとAPIの作成、コンテンツとファイルの配信を提供するAzureサービスです。Azure Front Door はCDNのメリットである可用性の向上、待機時間の短縮、スケールの向上を役割を担当します。また、Azure WAFやAzure DDoS Protectionと組み合わせることにより、ボット攻撃やDDoS保護などのセキュリティ対策にも利用されます。

2. Azure Application Gateway

L7の負荷分散装置です。Web トラフィックのみ(HTTP、HTTPS、WebSocket、HTTP/2)を対象として、TLS終端、Cookieベースのセッションアフィニティ、ラウンドロビンによるトラフィックの負荷分散を提供します。

3. Azure Storage Account

一般的なストレージサービスです。以下の4つの機能を提供します。

機能名 用途
Blob Storage テキストやバイナリデータなどを含む任意の非構造化データを保管するストレージシステムです。最もよく利用される機能です。
File Storage クラウド内外の複数のマシンから同時にアクセスできる共有ファイルシステムです。よく利用される機能です。
Queue Storage アプリケーション間で非同期メッセージを送受信するメッセージキューです。※Service Busを採用したほうがセキュリティやサポートされるコンポーネントも多いため、幸せになれるかも知れません笑
Table Storage アプリケーションの状態追跡や、非常に大量のデータセットに対する高速クエリを実行できるNoSQLデータベースです。 Azure VMのシステム領域に関するログも保管されます。 ※NoSQLとして利用する場合は、Azure Cosmos DBを採用したほうが、幸せになれるかも知れません笑

Azureネットワークソリューションのサービスとして、プライベートネットワーク経由でAzureのPaaSサービス(例:Azure Storage、SQL Databaseなど)にアクセスできます。Private Linkを利用する場合、送信元インスタンスはPrivate Endpoint(専用のサブネットが必要)を中継して、他のサービスと接続します。

5. Azure Service Tags

特定のAzureサービスに関連するIPアドレスのグループを識別するための名前です。ネットワークセキュリティグループ(NSG)やルートテーブルに設定するとき、IPアドレス(範囲)を個別に管理するのではなく、Azureによって各リソースに割り当てられたサービスタグを指定することでネットワークトラフィックの管理を簡素化することができます。Azureが管理するグローバルIPアドレスは、不定期に変更されるためサービスタグを利用することで手動でIPアドレスを追跡および更新する必要がなくなります。

■ デザインパターン

1. Azure Front Door + Azure Storage Account + パブリック構成

Azure Front Doorのフロントエンドポイントを経由して、配信元のエンドポイントにパブリックアクセスします。

この構成には1つ課題があります。Azure Front DoorとAzure Storage Accountの間のトラフィックはパブリックインターネットを経由するため、ユーザーは配信元(Azure Storage Account)の外部エンドポイントに直接アクセスすることが可能です。CDNを介さないため、キャッシュ機能やコンテンツの圧縮を利用できず、BLOBコンテンツは1秒あたり最大500個のリクエストの帯域制限があるため、大規模システムではパフォーマンスが低下する恐れがあります。また、Azure Front Doorのロードバランサ機能を使わないため可用性も低下します。

cf. BLOB ごとの帯域幅と操作

2. Azure Front Door + Azure Storage Account + ネットワーク制限

「1. Azure Front Door + Azure Storage Account + パブリック構成」の問題点を回避するため、Azure Front Doorが配信元へ通信を行う際に使用されるIPv4アドレスをAzure Storage Accountの「ファイアウォールと仮想ネットワーク」に登録する対策方法があります。

ただし、このパターンは2つの課題があります。

課題1. サービスタグのIPアドレス空間は変更される

Front Doorに限らず、全てのサービスタグに割り当てられたIPアドレスは更新により変更されます。そのため、リリース後に静的コンテンツへアクセスできなくなる恐れがあります。致命的すぎますね。

Front DoorのIPアドレス空間は定期的に変更されます。 IPアドレスをハードコーディングする代わりに、AzureFrontDoor.Backendサービスタグを使用してください。

cf. IP アドレスのフィルター処理

課題2. セキュリティ問題

サービスタグを指定する場合やIPアドレスを指定する場合でも同じことになりますが、他のAzureを利用するベンダーも同様のネットワーク情報を使用しています。IPアドレスによるフィルタ処理だけでは、セキュリティ保護としては不十分になります。理想としては、そのシステムで作成したAzure Front Doorから送信されたことを保証するように配信元を特定できればいいのですが、現在 Azure Storage AccountにはAzure Front Doorの要求ヘッダーを確認して、アクセス制御する機能はありません。

その対策として、Azure Application Gateway v2(WAFポリシー)をAzure Front DoorとAzure Storage Accountの間に配置することで要求ヘッダーの確認を行います。Azure Application Gatewayは高機能なロードバランサということもあり、コストがかかります。導入する際は検討しましょう。

執筆時点(2024年2月)では、東日本リージョンのみで静的コンテンツの配信構成を設計する場合、特別な理由があってもまずはこのデザインパターンを採用する思考をしましょう!

Azure Private Linkを利用することで、Azure Front Doorは仮想ネットワーク内のAzure Private Link経由でAzure Storage Accountと通信します。仮想ネットワーク内はAzureのバックボーンネットワークを経由するため、誰も攻撃を仕掛けることはできないセキュリティ上のメリットがあります。導入コストもAzure Private Endpoints 1つあたり、2,000円ぐらいなので低コストで実装できます。

cf. Azure Front Door Premium で Private Link を使用して配信元を保護する

Discussion