Application Gateway で Web アプリケーション ファイアウォールを使用して Azure Container Apps を保護する
Azure Container Apps でアプリやマイクロサービスをホストする場合、インターネットに直接公開したくない場合があります。 代わりにリバース プロキシ経由で公開することができます。
リバース プロキシは、1 つ以上のサービスの前に配置され、受信トラフィックをインターセプトして適切な宛先に転送するサービスです。
リバース プロキシを使用すると、次のようなクロスカット機能をサポートするサービスをアプリの前に配置できます。
- ルート指定
- キャッシュ
- レート制限
- 負荷分散
- セキュリティ層
- 要求のフィルタリング
この記事では、内部 Container Apps 環境で Azure Application Gateway 上の Web アプリケーション ファイアウォール (WAF) を使用してコンテナー アプリを保護する方法について説明します。
Container Apps でのネットワークの概念の詳細については、「Azure Container Apps のネットワーク環境」を参照してください。
前提条件
カスタム VNet を使用した内部環境 : 内部環境上にあり、カスタム仮想ネットワークと統合されたコンテナー アプリを作成します。 カスタム仮想ネットワーク統合アプリを作成する方法の詳細については、「内部の Azure Container Apps 環境に仮想ネットワークを提供する」を参照してください。
セキュリティ証明書 : アプリケーション ゲートウェイに TLS/SSL 暗号化を使用する必要がある場合は、アプリケーション ゲートウェイにバインドするために使用される有効な公開証明書が必要です。
コンテナー アプリのドメインを取得する
次の手順を使用して、 既定のドメイン の値と、プライベート DNS ゾーンを設定するための 静的 IP を取得します。
ポータルのリソース グループの [概要] ウィンドウで、コンテナー アプリを選択します。
コンテナー アプリ リソースの [概要] ウィンドウで、Container Apps Environment のリンクを選択します。
コンテナー アプリ環境リソースの [概要] ウィンドウで、ページの右上隅にある [JSON ビュー] を選択して、コンテナー アプリ環境の JSON 表現を表示します。
defaultDomain と staticIp プロパティの値をコピーし、テキスト エディターに貼り付けます。 次のセクションでは、既定のドメインに対してこれらの値を使用してプライベート DNS ゾーンを作成します。
Azure プライベート DNS ゾーンを作成して構成します。
Azure portal のメニューまたは [ホーム] ページで [リソースの作成] を選択します。
「プライベート DNS ゾーン」を検索し、検索結果から、[プライベート DNS ゾーン] を選択します。
[作成] ボタンを選択します。
次の値を入力します。
設定 アクション サブスクリプション Azure サブスクリプションを選択します。 リソース グループ コンテナー アプリのリソース グループを選択します。 名前 前のセクションから Container Apps Environment の defaultDomain プロパティを入力します。 リソース グループの場所 既定値のままにします。 プライベート DNS ゾーンはグローバルであり、値は必要ありません。 [Review + create](レビュー + 作成) を選択します。 検証が終了したら、 [作成] を選択します。
非公開 DNS ゾーンが作成されたら、 [リソースに移動] を選択します。
[概要] ウィンドウで、[+レコード セット] 選択して、新しいレコード セットを追加します。
[レコードセットの追加] ウィンドウに次の値を入力します。
設定 アクション 名前 「*」と入力します。 Type [A - アドレス レコード] を選択します。 TTL 既定値のままにします。 TTL の単位 既定値のままにします。 IP アドレス 前のセクションの Container Apps Environment の staticIp プロパティを入力します。 [OK] を選択して レコード セットを作成します。
もう一度 [+レコード セット] を選択して、2 つ目のレコード セットを追加します。
[レコードセットの追加] ウィンドウに次の値を入力します。
設定 アクション 名前 「@」と入力します。 Type [A - アドレス レコード] を選択します。 TTL 既定値のままにします。 TTL の単位 既定値のままにします。 IP アドレス 前のセクションの Container Apps Environment の staticIp プロパティを入力します。 [OK] を選択して レコード セットを作成します。
ページの左側にあるメニューから、 [仮想ネットワーク リンク] ウィンドウを選択します。
[+ 追加] を選択して、次の値を持つ新しいリンクを作成します。
設定 操作 リンク名 「my-custom-vnet-pdns-link」と入力します。 仮想ネットワークのリソース ID を知っている オフのままにしておいてください。 仮想ネットワーク コンテナー アプリが統合されている仮想ネットワークを選択します。 自動登録を有効にする オフのままにしておいてください。 [OK] を選択して、仮想ネットワークのリンクを作成します。
Azure Application Gateway の作成と構成
[基本] タブ
[プロジェクトの詳細] セクションで、次の値を入力します。
設定 アクション サブスクリプション Azure サブスクリプションを選択します。 リソース グループ コンテナー アプリ用のリソース グループを選択します。 アプリケーション ゲートウェイ名 「my-container-apps-agw」と入力します。 リージョン コンテナー アプリがプロビジョニングされた場所を選択します。 レベル [WAF V2] を選択します。 WAF が必要ない場合 Standard V2 を使用できます。 自動スケールの有効化 既定値のままにします。 運用環境では、自動スケーリングをお勧めします。 Azure Application Gateway の自動スケーリングを参照する 可用性ゾーン [なし] を選択します。 運用環境では、可用性を高める Availability Zones をお勧めします。 HTTP2 既定値をそのまま使用します。 WAF ポリシー [新規作成] を選択し、WAF ポリシーに 「my-waf-policy」 と入力します。 [OK] を選択します。 Standard V2 の階層を選択した場合は、この手順をスキップします。 仮想ネットワーク コンテナー アプリが統合されている仮想ネットワークを選択します。 Subnet [サブネット構成の管理] を選択します。 使用するサブネットが既にある場合は、代わりに使用し、frontends セクション にスキップします。 my-custom-vnet の [サブネット] ウィンドウ内から [+サブネット] 選択し、次の値を入力します。
設定 アクション 名前 「appgateway-subnet」と入力します。 サブネットのアドレス範囲 既定値のままにします。 残りの設定は既定値のままにします。
[保存] を選んで新しいサブネットを作成します。
[サブネット] ウィンドウを閉じて、 [アプリケーション ゲートウェイの作成] ウィンドウに戻ります。
次の値を選択します。
設定 操作 Subnet 作成した [appgateway-subnet] を選択します。 [次へ: フロントエンド] を選んで続行します。
[フロントエンド] タブ
[フロントエンド] タブで、以下の値を入力します。
設定 操作 フロントエンド IP アドレス タイプ [パブリック] を選択します。 パブリック IP アドレス [新規追加] を選択します。 フロントエンドの名前として「my-frontend 」と入力し、[OK] を選択します Note
Application Gateway v2 SKU では、[パブリック] フロントエンド IP が存在する必要があります。 パブリックとプライベートの両方のフロントエンド IP 構成が存在していることはかまいませんが、パブリック IP のないプライベートのみのフロントエンド IP 構成は現在、v2 SKU ではサポートされていません。 詳細については、「こちら」を参照してください。
バックエンド を選択します。
[バックエンド] タブ
バックエンド プールは、適切なバックエンド サーバーに要求をルーティングするために使用されます。 バックエンド プールは、次のリソースの任意の組み合わせで構成できます。
- NIC
- パブリック IP アドレス
- 内部 IP アドレス
- Virtual Machine Scale Sets
- 完全修飾ドメイン名 (FQDN)
- Azure App Service や Container Apps などのマルチテナント バックエンド
この例では、コンテナー アプリを対象とするバックエンド プールを作成します。
バックエンド プールの追加 を選択します。
新しいタブを開き、コンテナー アプリに移動します。
コンテナー アプリの [概要] ウィンドウで、 アプリケーション URL を見つけてコピーします。
[バックエンド] タブに戻り、[バックエンド プールの追加] ウィンドウに次の値を入力します。
設定 アクション 名前 「my-agw-backend-pool 」と入力します。 [Add backend pool without targets](ターゲットを持たないバックエンド プールを追加する) このため、 [いいえ] を選択します。 ターゲットの型 [IP アドレスまたは FQDN] を選択します。 移行先 コピーした「Container App Application Url 」を貼り付け、 https:// プレフィックスを削除します。 この場所は、コンテナー アプリの FQDN です。 [追加] を選択します。
[バックエンド] タブで、 [次へ:構成] を選択します。
[構成] タブ
[構成] タブで、ルーティング規則を使用して作成したフロントエンドとバックエンド プールを接続します。
[+ ルーティング規則の追加] を選択します。 次の値を入力します。
設定 アクション 名前 「my-agw-routing-rule」と入力します。 優先順位 1 を入力します。 [リスナー] タブで、以下の値を入力します。
設定 操作 リスナー名 「my-agw-listener」 と入力します。 フロントエンド IP [パブリック] を選択します。 Protocol [HTTPS] を選択します。 使用する証明書がない場合は、[HTTP] を選択できます。 Port 「443」を入力します。 プロトコルに [HTTP] を選択した場合は、「 80 」と入力し、「default/custom domain」セクションに進みます。 証明書の選択 [証明書をアップロードする] を選びます。 証明書がキー コンテナーに格納されている場合は、[Key Vault から証明書を選ぶ] を選択できます。 証明書の名前 証明書の名前を入力します。 PFX 証明書ファイル 有効なパブリック証明書を選択します。 Password 証明書のパスワードを入力します。 既定のドメインを使用する場合は、次の値を入力します。
設定 操作 リスナーの種類 [Basic] を選択します エラー ページの URL なし のままにします。 または、カスタム ドメインを使用する場合は、次の値を入力します。
設定 操作 リスナーの種類 [マルチ サイト] を選択します。 Host type [シングル] を選択します。 ホスト名 使用するカスタム ドメイン名を入力します。 エラー ページの URL なし のままにします。 [バックエンド ターゲット] タブを選択し、次の値を入力します。
[バックエンド ターゲット] タブに切り替え、次の値を入力します。
設定 操作 ターゲットの型 前に作成した [my-agw-backend-pool] を選択します。 バックエンド設定 [新規追加] を選択します。 [バックエンド設定の追加] ウィンドウに次の値を入力します。
設定 操作 バックエンド設定名 「my-agw-backend-setting」と入力します。 バックエンド プロトコル [HTTPS] を選択します。 バックエンド ポート 「443」を入力します。 既知の CA 証明書を使用する [はい] を選択します。 新しいホスト名でオーバーライドする [はい] を選択します。 [ホスト名の上書き] [バックエンド ターゲットからホスト名を選択する] を選択します。 カスタム プローブを作成する このため、 [いいえ] を選択します。 [追加] を選択して、バックエンド設定を追加します。
[ルーティング規則の追加] ウィンドウで、もう一度、[追加] を選択します。
タグを選択します。
[次へ: 確認および作成] を選択してから、[作成] を選択します。
お使いの Application Gateway の プライベート リンク
プライベート リンクを活用することで、内部専用コンテナー アプリ環境へのセキュリティ保護接続を確立できます。これにより、Application Gateway は仮想ネットワーク経由でバックエンド上のコンテナー アプリと通信できます。
Application Gateway が作成されたら、[リソースに移動] を選択します。
左側のメニューから、[プライベート リンク] を選択し、[追加] を選択します。
次の値を入力します。
設定 アクション 名前 「my-agw-private-link」と入力します。 プライベート リンクのサブネット プライベート リンクを作成するサブネットを選択します。 フロントエンド IP 構成 Application Gateway のフロントエンド IP を選択します。 [プライベート IP アドレスの設定] で [追加] を選択します。
ページの下部にある [追加] を選択します。
コンテナー アプリを検証する
[概要] ページで、アプリケーション ゲートウェイのパブリック IP アドレスを見つけるか、アドレスを検索できます。 検索するには、[すべてのリソース] を選択し、検索ボックスに「my-container-apps-agw-pip」と入力します。 次に、検索結果でその IP を選択します。
アプリケーション ゲートウェイのパブリック IP アドレスに移動します。
要求はコンテナー アプリに自動的にルーティングされ、アプリケーション ゲートウェイが正常に作成されたことを確認します。
リソースをクリーンアップする
作成したリソースが不要になったら、リソース グループを削除してください。 リソース グループを削除すると、そのすべての関連リソースも削除されます。
リソース グループを削除するには:
Azure portal メニューで [リソース グループ] を選択するか、または [リソース グループ] を検索して選択します。
リソース グループ ページで、[my-container-apps] を検索して選択します。
[リソース グループ] ページで、 [リソース グループの削除] を選択します。
[リソース グループ名を入力してください] に「my-container-apps」と入力し、[削除] を選択します。