プライベート エンドポイントを使って Standard ロジック アプリと Azure 仮想ネットワーク間のトラフィックをセキュリティで保護する
適用対象: Azure Logic Apps (Standard)
Standard ロジック アプリのワークフローと Azure 仮想ネットワーク間で安全かつプライベートに通信するために、受信トラフィック用に "プライベート エンドポイント" を設定し、送信トラフィック用に仮想ネットワーク統合を使用できます。
プライベート エンドポイントとは、Azure Private Link を使用するサービスにプライベートかつ安全に接続するネットワーク インターフェイスです。 このサービスは、Azure Logic Apps、Azure Storage、Azure Cosmos DB、SQL などの Azure サービスでも、独自の Private Link サービスでもかまいません。 プライベート エンドポイントによって、ご自分の仮想ネットワークのプライベート IP アドレスが使用され、実質的に、そのサービスが仮想ネットワークに組み込まれます。
この記事では、受信トラフィックと、送信トラフィック用の仮想ネットワーク統合に対して、プライベート エンドポイント経由のアクセスを設定する方法について説明します。
詳細については、次のドキュメントを確認してください。
- Azure プライベート エンドポイントとは
- プライベート エンドポイント - アプリを Azure 仮想ネットワークに統合する
- Azure Private Link とは
- リージョンでの仮想ネットワーク統合
前提条件
委任のないサブネットが含まれている新規または既存の Azure 仮想ネットワーク。 このサブネットは、仮想ネットワークからプライベート IP アドレスを配置して割り当てるために使用されます。
詳細については、次のドキュメントを確認してください。
HTTP 要求を送信してソリューションをテストできる次のようなツールをインストールまたは使用します。
- Visual Studio Code を Visual Studio Marketplace からの拡張機能と一緒に使用する
- PowerShell Invoke-RestMethod
- Microsoft Edge - ネットワーク コンソール ツール
- Bruno
- curl
注意事項
資格情報、シークレット、アクセス トークン、API キーなどの機密データがあるシナリオでは、必要なセキュリティ機能でデータを保護したうえで、ツールは必ずオフラインまたはローカルで動作し、データをクラウドに同期せず、オンライン アカウントにサインインする必要がないものを使用してください。 このようにすることで、機密データを一般に公開するリスクを軽減できます。
プライベート エンドポイントを経由する受信トラフィックを設定する
ワークフローへの受信トラフィックをセキュリティで保護するには、大まかに次の手順を行います。
Request トリガーや HTTP + Webhook トリガーなど、受信要求を受信して処理できる組み込みトリガーを使用して、ワークフローを開始します。 このトリガーにより、呼び出し可能なエンドポイントを使用するワークフローが設定されます。
ロジック アプリ リソースのプライベート エンドポイントを仮想ネットワークに追加します。
テスト呼び出しを行って、エンドポイントへのアクセスを確認します。 ロジック アプリ ワークフローをこのエンドポイントを設定した後に呼び出すには、仮想ネットワークに接続されている必要があります。
プライベート エンドポイントを経由する受信トラフィックに関する考慮事項
仮想ネットワークの外部からアクセスした場合、監視ビューはトリガーとアクションからの入力と出力にアクセスできません。
マネージド API Webhook トリガー (push トリガー) とアクションは、パブリック クラウドで実行され、プライベート ネットワークに呼び出すことができないため、機能しません。 呼び出しを受信するには、パブリック エンドポイントが必要です。 たとえば、このようなトリガーには、Dataverse トリガーと Event Grid トリガーがあります。
Office 365 Outlook トリガーを使用すると、ワークフローは 1 時間ごとにのみトリガーされます。
Visual Studio Code または Azure CLI からのデプロイは、仮想ネットワーク内からのみ機能します。 デプロイ センターを使用して、ロジック アプリを GitHub リポジトリにリンクできます。 その後、Azure インフラストラクチャを使用してコードをビルドし、デプロイできます。
GitHub インテグレーションを機能させるには、ロジック アプリから
WEBSITE_RUN_FROM_PACKAGE
設定を削除するか、値を0
に設定します。Private Link を有効にしても、送信トラフィックには影響なく、App Service インフラストラクチャを引き続き経由します。
プライベート エンドポイントを経由する受信トラフィックの前提条件
最重要の前提条件である仮想ネットワーク設定と共に、要求を受け取ることができる組み込みトリガーを使って開始される新しいまたは既存の Standard ロジック アプリ ワークフローが必要です。
たとえば、Request トリガーによって、ワークフローを含む他の呼び出し元からの受信要求を受信して処理できるエンドポイントがワークフローに作成されます。 このエンドポイントから、ワークフローの呼び出しとトリガーに使用できる URL が提供されます。 この例では、Request トリガーを使用して手順を続行します。
詳細については、Azure Logic Apps を使用した受信 HTTP 要求の受信と応答に関するページを参照してください。
ワークフローを作成する
まだ作成していない場合は、シングルテナント ベースのロジック アプリと空のワークフローを作成します。
デザイナーが開いたら、ワークフローの最初のステップとして Request トリガーを追加します。
シナリオの要件に基づいて、ワークフローで実行する他のアクションを追加します。
完了したら、ワークフローを保存します。
詳細については、Azure Logic Apps でシングルテナント ロジック アプリのワークフローを作成するに関する記事をご確認ください。
エンドポイントの URL をコピーする
ワークフロー メニューで、 [概要] を選択します。
[概要] ページで、後で使用できるようにワークフロー URL をコピーして保存します。
URL をテストしてワークフローをトリガーするには、HTTP 要求ツールとその手順を使用して、URL に HTTP 要求を送信します。
プライベート エンドポイント接続を設定する
ロジック アプリ リソース メニューの [設定] で、 [ネットワーク] を選択します。
[ネットワーク] ページの [受信トラフィック構成] セクションで、[プライベート エンドポイント] の横にあるリンクを選択します。
[プライベート エンドポイント接続] ページで、[追加]>[簡易] または [詳細] を選択します。
[詳細] オプションの詳細については、プライベート エンドポイントの作成に関する記事を参照してください。
[プライベート エンドポイントの追加] ペインで、エンドポイントに関して要求される情報を入力します。
詳細については、「プライベート エンドポイントのプロパティ」をご確認ください。
プライベート エンドポイントが Azure によって正常にプロビジョニングされたら、ワークフロー URL の呼び出しを再試行します。
今回は、予想どおりに
403 Forbidden
エラーが発生します。これは、プライベート エンドポイントが設定され、正しく動作していることを意味します。接続が正しく動作するようにするには、そのプライベート エンドポイントがある同じ仮想ネットワーク内に仮想マシンを作成し、ロジック アプリ ワークフローを呼び出してみてください。
仮想ネットワーク統合を使って送信トラフィックを設定する
ロジック アプリからの送信トラフィックをセキュリティで保護するために、ロジック アプリを仮想ネットワークと統合できます。 まず、サンプル ワークフローを作成してテストします。 次に、仮想ネットワーク統合の設定を行います。
仮想ネットワーク統合を経由する送信トラフィックに関する考慮事項
仮想ネットワークの設定は、送信トラフィックにのみ影響します。 引き続き App Service 共有エンドポイントを使用する受信トラフィックをセキュリティで保護するには、「プライベート エンドポイントを経由する受信トラフィックを設定する」を参照してください。
割り当て後にサブネット サイズを変更することはできません。そのため、アプリが到達する規模に対応するのに十分な大きさのサブネットを使用してください。 サブネット容量に関する問題を回避するには、64 個のアドレスを持つ
/26
サブネットを使用してください。 仮想ネットワークの Azure portal との統合のためにサブネットを作成する場合は、最小サブネット サイズとして/27
を使用する必要があります。Azure Logic Apps ランタイムが動作するには、バックエンド ストレージへの接続が中断されないようにする必要があります。 バックエンド ストレージがプライベート エンドポイントを介して仮想ネットワークに公開されている場合は、次のポートが開いていることを確認してください。
送信元ポート 宛先ポート source 宛先 Protocol 目的 * 443 Standard ロジック アプリと統合されたサブネット ストレージ アカウント TCP ストレージ アカウント * 445 Standard ロジック アプリと統合されたサブネット ストレージ アカウント TCP サーバー メッセージ ブロック (SMB) ファイル共有 Azure でホストされるマネージド コネクタを機能させるには、マネージド API サービスへの接続が中断されないようにする必要があります。 仮想ネットワークの統合では、ファイアウォールやネットワーク セキュリティ ポリシーでこれらの接続がブロックされていないことを確認します。 仮想ネットワークにネットワーク セキュリティ グループ (NSG)、ユーザー定義ルート テーブル (UDR)、またはファイアウォールを使っている場合、対応するリージョン内のすべてのマネージド コネクタ IP アドレスへの送信接続を仮想ネットワークが許可していることを確認します。 そうではない場合、Azure マネージド コネクタは機能しません。
詳細については、次のドキュメントを確認してください。
ワークフローの作成とテスト
まだ作成していない場合は、Azure portal でシングルテナント ベースのロジック アプリと空のワークフローを作成します。
デザイナーが開いたら、ワークフローの最初のステップとして Request トリガーを追加します。
インターネット経由では使用できない内部サービスを呼び出す HTTP アクションを追加し、
10.0.1.3
のようなプライベート IP アドレスを使って実行します。完了したら、ワークフローを保存します。
デザイナーから手動でワークフローを実行します。
この HTTP アクションは失敗しますが、ワークフローがクラウド内で実行されており、内部サービスにはアクセスできないため、これは仕様であり、想定された動作です。
仮想ネットワーク統合を設定する
Azure portal のロジック アプリ リソース メニューの [設定] で、[ネットワーク] を選択します。
[ネットワーク] ページの [送信トラフィック構成] セクションで、[仮想ネットワーク統合] の横にあるリンクを選択します。
[仮想ネットワーク統合] ページで、[仮想ネットワーク統合の追加] を選択します。
[仮想ネットワーク統合の追加] ペインで、サブスクリプション、内部サービスに接続する仮想ネットワーク、ロジック アプリを追加するサブネットを選択します。 終了したら、[接続] を選択します。
[仮想ネットワーク統合] ページでは、既定では [送信インターネット トラフィック] 設定が選択され、すべての送信トラフィックが仮想ネットワーク経由でルーティングされます。 このシナリオでは、WEBSITE_VNET_ROUTE_ALL という名前のアプリ設定は無視されます。
このアプリ設定を見つけるには、[設定] の [環境変数] を選択します。
仮想ネットワークで独自のドメイン ネーム サーバー (DNS) を使用する場合は、WEBSITE_DNS_SERVER アプリ設定を追加し (存在しない場合)、その値を DNS の IP アドレスに設定します。 セカンダリ DNS がある場合は、WEBSITE_DNS_ALT_SERVER という名前の別のアプリ設定を追加し、その値をセカンダリ DNS の IP に設定します。
Azure によって仮想ネットワーク統合が正常にプロビジョニングされたら、ワークフローを再度実行してみてください。
これで、HTTP アクションが正常に実行されるようになります。