Azure App Service のアクセス制限を設定する

アクセス制限の設定により、優先度で順序付けした許可リストまたは拒否のリストを定義できます。このリストは、アプリへのネットワーク アクセスを制御します。 リストには、IP アドレスまたは Azure Virtual Network のサブネットを含めることができます。 1 つ以上のエントリがある場合、リストの最後にあるものは暗黙的に "すべて拒否" になります。 アクセス制限の詳細については、アクセス制限の概要に関するページを参照してください。

アクセス制限機能は、Azure App Service でホストされるすべてのワークロードに対して機能します。 ワークロードには、Web アプリ、API アプリ、Linux アプリ、Linux カスタム コンテナー、および Functions が含まれる場合があります。

アプリへの要求が行われると、送信元のアドレスがアクセス制限リスト内の規則に照らして評価されます。 送信元アドレスが存在しているサブネットが、Microsoft.Web に対するサービス エンドポイントで構成されている場合、ソース サブネットは、アクセス制限リスト内の仮想ネットワーク規則と比較されます。 アドレスがリスト内の規則に基づいてアクセスを許可されない場合、サービスから状態コード HTTP 403 の応答があります。

アクセス制限機能は、コードが実行される worker ホストの上流にある App Service フロントエンド ロールに実装されています。 そのため、アクセス制限は、事実上のネットワーク アクセス制御リスト (ACL) です。

Azure 仮想ネットワークから Web アプリへのアクセスを制限する機能は、サービス エンドポイントによって有効になります。 サービス エンドポイントを使用すると、選択したサブネットからマルチテナント サービスへのアクセスを制限できます。 App Service Environment でホストされているアプリへのトラフィックを制限することはできません。 App Service Environment 内の場合は、IP アドレス規則を適用することでアプリへのアクセスを制御できます。

注意

サービス エンドポイントは、ネットワーク側と、それらを有効化する Azure サービスの両方で有効になっている必要があります。 サービス エンドポイントをサポートしている Azure サービスの一覧については、「仮想ネットワーク サービス エンドポイント」を参照してください。

アクセス制限のフローの図。

ポータルでアクセス制限規則を管理する

アプリにアクセス制限規則を追加するには、次のようにします。

  1. Azure portal にサインインします。

  2. アクセス制限を追加したいアプリを選択します。

  3. 左側のウィンドウで、 [ネットワーク] を選択します。

  4. [ネットワーク] ウィンドウの [アクセス制限] で、 [アクセス制限を構成する] を選択します。

    Azure portal の App Service ネットワーク オプション ウィンドウのスクリーンショット。

  5. [アクセス制限] ページで、アプリに対して定義されているアクセス制限規則の一覧を確認します。

    選択したアプリに対して定義されているアクセス制限規則の一覧を示す、Azure portal の [アクセス制限] ページのスクリーンショット。

    一覧には、アプリに適用されている現在の制限がすべて表示されます。 アプリに仮想ネットワーク制限がある場合は、Microsoft.Web に対するサービス エンドポイントが有効かどうかが表に示されます。 アプリに対する制限が定義されていない場合は、どこからでもアプリにアクセスできます。

アクセス許可

少なくとも次のロールベースのアクセス制御のアクセス許可が必要です。Azure portal や CLI を介するか、サイト構成プロパティを直接設定するために、サブネット上または上位レベルでアクセス制限を構成します。

アクション 説明
Microsoft.Web/sites/config/read Web アプリの構成設定を取得します。
Microsoft.Web/sites/config/write Web アプリの構成設定を更新します。
Microsoft.Network/virtualNetworks/subnets/joinViaServiceEndpoint/action* ストレージ アカウントや SQL Database などのリソースをサブネットに結合する

*仮想ネットワーク (サービス エンドポイント) 規則を追加する場合にのみ必要です。

サービス エンドポイントベースの規則を追加していて、仮想ネットワークがアプリとは異なるサブスクリプションにある場合は、仮想ネットワークを持つサブスクリプションが Microsoft.Web リソース プロバイダーに登録されている必要があります。 プロバイダーはこのドキュメントに従って明示的に登録できますが、サブスクリプションで最初の Web アプリを作成するときにも自動的に登録されます。

アクセス制限規則を追加する

アプリにアクセス制限規則を追加するには、 [アクセス制限] ペインで、 [規則の追加] を選択します。 規則は、追加するとすぐに有効になります。

規則に適用される優先順位は、 [優先度] 列の最も小さい数字から始まる順です。 規則が 1 つでも追加されると、暗黙の "すべて拒否" が有効になります。

[アクセス制限の追加] ペインで、規則を作成するときは、次のようにします。

  1. [アクション] で、 [許可] または [拒否] を選択します。

    [アクセス制限の追加] ペインのスクリーンショット。

  2. 必要に応じて、規則の名前と説明を入力します。

  3. [優先度] ボックスに、優先度の値を入力します。

  4. [種類] ドロップダウン リストで、規則の種類を選択します。 次のセクションで、さまざまな種類の規則について説明します。

  5. ルール固有の入力を打ち込んだら、[保存] を選択して変更を保存します。

注意

  • アクセス制限規則は、最大 512 に制限されています。 512 を超えるアクセス制限規則が必要な場合は、Azure Front Door、Azure App Gateway、または代替の WAF などのスタンドアロン セキュリティ製品のインストールを検討することをお勧めします。

IP アドレスベースの規則を設定する

前のセクションで説明した手順に従いますが、次のような追加事項があります。

  • 手順 4 の [種類] ドロップダウン リストで、 [IPv4] または [IPv6] を選択します。

IPv4 と IPv6 の両方のアドレスについて、クラスレス ドメイン間ルーティング (CIDR) 表記で IP アドレス ブロックを指定します。 アドレスを指定するには、1.2.3.4/32 のようなものを使用できます。この場合、最初の 4 オクテットが IP アドレスを表し、 /32 がマスクです。 すべてのアドレスを表す IPv4 CIDR 表記は 0.0.0.0/0 です。 CIDR 表記の詳細については、「クラスレス ドメイン間ルーティング」を参照してください。

Note

IP ベースのアクセス制限規則では、アプリが App Service Environment にある場合のみ、仮想ネットワーク アドレスの範囲が処理されます。 アプリでマルチテナント サービスを使用している場合は、サービス エンドポイントを使用してトラフィックを制限することで、仮想ネットワーク内のサブネットを選択する必要があります。

サービス エンドポイントベースの規則を設定する

  • 手順 4 の [種類] ドロップダウン リストで、 [仮想ネットワーク] を選択します。

    [仮想ネットワーク] の種類が選択されている [制限の追加] ペインのスクリーンショット。

[サブスクリプション][仮想ネットワーク] 、および [サブネット] のドロップダウン リストで、アクセスを制限する対象を指定します。

サービス エンドポイントを使用することで、選択した Azure 仮想ネットワーク サブネットへのアクセスを制限できます。 選択したサブネットのサービス エンドポイントが Microsoft.Web でまだ有効になっていない場合は、自動的に有効になります。ただし、 [見つからない Microsoft.Web サービス エンドポイントを無視する] チェック ボックスをオンにしていない場合に限ります。 サービス エンドポイントをアプリで有効にしてサブネットでは有効にしないというシナリオは、主としてサブネット上でそれらを有効にするためのアクセス許可があるかどうかに依存します。

サブネット上でサービス エンドポイントを有効にするために他のユーザーが必要な場合は、 [見つからない Microsoft.Web サービス エンドポイントを無視する] チェック ボックスをオンにします。 アプリは、サービス エンドポイントが後からサブネット上で有効にされることを想定して構成されます。

App Service Environment で実行されているアプリへのアクセスを制限するために、サービス エンドポイントを使うことはできません。 アプリが App Service Environment 内にあるときは、IP アクセス規則を適用することでアプリへのアクセスを制御できます。

サービス エンドポイントにより、Application Gateway やその他の Web アプリケーション ファイアウォール (WAF) デバイスを使用してアプリを構成することができます。 また、セキュリティで保護されたバックエンドを使用して多層アプリケーションを構成することもできます。 詳細については、ネットワーク機能と App Service に関する記事と、「サービス エンドポイントと Application Gateway の統合」を参照してください。

注意

  • 現在、IP ベースの TLS/SSL バインディングと仮想 IP (VIP) を使用する Web アプリに対しては、サービス エンドポイントがサポートされていません。

サービス タグベースの規則を設定する

  • 手順 4 の [種類] ドロップダウン リストで、 [サービス タグ] を選択します。

    [サービス タグ] の種類が選択されている [制限の追加] ペインのスクリーンショット。

すべての使用可能なサービス タグがアクセス制限規則でサポートされています。 各サービス タグは、Azure サービスの IP 範囲の一覧を表します。 これらのサービスの一覧と特定の範囲へのリンクについては、サービス タグに関するドキュメントに記載されています。 リージョン スコープ ルールなどの高度な規則を構成するには、Azure Resource Manager テンプレートまたはスクリプトを使用します。

規則を編集する

  1. 既存のアクセス制限規則の編集を開始するには、 [アクセス制限] ページで、編集する規則を選択します。

  2. [アクセス制限の編集] ペインで変更を行い、 [ルールの更新] を選択します。

  3. [保存] を選択して変更を保存します。

    既存のアクセス制限規則のフィールドが示された、Azure portal の [アクセス制限の編集] ペインのスクリーンショット。

    注意

    規則を編集するときに、規則の種類を切り替えることはできません。

規則を削除する

  1. 規則を削除するには、[アクセス制限] ページで、削除する規則をオンにして、[削除] を選択します。

  2. [保存] を選択して変更を保存します。

削除されるアクセス制限規則の横に [削除] の省略記号が表示された [アクセス制限] ページのスクリーンショット。

アクセス制限の高度なシナリオ

次のセクションでは、アクセス制限を使用したいくつかの高度なシナリオについて説明します。

http ヘッダーによってフィルターを適用する

規則の一部として、追加の http ヘッダー フィルターを追加できます。 次の http ヘッダー名がサポートされています。

  • X-Forwarded-For
  • X-Forwarded-Host
  • X-Azure-FDID
  • X-FD-HealthProbe

ヘッダー名ごとに、最大 8 つの値をコンマで区切って追加できます。 http ヘッダーフィルターは、規則自体の後で評価され、規則を適用するには両方の条件が true である必要があります。

複数ソース規則

複数ソース規則を使用すると、1 つの規則に最大 8 個の IP 範囲または 8 個のサービス タグを組み合わせることができます。 IP 範囲数が 512 を超える場合、または複数の IP 範囲を 1 つの http ヘッダー フィルターと組み合わせる論理規則を作成する場合は、この方法を使用できます。

複数ソース規則は、単一ソース規則と同じ方法で定義されますが、各範囲をコンマで区切ります。

PowerShell の例:

Add-AzWebAppAccessRestrictionRule -ResourceGroupName "ResourceGroup" -WebAppName "AppName" `
  -Name "Multi-source rule" -IpAddress "192.168.1.0/24,192.168.10.0/24,192.168.100.0/24" `
  -Priority 100 -Action Allow

単一の IP アドレスをブロックする

単一の IP アドレスまたは IP アドレス ブロックを明示的にブロックし、他のすべてにアクセスを許可するシナリオでは、特定の IP アドレスの拒否規則を追加し、[一致しないルールのアクション] を [許可する] に構成します。

ブロックされた 1 つの IP アドレスが示された、Azure portal の [アクセス制限] ページのスクリーンショット。

SCM サイトへのアクセスを制限する

アプリへのアクセスを制御できるだけでなく、アプリによって使用される SCM (高度なツール) サイトへのアクセスも制限できます。 SCM サイトは Web デプロイ エンドポイントと Kudu コンソールの両方です。 SCM サイトとアプリに異なるアクセス制限を割り当てることも、アプリと SCM サイトの両方に同じ制限のセットを使うこともできます。 [メイン サイト ルールを使用する] チェック ボックスをオンにすると、規則の一覧が非表示になり、メイン サイトの規則が使用されます。 このチェック ボックスをオフにすると、SCM サイトの設定がもう一度表示されます。

SCM サイトまたはアプリに対して設定されているアクセス制限がないことを示す、Azure portal の [アクセス制限] ページのスクリーンショット。

特定の Azure Front Door インスタンスへのアクセスを制限する

Azure Front Door からアプリケーションへのトラフィックは、AzureFrontDoor.Backend サービス タグに定義されている既知の IP 範囲セットが発信元です。 サービス タグ制限規則を使用すると、トラフィックを Azure Front Door からの発信のみに制限できます。 トラフィックの発信元が特定のインスタンスのみになるようにするには、Azure Front Door によって送信される一意の HTTP ヘッダーに基づいて受信要求をさらにフィルター処理する必要があります。

Azure Front Door の制限を追加する方法が示された、Azure portal の [アクセス制限] ページのスクリーンショット。

PowerShell の例:

$afd = Get-AzFrontDoor -Name "MyFrontDoorInstanceName"
Add-AzWebAppAccessRestrictionRule -ResourceGroupName "ResourceGroup" -WebAppName "AppName" `
  -Name "Front Door example rule" -Priority 100 -Action Allow -ServiceTag AzureFrontDoor.Backend `
  -HttpHeader @{'x-azure-fdid' = $afd.FrontDoorId}

プログラムによってアクセス制限を管理する

プログラムによってアクセス制限を管理することができます。以下に、アクセス制限に規則を追加する方法の例と、"メイン サイト" と "高度なツール サイト" 両方の "一致しないルールのアクション" を変更する方法の例を示します。

メイン サイトのアクセス制限規則を追加する

次のいずれかのオプションを選択して、プログラムによって "メイン サイト" のアクセス制限規則を追加できます。

Cloud Shell で次のコマンドを実行できます。 az webapp config access-restriction コマンドの詳細については、こちらのページを参照してください。

az webapp config access-restriction add --resource-group ResourceGroup --name AppName \
  --rule-name 'IP example rule' --action Allow --ip-address 122.133.144.0/24 --priority 100

az webapp config access-restriction add --resource-group ResourceGroup --name AppName \
  --rule-name "Azure Front Door example" --action Allow --priority 200 --service-tag AzureFrontDoor.Backend \
  --http-header x-azure-fdid=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

高度なツール サイトのアクセス制限規則を追加する

次のいずれかのオプションを選択して、プログラムによって "高度なツール サイト" のアクセス制限規則を追加できます。

Cloud Shell で次のコマンドを実行できます。 az webapp config access-restriction コマンドの詳細については、こちらのページを参照してください。

az webapp config access-restriction add --resource-group ResourceGroup --name AppName \
  --rule-name 'IP example rule' --action Allow --ip-address 122.133.144.0/24 --priority 100 --scm-site true

メイン サイトの一致しないルールのアクションを変更する

次のいずれかのオプションを選択して、プログラムによって "メイン サイト" の "一致しないルールのアクション" を変更できます。

Cloud Shell で次のコマンドを実行できます。 az resource コマンドの詳細については、こちらのページを参照してください。 ipSecurityRestrictionsDefaultAction に指定できる値は、Allow または Deny です。

az resource update --resource-group ResourceGroup --name AppName --resource-type "Microsoft.Web/sites" \
  --set properties.siteConfig.ipSecurityRestrictionsDefaultAction=Allow

高度なツール サイトの一致しないルールのアクションを変更する

次のいずれかのオプションを選択して、プログラムによって "高度なツール サイト" の "一致しないルールのアクション" を変更できます。

Cloud Shell で次のコマンドを実行できます。 az resource コマンドの詳細については、こちらのページを参照してください。 scmIpSecurityRestrictionsDefaultAction に指定できる値は、Allow または Deny です。

az resource update --resource-group ResourceGroup --name AppName --resource-type "Microsoft.Web/sites" \
  --set properties.siteConfig.scmIpSecurityRestrictionsDefaultAction=Allow

Azure Functions のアクセス制限を設定する

アクセス制限は、関数アプリでも App Service プランと同じ機能を利用できます。 アクセス制限を有効にすると、許可されていない IP に対する Azure portal コード エディターが無効にもなります。

次のステップ

Azure Functions のアクセス制限
サービス エンドポイントと Application Gateway の統合
Azure App Service における高度なアクセス制限シナリオ - ブログ記事