Azure Application GatewayからNginx、ASP.NET Core AppにWebトラフィックを転送

オウルです。

Azure Application Gatewayは、Web アプリケーションに対するトラフィックを管理できるWebトラフィックロードバランサーですが、WAF機能もあります。今回はWAFとしてAzure Application Gatewayを使用します。

本題は、認証CookieのセキュリティポリシーをCookieSecurePolicy.Alwaysで構成しているASP.NET Core Appに、Azure Application GatewayでTLS終了させたHTTPトラフィックを、どう転送するかです。

Azure Application Gateway
Azure Application Gateway の機能より引用

今回は、バックエンドプールのVM(Ubuntu)にHTTPトラフィックを転送するシンプルな構成です。

バックエンドプールのVM
OS Ubuntu18.04 LTS
Nginx 1.18.0
Redis Server 4.0.9
App .NET Core3.1

TLS 終了のメリット

僕の理解でざっくり説明すると、ハンドシェイク以降の通信は、セッション鍵(共通鍵暗号)を使ってC/S間で暗号・復号をするのでバックエンドのVMに負荷がかかります。なので、Azure Application GatewayでTLS終了させて、ASP.NET Core Appには平文で処理させます。公式ドキュメントのApplication Gateway での TLS 終了とエンド ツー エンド TLS の概要では、TLS 終了のメリットとして「パフォーマンスの向上」「バックエンド サーバーの使用率の向上」「インテリジェントなルーティング」「証明書の管理」の説明があります。

ASP.NET Core AppへのWebトラフィックの転

ASP.NET Core AppのCookie構成

クッキーを発行した同じサイトかつTLSでないとCookieをサーバに送信しませんよ、という何の変哲もない構成です。

当然上記の設定でhttpでアプリの認証などにアクセスしようとしても拒否されます。

Azure Application Gateway

公式ドキュメントのクイック スタート:Azure Application Gateway による Web トラフィックのルーティングに沿って進めれば問題なくデプロイできるので、デプロイ方法については省略します(TLS終了するように構成)。ポータル以外にも、PowerShell、Azure CLI、ARMのドキュメントが用意されています。

但し、SKUによって出来ることと出来ないことがあります。例えば独自ドメインを使いたい場合などはSKUの選択に注意が必要です。

補足 IPフィルターする場合

検証用に特定のIPアドレスからのみ接続を許可したい場合は、ネットワークセキュリティグループを作成して、Azure Application Gatewayのサブネットに適応してください。

Nginx構成

リバース プロキシとしてNginxを構成して、Kestrelで実行しているASP.NET Core Appに HTTPトラフィックを転送します。

まずはローカルでNginxをリバースプロキシとして試してみたいという方はこちらはどうぞ。

ASP.NET Core Appの構成

公式ドキュメントにあるLinux および非 IIS のリバース プロキシのスキームを転送する のように構成します。

以上でシンプルな構成ですが、Azure Application Gateway⇒Nginx⇒ASP.NET Core AppにWebトラフィックを転送することができます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA