ロード・バランサ+ WAF、APIゲートウェイ、オブジェクト・ストレージおよびサービス・ゲートウェイを使用した、OCIでの静的コンテンツによるHA、セキュアなWebサイトの構築 (2026/05/18)
ロード・バランサ+ WAF、APIゲートウェイ、オブジェクト・ストレージおよびサービス・ゲートウェイを使用した、OCIでの静的コンテンツによるHA、セキュアなWebサイトの構築 (2026/05/18)
投稿者:Amit Chakraborty
組織は通常、高可用性とOWASP Top 10などの Web セキュリティのために、ロードバランサーと WAF の背後にある OCI に Web アプリケーションをデプロイします。

図1
ウェブアプリケーション(アプリ)は、下流のデータベースから追加データを取得することでコンテンツを動的に生成できますが、多くの場合、ユーザーエージェント(ユーザーのブラウザ)への応答として静的コンテンツも送信する必要があります。これらの静的コンテンツは、CSSページ、GIFファイル、あるいは企業のウェブサイト向けの製品情報、ソリューションプレイブック、財務報告書など、単純なものから複雑なものまで多岐にわたります。

図2
最初に考えられるアプローチとしては、静的コンテンツをコンピューティングインスタンス、例えばブロックボリュームに配置するという方法があります(厳密には、ブロックボリュームはコンピューティングインスタンスに「属する」のではなく、インスタンスに「接続される」ものですが、要点は理解していただけるでしょう)。この方法は機能しますが、スケーラビリティの問題など、明らかなメンテナンス上の課題が伴います。別のアプローチとしては、これらの情報をデータベースに格納するという方法があります。これはもっともらしい方法ですが、やりすぎでしょう。
合理的なアプローチとしては、これらの静的コンテンツをOCIオブジェクトストレージに配置することです。OCIのネイティブサービスであるため、可用性が高く、信頼性が高く、コスト効率に優れたストレージサービスです。

図3
アーキテクチャ
アーキテクチャ構成要素は以下のとおりです。
- ロードバランサー + WAF: 図3のWebアプリケーションのドメイン名(www.acmecorp.com)は、DNSを使用してロードバランサー(LB)のIPアドレスに解決されます。WAFで定義されたさまざまなルールにより、受信トラフィックを精査し、悪意のあるトラフィックをブロックできます。ロードバランサーは、インターネットからアクセスできるように、パブリックサブネットに配置されます。
- オブジェクトストレージ:静的コンテンツはオブジェクトストレージに格納されます。バケットの可視性は非公開とし、オブジェクトおよびバケットへのアクセスにはPAR(アクセス権限)を使用する必要があります。また、オブジェクトへのアクセスはOCI(組織文化インターフェース)からのみに制限し、パブリックアクセスはブロックします。
- APIゲートウェイ:ロードバランサーは、受信トラフィックをルーティングするためにバックエンドのIPアドレスを必要とします。しかし、PARはURLであるため、ロードバランサーで直接使用することはできません。解決策としては、 バックエンドのドメイン名をサポートするAPIゲートウェイにリクエストを転送し、中間者として機能させることです。つまり、APIゲートウェイのIPアドレスがロードバランサーのバックエンドで使用されます。APIゲートウェイはプライベートサブネットに配置され、ロードバランサーのVCN内からのみアクセスできるようにします。
- サービスゲートウェイ(SGW):VCNとOracle Service Network(OSN)間の連絡役です。プライベートエンドポイントまたはPSAを使用してOSNのオブジェクトストレージにアクセスすることもできますが、このブログ記事ではサービスゲートウェイの使用に焦点を当てています。サービスゲートウェイは、図3のコンピュートインスタンスがOSNのYumリポジトリにアクセスする必要がある場合にも便利です。これら3つの機能を使用するタイミングについては、ドキュメントの該当セクションを参照してください。
- APIゲートウェイの(プライベート)サブネットに関連付けられたルーティングテーブルには、すべてのOSNベースのトラフィック(オブジェクトストレージを含む)をSGWに転送するルーティングルールが含まれています。下の図4に示すターゲット「OIC」は、私の実装におけるサービスゲートウェイの名前です。

図4
ロードバランサーの設定
ロードバランサーには2つのバックエンドセットがあります。1つはWebアプリケーション用の2つのバックエンドを含み、もう1つはAPIゲートウェイ用です。

図5
基本的な考え方は、リクエストが /static_content の場合、ロードバランサーはリクエストを API GW (バックエンドセット – APIGW-Object-Storage-Private) に転送し、それ以外のリクエストはウェブアプリケーション (バックエンドセットが「amitoic」で始まる) に転送するというものです。これは、ロードバランサーのルーティングポリシールールによって実現されます。

図6
最後に、このルーティングポリシーをLBリスナー内のバックエンド設定と関連付けます。

図7
オブジェクトストレージ構成
静的コンテンツを格納するバケットについては、PARを作成する必要があります。

図8
PAR のターゲットとアクションは PAR を作成した管理者に基づいて決定されるため、最小限の権限を付与するには次のポリシーを使用できます。

図9
上記の図のポリシー記述で使用されているネットワークソースに注目してください。これにより、オブジェクトストレージへのアクセスは、指定されたソースからのみに制限されます。

図10
VCN01は図3で使用されているVCNです。したがって、ロードバランサーを経由したリクエストのみがオブジェクトストレージに送信されることが許可されます。
APIゲートウェイ構成
API GW の設定は標準的です。デプロイメントでは、作成した PAR を使用してルートを作成します (図 8)。

図11
WAFポリシー
WAFの設定は、バックエンドアプリケーション(Webアプリケーションとオブジェクトストレージ)に応じてカスタマイズできます。オブジェクトストレージには静的コンテンツが含まれ、HTTP GETリクエストのみがサポートされるため、WAFポリシーは静的コンテンツへのアクセス時にHTTP GETメッセージのみを許可するように設定できます。Webアプリケーションには、異なるWAFルールセットを設定できます。Webアプリケーションとオブジェクトストレージという2つの異なるバックエンドセットを管理するためのWAFポリシーの設定方法については、私のブログ記事を参照してください。
アーキテクチャの実践
上記の設定が完了すれば、準備は万端です。
オブジェクトストレージから静的コンテンツにアクセスする –

図12
ファイルはダウンロードされます。その他のすべてのリクエストは、ロードバランサーによってウェブアプリケーションに転送されます。

図13
PARがブラウザから直接アクセスされた場合、そのリクエストはブロックされるべきである。

図14
まとめ
このブログ記事では、OCIオブジェクトストレージサービスを使用して静的コンテンツを含むウェブサイトを構築する方法について解説します。
コメント
コメントを投稿