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 サービスの一覧については、「仮想ネットワーク サービス エンドポイント」を参照してください。

Diagram of the flow of access restrictions.

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

アプリにアクセス制限規則を追加するには、次の手順に従います。

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

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

  3. 左側のメニューで、[ネットワーク] を選択します。

  4. [ネットワーク] ページ上の [受信トラフィックの構成] の下にある、[パブリック ネットワーク アクセス] 設定を選択します。

    Screenshot of the App Service networking options page in the Azure portal.

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

    Screenshot of the Access Restrictions page in the Azure portal, showing the list of access restriction rules defined for the selected app.

    一覧には、アプリに適用されている現在の制限がすべて表示されます。 アプリに仮想ネットワーク制限がある場合は、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/sites/write** Web アプリの設定を更新します

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

**Azure portal を使用してアクセス制限を更新する場合にのみ必要です。

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

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

アプリにアクセス制限規則を追加するには、[アクセス制限] ページ上で、[追加] を選択します。 規則は、保存後にのみ有効になります。

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

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

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

    Screenshot of the 'Add Access Restriction' pane.

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

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

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

  5. その規則固有の入力を打ち込んだ後、[規則の追加] を選択して、その規則を一覧に追加します。

最後に、[アクセス制限] ページ内で [保存] を選択します。

Note

  • アクセス制限規則は、最大 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 の [種類] ドロップダウン リストで、 [仮想ネットワーク] を選択します。

    Screenshot of the 'Add Restriction' pane with the Virtual Network type selected.

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

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

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

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

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

Note

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

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

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

    Screenshot of the 'Add Restriction' pane with the Service Tag type selected.

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

規則を編集する

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

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

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

    Screenshot of the 'Edit Access Restriction' pane in the Azure portal, showing the fields for an existing access restriction rule.

    Note

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

規則を削除する

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

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

Screenshot of the 'Access Restrictions' page, showing the 'Remove' ellipsis next to the access restriction rule to be deleted.

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

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

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

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

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

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

複数ソース規則

複数ソース規則を使用すると、1 つの規則に最大 8 個の IP 範囲または 8 個のサービス タグを組み合わせることができます。 512 を超える IP 範囲がある場合、または論理規則を作成する場合は、複数ソース規則を使用します。 論理規則では、複数の 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 アドレスの拒否規則を追加し、[一致しないルールのアクション] を [許可する] に構成します。

Screenshot of the 'Access Restrictions' page in the Azure portal, showing a single blocked IP address.

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

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

Screenshot of the 'Access Restrictions' page in the Azure portal, showing that no access restrictions are set for the SCM site or the app.

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

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

Screenshot of the 'Access Restrictions' page in the Azure portal, showing how to add Azure Front Door restriction.

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 における高度なアクセス制限シナリオ - ブログ記事